Perché non posso svolgere compiti al di fuori di un metodo?

Se provo ad assegnare un valore a una variabile in una class, ma al di fuori di un metodo ottengo un errore.

class one{ Integer b; b=Integer.valueOf(2); } 

ma, se lo inizializzo durante la creazione, funziona.

 class one{ Integer b=Integer.valueOf(2); } 

All’interno di un metodo, funziona in entrambi i casi.

devi farlo

 class one{ Integer b; { b=Integer.valueOf(2); } } 

come le dichiarazioni devono apparire in un blocco di codice.

In questo caso, il blocco è un blocco di inizializzazione che viene aggiunto a ogni costruttore (o al costruttore predefinito in questo caso) Viene eseguito dopo ogni chiamata a super() e prima del blocco principale di codice in qualsiasi costruttore.

BTW: puoi avere un blocco di inizializzazione statico con static { } che viene chiamato quando la class è inizializzata.

per esempio

 class one{ static final Integer b; static { b=Integer.valueOf(2); } } 

Poiché le assegnazioni sono istruzioni e istruzioni sono consentite solo all’interno di blocchi di codice (metodi, costruttori, inizializzatori statici, ecc.)

Al di fuori di queste sono consentite solo le dichiarazioni.

Questo :

  class one{ Integer b=Integer.valueOf(2); } 

è una dichiarazione con un inizializzatore. Ecco perché è accettato

Una risposta più generale sarebbe che il corpo della class riguarda le dichiarazioni , non le affermazioni . C’è una disposizione speciale per le istruzioni che si verificano nel corpo della class, ma devono essere marcate esplicitamente come inizializzatori di classi o inizializzatori di istanze .

In Java, quando si definisce una class, è ansible definire variabili con valori predefiniti e aggiungere metodi. Qualsiasi codice eseguibile (come i compiti) DEVE essere contenuto in un metodo.

Questo è il modo in cui funziona java, non è ansible aggiungere codice non di dichiarazione (scusa non conosco il termine corretto) all’interno della class, tale codice deve essere all’interno dei metodi.

Penso che in termini di terminologia, un paio di altre risposte sono leggermente fuori. Le dichiarazioni sono anche dichiarazioni. In realtà, sono chiamati “dichiarazioni di dichiarazione”, che sono uno dei tre tipi di dichiarazioni. Una dichiarazione di assegnazione è una forma di “dichiarazione di espressione” e può essere utilizzata solo in costrutti quali metodi, costruttori e inizializzatori. Consulta la sezione Istruzioni nel link del tutorial di Oracle .

I metodi hanno la responsabilità di eseguire mutazioni sulle variabili membro. Se la variabile membro deve essere inizializzata, java fornisce un modo per farlo durante la costruzione, definizione della class (secondo caso). Ma la mutazione non può essere eseguita durante la definizione (caso precedente). Di solito è fatto a livello di metodo.

Gli oggetti sono pensati per mantenere lo stato, mentre i metodi sono pensati per operare su quello stato.