2010-04-10 33 views
32

Trovo i defs circolari, i soggetti sono definiti dai loro verbi ma i verbi non sono definiti! Quindi come li definisci?Java: definizione dei termini di inizializzazione, dichiarazione e assegnazione

Il circolari Definizioni

inizializzazione: inizializzare una variabile. Può essere fatto al momento della dichiarazione .

assegnazione: per assegnare un valore a una variabile. Può essere fatto ovunque, solo una volta con l'identificatore finale.

dichiarazione: per dichiarare il valore su una variabile.

[aggiornamento, cercando di capire l'argomento con lambda calc]

D(x type) = (λx.x is declared with type) 
A(y D(x type)) = (λy.y is assigned to D(x type)) 

%Then after some beta reductions we get initialization. 
D(x type) me human     // "me" declared with type "human" 
A(y (D(x type) me human)) asking // "asking" assigned to the last declaration 

%if the last two statemets are valid, an initialization exists. Right? 
+1

[Dichiarazione] (https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html), [Inizializzazione] (https://docs.oracle.it/javase/tutorial/java/javaOO/initial.html), e [Assegnazione] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html) sono tutti inclusi in The Java Tutorials Trail : [Learning the Java Language] (https://docs.oracle.com/javase/tutorial/java/TOC.html). – jaco0646

risposta

56

assi gnment: gettare via il vecchio valore di una variabile e la sua sostituzione con uno nuovo

inizializzazione: si tratta di un tipo speciale di assegnazione: il primo. Prima che gli oggetti di inizializzazione abbiano il valore null e i tipi primitivi abbiano valori predefiniti come 0 o false. Può essere fatto in congiunzione con la dichiarazione.

dichiarazione: una dichiarazione indica il tipo di una variabile, insieme al suo nome. Una variabile può essere dichiarata una sola volta. Viene utilizzato dal compilatore per aiutare i programmatori a evitare errori come l'assegnazione di valori stringa a variabili intere. Prima di leggere o assegnare una variabile, questa variabile deve essere stata dichiarata.

+2

RIASSUNTO? L'inizializzazione è un cambiamento rispetto a un valore iniziale. La dichiarazione è etichettata con nome e tipo. L'assegnazione è un cambiamento più generale nel valore, l'inizializzazione un tipo speciale di assegnazione. – hhh

+1

corretto. L'inizializzazione è speciale solo perché è il primo compito di una variabile –

+2

Non penso che le primitive tengano la pre-inizializzazione dei valori '0' o' false', dato che quando si tenta di stampare una variabile non inizializzata, produce una compilazione errore temporale che indica che la variabile potrebbe non essere stata inizializzata, piuttosto che stamparne il valore. –

3

dichiarazione: ogni volta che si definisce una nuova variabile con il suo tipo

assegnazione: ogni volta che si cambia il valore di una variabile dandogli un nuovo valore

iniziale zione: un'assegnazione che viene fatto insieme alla dichiarazione, o comunque prima assegnazione che viene fatto con una variabile, di solito è una chiamata costruttore per un oggetto o un'assegnazione normale per un

+0

Non riesco a capire la differenza tra dichiarazione e inizializzazione. – hhh

+0

inizializzazione = dichiarazione + assegnazione? – hhh

+0

è più simile a initialization = first assignment (può essere implicito per i campi di classe, ma deve essere esplicito per le variabili locali) – pablochan

6

Dichiarazione variabile non è dichiarare "valore" a una variabile; è per dichiarare il tipo della variabile.

L'assegnazione è semplicemente la memorizzazione di un valore in una variabile.

L'inizializzazione è l'assegnazione di un valore a una variabile al momento della dichiarazione.

Queste definizioni si applicano anche ai campi.

int i; // simple declaration 
i = 42 // simple assignment 

int[] arr = { 1, 2, 3 }; 
// declaration with initialization, allows special shorthand syntax for arrays 

arr = { 4, 5, 6 }; // doesn't compile, special initializer syntax invalid here 
arr = new int[] { 4, 5, 6 }; // simple assignment, compiles fine 

Tuttavia, va detto che "inizializzazione" ha anche una definizione più rilassato di "prima assegnazione ad una variabile", indipendentemente da dove avviene.

int i; // local variable declaration 
if (something) i = 42; 
System.out.println(i); 
    // compile time error: The local variable i may not have been initialized 

Questo, tuttavia, compila:

int i; // the following also compiles if i were declared final 
if (something) i = 42; 
else i = 666; 
System.out.println(i); 

Qui i possono essere "inizializzata" da due posizioni possibili, da semplici incarichi. Per questo motivo, se i era un array, non è possibile utilizzare la sintassi abbreviata di inizializzatore di array speciale con questo costrutto.

Quindi, in pratica "inizializzazione" ha due possibili definizioni, a seconda del contesto:

  • Nella sua forma più stretta, è quando un incarico è comboed con la dichiarazione.
    • Esso consente, tra le altre cose, serie speciale scorciatoia inizializzatore sintassi
  • Più in generale, è quando un'assegnazione viene fatta una prima variabile.
    • Consente, tra l'altro, l'assegnazione di una variabile final in più posizioni.
      • Il compilatore avrebbe fatto del suo meglio per assicurare che esattamente una di quelle assegnazioni può accadere, quindi "inizializzazione" il final variabile

C'è anche classe JVM-contesto e inizializzazione dell'istanza, inizializzazione dell'oggetto contesto OOP, ecc.

+0

"int [] arr = {1, 2, 3};" è arr-dichiarato e {1,2,3} -assegnazione. Implica un'inizializzazione. Destra? – hhh

+0

Sì, questo è un esempio della sintassi di inizializzatore dell'array speciale utilizzata, quindi è l'inizializzazione. – polygenelubricants

57
String declaration; 
String initialization = "initialization"; 
declaration = "initialization"; //late initialization - will initialize the variable. 
    // Without this, for example, in java, you will get a compile-time error if you try 
    // to use this variable. 

declaration = "assignment"; // Normal assignment. 
    // Can be done any number of times for a non-final variable 
+7

"Il miglior codice è autoesplicativo /" –

0

Vengo da uno sfondo C/C++, ma le idee dovrebbero essere le stesse.

Dichiarazione - Quando una variabile viene dichiarata, sta dicendo al compilatore di mettere da parte un pezzo di memoria e associare un nome (e un tipo di variabile) con esso. In C/C++ che potrebbe assomigliare a questo:

int x; 

Il compilatore vede questo e imposta da parte una posizione di indirizzo per x e sa quali sono i metodi che dovrebbe utilizzare per eseguire operazioni su x (diversi tipi di variabili useranno le operazioni di accesso differenti). In questo modo, quando il compilatore corre in linea

x = 3 + 5; 

Sa mettere il valore intero 8 (non il valore in virgola mobile 8) nella posizione di memoria noto anche come 'x'.

Assegnazione - Questo è quando si inserisce un valore nella variabile dichiarata in precedenza.L'assegnazione è associata al "segno di uguale". Nell'esempio precedente, alla variabile 'x' è stato assegnato il valore 8.

Inizializzazione - Questo è quando una variabile è preimpostata con un valore. Non vi è alcuna garanzia che una variabile venga impostata su un valore predefinito durante la dichiarazione delle variabili (a meno che non venga esplicitamente resa tale). Si può sostenere che l'inizializzazione è il primo compito di una variabile, ma questo non è del tutto vero, come spiegherò a breve. Un tipico inizializzazione è una miscela della dichiarazione variabile con un'assegnazione come segue:

int x = 6; 

La distinzione tra inizializzazione e assegnazione diventa più importante quando si tratta di costanti, come questa ...

const int c = 15; 

Quando si ha a che fare con le costanti, si può solo assegnare il loro valore al momento della dichiarazione/inizializzazione. Altrimenti, non possono essere toccati. Questo perché le costanti si trovano spesso nella memoria del programma rispetto alla memoria dei dati e il loro effettivo compito si verifica in fase di compilazione rispetto al tempo di esecuzione.

0

Passaggio 1: Dichiarazione: int a;

Passaggio 2: Inizializzazione: a = 5;

Passaggio 3: Assegnazione: a = b; (es: int b = 10; ora a diventa 10)

3

Ecco una breve spiegazione con alcuni esempi.

Dichiarazione: dichiarazione è quando si dichiara una variabile con un nome, e una variabile può essere dichiarata solo una volta.

Esempio: int x;, String myName;, Boolean myCondition;

inizializzazione: inizializzazione è quando abbiamo messo un valore in una variabile, questo accade mentre si dichiara una variabile.

Esempio: int x = 7;, String myName = "Emi";, Boolean myCondition = false;

Assignment: assegnazione è quando abbiamo già dichiarata o inizializzata una variabile, e stiamo cambiando il valore. È possibile modificare il valore della variabile per il tempo desiderato o necessario.

Esempio:

int x = 7; x = 12; ....... Abbiamo appena cambiato il valore.

String myName = "Emi"; myName = "John" ....... Abbiamo appena modificato il valore.

Boolean myCondition = false; myCondition = true; ....... Abbiamo appena cambiato il valore.

Nota: nella memoria verrà salvato l'ultimo valore che abbiamo inserito.

Problemi correlati