Sono sempre confuso tra statice finalparole chiave in Java .
Come sono differenti ?
Sono sempre confuso tra statice finalparole chiave in Java .
Come sono differenti ?
Risposte:
Diamo un'occhiata prima alle variabili statiche e ai metodi statici.
Class.variableClass.methodName() thiso superparole chiave in alcun modo.Java ha anche "classi nidificate statiche". Una classe nidificata statica è solo una che non ha implicitamente un riferimento a un'istanza della classe esterna.
Le classi nidificate statiche possono avere metodi di istanza e metodi statici.
Non esiste una classe statica di primo livello in Java.
il metodo principale è
staticdato che deve essere accessibile affinché un'applicazione possa essere eseguita prima che avvenga qualsiasi istanza.
final la parola chiave viene utilizzata in diversi contesti per definire un'entità che non può essere successivamente modificata.Una finalclasse non può essere sottoclassata. Questo viene fatto per motivi di sicurezza ed efficienza. Di conseguenza, molte delle classi di libreria standard Java sono final, ad esempio java.lang.Systeme java.lang.String. Tutti i metodi in una finalclasse sono implicitamente final.
Un finalmetodo non può essere sovrascritto da sottoclassi. Questo è usato per prevenire comportamenti imprevisti da una sottoclasse che modifica un metodo che può essere cruciale per la funzione o la coerenza della classe.
Una finalvariabile può essere inizializzata una sola volta, tramite un inizializzatore o un'istruzione di assegnazione. Non ha bisogno di essere inizializzato nel punto di dichiarazione: questa si chiama blank finalvariabile. Una variabile di istanza finale vuota di una classe deve essere definitivamente assegnata alla fine di ogni costruttore della classe in cui è dichiarata; allo stesso modo, una variabile statica finale vuota deve essere definitivamente assegnata in un inizializzatore statico della classe in cui è dichiarata; in caso contrario, si verifica un errore di compilazione in entrambi i casi.
Quando una classe interna anonima viene definita nel corpo di un metodo, tutte le variabili dichiarate finalnell'ambito di tale metodo sono accessibili dall'interno della classe interna. Una volta assegnato, il valore della variabile finale non può cambiare.
Class.methodName()
statico significa che appartiene alla classe e non a un'istanza, ciò significa che esiste una sola copia di quella variabile / metodo condivisa tra tutte le istanze di una particolare Classe .
public class MyClass {
public static int myVariable = 0;
}
//Now in some other code creating two instances of MyClass
//and altering the variable will affect all instances
MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();
MyClass.myVariable = 5; //This change is reflected in both instances
final non è completamente correlato, è un modo per definire una sola inizializzazione. È possibile inizializzare quando si definisce la variabile o all'interno del costruttore, da nessun'altra parte.
note Nota sui metodi e le classi finali, questo è un modo per affermare esplicitamente che il metodo o la classe non possono essere sostituiti / estesi rispettivamente.
Lettura extra Quindi sul tema dell'elettricità statica, stavamo parlando degli altri usi che potrebbe avere, a volte è usato nei blocchi statici. Quando si utilizzano variabili statiche a volte è necessario impostare queste variabili prima di utilizzare la classe, ma sfortunatamente non si ottiene un costruttore. Qui entra in gioco la parola chiave statica.
public class MyClass {
public static List<String> cars = new ArrayList<String>();
static {
cars.add("Ferrari");
cars.add("Scoda");
}
}
public class TestClass {
public static void main(String args[]) {
System.out.println(MyClass.cars.get(0)); //This will print Ferrari
}
}
Questo non deve essere confuso con i blocchi di inizializzazione dell'istanza che vengono chiamati prima del costruttore per istanza.
final is entirely unrelated, it is a way of defining a once only initialization. You can either initialize when defining the variable or within the constructor, nowhere else.
I due non sono davvero simili. statici campi sono campi che non appartengono a nessuna istanza particolare di una classe .
class C {
public static int n = 42;
}
Qui, il staticcampo nnon è associato a nessuna istanza particolare Cma all'intera classe in generale (motivo per cui C.npuò essere utilizzata per accedervi). Puoi ancora usare un'istanza di Cper accedere n? Sì, ma non è considerata una pratica particolarmente buona.
final d'altra parte indica che una particolare variabile non può cambiare dopo che è stata inizializzata.
class C {
public final int n = 42;
}
Qui, nnon può essere riassegnato perché lo è final. Un'altra differenza è che ogni variabile può essere dichiarata final, mentre non tutte le variabili possono essere dichiarate statiche.
Inoltre, possono essere dichiarate classi finalche indicano che non possono essere estese:
final class C {}
class B extends C {} // error!
Allo stesso modo, i metodi possono essere dichiarati finali per indicare che non possono essere sostituiti da una classe di estensione:
class C {
public final void foo() {}
}
class B extends C {
public void foo() {} // error!
}
publicclasse potenzialmente che definisce il file) o le staticclassi interne possono definire le staticvariabili. Altre classi interne sono istanze della classe esterna e non possono avere variabili statiche.
finale -
1) Quando applichiamo una parola chiave " finale " a una variabile , il valore di quella variabile rimane costante. (o) Una volta dichiarata una variabile come finale, il valore di quella variabile non può essere modificato.
2) È utile quando un valore variabile non cambia durante la durata di un programma
statico -
1) quando applichiamo una parola chiave " statica " a una variabile , significa che appartiene alla classe.
2) Quando applichiamo una parola chiave " statica " a un metodo , significa che è possibile accedere al metodo senza creare alcuna istanza della classe
static significa che esiste una sola copia della variabile in memoria condivisa da tutte le istanze della classe.
La finalparola chiave significa semplicemente che il valore non può essere modificato. Senza final, qualsiasi oggetto può cambiare il valore della variabile.
Statico e finale presentano alcune grandi differenze:
Le variabili o le classi statiche saranno sempre disponibili da (praticamente) ovunque. Final è solo una parola chiave che significa che una variabile non può essere modificata. Quindi se avesse:
public class Test{
public final int first = 10;
public static int second = 20;
public Test(){
second = second + 1
first = first + 1;
}
}
Il programma verrebbe eseguito fino a quando non tenterà di modificare il "primo" numero intero, causando un errore. Al di fuori di questa classe, avresti accesso alla "prima" variabile solo se avessi istanziato la classe. Ciò è in contrasto con il "secondo", che è sempre disponibile.
Pensa a un oggetto come un altoparlante. Se Speaker è una classe, avrà diverse variabili come volume, alti, bassi, colore ecc. Definisci tutti questi campi mentre definisci la classe Speaker. Ad esempio, hai dichiarato il campo colore con un modificatore statico, ciò significa che stai dicendo al compilatore che esiste esattamente una copia di questa variabile, indipendentemente da quante volte la classe è stata istanziata.
dichiarare
static final String color = "Black";
farà in modo che ogni volta che questa classe viene istanziata, il valore del campo colore sarà "Nero" a meno che non venga modificato.
public class Speaker {
static String color = "Black";
}
public class Sample {
public static void main(String args[]) {
System.out.println(Speaker.color); //will provide output as "Black"
Speaker.color = "white";
System.out.println(Speaker.color); //will provide output as "White"
}}
Nota: ora, una volta modificato il colore dell'altoparlante come final, questo codice non verrà eseguito, poiché la parola chiave final si assicura che il valore del campo non cambi mai.
public class Speaker {
static final String color = "Black";
}
public class Sample {
public static void main(String args[]) {
System.out.println(Speaker.color); //should provide output as "Black"
Speaker.color = "white"; //Error because the value of color is fixed.
System.out.println(Speaker.color); //Code won't execute.
}}
Puoi copiare / incollare questo codice direttamente nell'emulatore e provare.
Differenza facile,
Finale : significa che il valore della variabile è Finale e non cambierà da nessuna parte. Se dici che final x = 5 significa che x non può essere modificato, il suo valore è definitivo per tutti.
Statico: significa che ha un solo oggetto. supponiamo di avere x = 5, in memoria c'è x = 5 e il suo presente all'interno di una classe. se si crea un oggetto o un'istanza della classe, il che significa che esiste una casella specifica che rappresenta quella classe e le sue variabili e metodi. e se crei un altro oggetto o istanza di quella classe significa che ci sono due riquadri di quella stessa classe che ha x diversi al loro interno nella memoria. e se chiamate entrambe x in posizioni diverse e cambiate il loro valore, il loro valore sarà diverso. la casella 1 ha x che ha x = 5 e la casella 2 ha x = 6. ma se si rende x statico significa che non può essere creato di nuovo. puoi creare un oggetto di classe ma quell'oggetto non avrà x differenti in essi. se x è statico, la casella 1 e la casella 2 avranno entrambe la stessa x che ha il valore di 5. Sì, posso modificare il valore di static in qualsiasi punto poiché non è definitivo. quindi se dico che la casella 1 ha x e cambio il suo valore in x = 5 e successivamente creo un'altra casella che è box2 e cambio il valore di box2 x in x = 6. quindi poiché X è statico entrambe le caselle hanno la stessa x. ed entrambe le caselle daranno il valore di box come 6 perché box2 sovrascrive il valore da 5 a 6.
Sia finale che statico sono totalmente diversi. Final che è final non può essere modificato. statico che rimarrà come uno ma può essere modificato.
"Questo è un esempio. Ricorda che le variabili statiche sono sempre chiamate con il nome della loro classe. Perché sono solo una per tutti gli oggetti di quella classe. Quindi la Classe A ha x = 5, posso chiamarla e cambiarla con Ax = 6; "
Statico è qualcosa che qualsiasi oggetto in una classe può chiamare, che appartiene intrinsecamente a un tipo di oggetto.
Una variabile può essere definitiva per un'intera classe e ciò significa semplicemente che non può più essere modificata. Può essere impostato una sola volta e tentando di reimpostarlo si genererà un errore. È utile per una serie di motivi, forse vuoi dichiarare una costante, che non può essere cambiata.
Alcuni esempi di codice:
class someClass
{
public static int count=0;
public final String mName;
someClass(String name)
{
mname=name;
count=count+1;
}
public static void main(String args[])
{
someClass obj1=new someClass("obj1");
System.out.println("count="+count+" name="+obj1.mName);
someClass obj2=new someClass("obj2");
System.out.println("count="+count+" name="+obj2.mName);
}
}
Wikipedia contiene l'elenco completo delle parole chiave java .
Non proverò a dare una risposta completa qui. La mia raccomandazione sarebbe quella di concentrarsi sulla comprensione di ciò che ognuno di loro fa e quindi dovrebbe essere chiaro vedere che i loro effetti sono completamente diversi e perché a volte vengono usati insieme.
staticè per i membri di una classe (attributi e metodi) e deve essere compreso in contrasto con i membri di istanza (non statici). Consiglio di leggere "Comprensione dei membri di istanza e di classe" in The Java Tutorials. Posso anche essere usato in staticblocchi ma non mi preoccuperei per cominciare.
finalha significati diversi a seconda che si applichi a variabili, metodi, classi o altri casi. Qui mi piacciono di più le spiegazioni di Wikipedia .
I valori delle variabili statiche possono essere modificati sebbene una copia della variabile attraversi l'applicazione, mentre i valori delle variabili finali possono essere inizializzati una volta e non possono essere modificati in tutta l'applicazione.