La differenza tra class variablese instancevariabili, è semplicemente una questione di who knows what?.
An instance variableè noto (= associato ) solo a quell'istanza concreta , da cui il nome.
public class Person {
private String firstName;
private String lastName;
[...]
}
La definizione di una classe è come un progetto per la costruzione di oggetti concreti . Forse questo punto ti confonde un po '. Ma scrivendolo in questo modo, ogni variabile sarebbe legata al suo oggetto concreto: ad esempio, ogni persona ha il suo nome
A class variabled'altra parte è - come dice il nome - noto a tutti i membri di una classe; o tecnicamente: è noto / associato a livello di classe . L'esempio tipico è un contatore di quanti oggetti sono stati creati, sebbene sia un esempio molto problematico; ma non importa in questa fase iniziale.
public class Person {
private String firstName;
private String lastName;
[...]
static int numberOfPersons = 0
}
numberOfPersonsviene dichiarato staticquale è la parola chiave per distinguere tra class variablese instance variabes. La variabile è dichiarata come le altre all'interno della definizione di classe. Ma la staticparola chiave segnala che è diversa.
firstName, lastNamesono variabili di istanza e associate a quell'istanza concreta
numberOfPersons è associato alla classe, in modo che ogni istanza possa accedere a questa variabile.
tl; dr
Il luogo in cui sono definite le variabili è la definizione della classe.
Le variabili di classe sono note a / associate al livello di classe, ovvero ogni istanza concreta ha accesso ad essa. Per definire una variabile di classe, utilizzare la parola chiave static.
Le variabili di istanza sono note solo a livello di istanza. Li definisci senza la staticparola chiave.
Ulteriore documentazione per Java è qui