modificateur final :
Les variables membres finales modifiées doivent avoir une valeur initiale explicitement spécifiée par le programmeur.
Champ d'une classe : La valeur initiale doit être précisée dans un bloc d'initialisation statique ou lors de la déclaration du Champ.
Champ d'instance : le champ doit être déclaré dans un bloc d'initialisation non statique ou la valeur initiale doit être spécifiée dans le constructeur.
Variables locales finales : doivent être explicitement initialisées par le programmeur.
Quelle est la différence entre les variables de base finales modifiées et les variables de type référence ?
Variables de base modifiées par final : Les variables de base ne peuvent pas être réaffectées.
Variable de référence finale modifiée : Il est seulement garanti que l'adresse référencée par ce type de référence ne changera pas, c'est-à-dire qu'elle fait toujours référence au même objet, mais cet objet peut complètement changer.
Copiez le code comme suit :
/**
*/
importer java.util.* ;
classe publique Demo5
{
public static void main (String[] arguments)
{
final B b = nouveau B (22);
b.test();
// Change légalement la valeur, mais pointe toujours vers la même référence
b.setAge(20);
System.out.println(b.getAge());
// illégal
// b = nul ;
b.test2();
}
}
/**
fianl modifie les variables membres
*/
classe A
{
//légitime
final int a = 10 ;
//Spécifiez la valeur initiale dans le constructeur ou le bloc d'initialisation
chaîne de chaîne finale ;
final int c;
double d statique final ;
{
str = "bonjour" ;
//illégal
// une = 100 ;
}
statique
{
d = 100 ;
}
// Le constructeur peut spécifier des valeurs initiales pour les Champs non spécifiés dans le bloc d'initialisation
publicA()
{
// illégal
// str = "jdd" ;
c = 1 000 ;
}
public double changFinal()
{
// Vous ne pouvez pas spécifier une valeur initiale pour final dans une méthode normale
// renvoie d = 1000,90 ;
renvoie 0 ;
}
}
/**
fianl modifie les objets du tableau
*/
classe B
{
âge int privé ;
publicB()
{
}
public B (âge int)
{
this.age = âge;
}
public void setAge (int âge)
{
this.age = âge;
}
public int getAge()
{
renvoie this.age;
}
test de vide public()
{
final int[] arr={23 434,56 898} ;
System.out.println(Arrays.toString(arr));
Tableaux.sort(arr);
System.out.println(Arrays.toString(arr));
arr[2] = 200 ;
System.out.println(Arrays.toString(arr));
//La réaffectation suivante d'Arr est illégale
// arr = nul ;
}
/**
Approfondissez votre compréhension de la finale
*/
test vide public2()
{
String str1 = « Un avenir meilleur » ;
//Référence directe à "Better Future" dans le pool constant
String str2 = "Magnifique"+"Futur" ;
//vrai
System.out.println(str1 == str2);
Chaîne s1 = « Magnifique » ;
Chaîne s2 = « Futur » ;
Chaîne s3 = s1+s2 ;
//false s1 s2 est juste une variable qui ne peut pas être déterminée au moment de la compilation
//Si vous souhaitez le déterminer au moment de la compilation, utilisez final pour modifier s1 s2
System.out.println(str1 == s3);
}
}
Savez-vous quelque chose sur le modificateur final en Java ? Je pense qu'il a été clairement expliqué dans les commentaires, donc je n'entrerai pas dans les détails ici.