letzter Modifikator:
Endgültig geänderte Mitgliedsvariablen müssen einen vom Programmierer explizit angegebenen Anfangswert haben.
Feld einer Klasse: Der Anfangswert muss in einem statischen Initialisierungsblock oder bei der Deklaration des Feldes angegeben werden.
Instanzfeld: Das Feld muss in einem nicht statischen Initialisierungsblock deklariert werden oder der Anfangswert muss im Konstruktor angegeben werden.
Letzte lokale Variablen: müssen vom Programmierer explizit initialisiert werden.
Was ist der Unterschied zwischen endgültig modifizierten Basisvariablen und Referenztypvariablen?
Durch final geänderte Basisvariablen: Basisvariablen können nicht neu zugewiesen werden.
Endgültige geänderte Referenzvariable: Es wird nur garantiert, dass sich die von diesem Referenztyp referenzierte Adresse nicht ändert, dh sie verweist immer auf dasselbe Objekt, dieses Objekt kann sich jedoch vollständig ändern.
Kopieren Sie den Codecode wie folgt:
/**
*/
import java.util.*;
öffentliche Klasse Demo5
{
public static void main(String[] args)
{
finales B b = neues B(22);
b.test();
// Den Wert legal ändern, aber immer noch auf dieselbe Referenz verweisen
b.setAge(20);
System.out.println(b.getAge());
// illegal
// b = null;
b.test2();
}
}
/**
fianl ändert Mitgliedsvariablen
*/
Klasse A
{
//legitim
final int a = 10;
//Anfangswert im Konstruktor oder Initialisierungsblock angeben
final String str;
final int c;
letztes statisches Doppel d;
{
str = "Hallo";
//illegal
// a = 100;
}
statisch
{
d = 100;
}
// Der Konstruktor kann Anfangswerte für Felder angeben, die nicht im Initialisierungsblock angegeben sind
publicA()
{
// illegal
// str = "ddd";
c = 1000;
}
öffentliches Double changFinal()
{
// Sie können in einer normalen Methode keinen Anfangswert für final angeben
// return d = 1000,90;
0 zurückgeben;
}
}
/**
fianl ändert Array-Objekte
*/
Klasse B
{
privates Int-Alter;
publicB()
{
}
öffentliches B(int-Alter)
{
this.age = Alter;
}
public void setAge(int age)
{
this.age = Alter;
}
public int getAge()
{
return this.age;
}
öffentlicher Void-Test()
{
final int[] arr={23,434,56,898};
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
arr[2] = 200;
System.out.println(Arrays.toString(arr));
//Die folgende Neuzuweisung von Arr ist illegal
// arr = null;
}
/**
Vertiefen Sie Ihr Verständnis von final
*/
public void test2()
{
String str1 = „Bessere Zukunft“;
//Direkter Verweis auf „Better Future“ im Konstantenpool
String str2 = "Beautiful"+"Future";
//WAHR
System.out.println(str1 == str2);
String s1 = „Wunderschön“;
String s2 = „Zukunft“;
Zeichenfolge s3 = s1+s2;
//false s1 s2 ist nur eine Variable, die zur Kompilierungszeit nicht bestimmt werden kann
// Wenn Sie es zur Kompilierungszeit ermitteln möchten, verwenden Sie final, um s1 s2 zu ändern
System.out.println(str1 == s3);
}
}
Weißt du etwas über den finalen Modifikator in Java? Ich glaube, er wurde in den Kommentaren klar erklärt, daher werde ich hier nicht auf Details eingehen.