Maison >Java >JavaQuestions d'entretien >Intervieweur : Veuillez expliquer en détail le rôle du mot-clé final et sa différence avec le mot-clé statique.

Intervieweur : Veuillez expliquer en détail le rôle du mot-clé final et sa différence avec le mot-clé statique.

王林
王林avant
2021-03-08 10:27:404578parcourir

Intervieweur : Veuillez expliquer en détail le rôle du mot-clé final et sa différence avec le mot-clé statique.

Préface :

Comme prévu, l'intervieweur a de nouveau posé cette question lors de la dernière interview : Pourriez-vous s'il vous plaît me dire la signification spécifique du mot-clé final et l'expliquer dans détail ? Expliquez sa fonction et sa différence avec le statique. Afin que toutes les personnes interviewées prêtent attention à cette question, les réponses sont spécialement compilées pour votre référence.

1. La signification du mot-clé final

La signification superficielle de final est immuable, la signification de constant est similaire au mot-clé const en langage C, cela signifie qu'il ne peut pas ; être modifié Quantité, qui est différente de la statique scalaire statique. Les variables statiques se réfèrent à un seul espace de stockage et la valeur peut être modifiée. La raison de l'utilisation de final est du point de vue de la conception de logiciels, car lorsque d'autres verront le mot-clé final, ils sauront ce que cela signifie et obtiendront l'effet de le comprendre. Cependant, c'est précisément à cause de l'existence de cette « sémantique » que cela. vous devez être prudent dans la programmation pour éviter toute utilisation abusive.

En Java, les modifications finales sont des constantes et les noms de variables doivent être en majuscules ;

Classe mathématique : public static final double E = 2.7182818284590452354 ;
. ..... De nombreuses variables dans le code source java sont modifiées avec final

2. Le rôle de final

Le rôle de final est différent selon la position de la modification , pour trois situations :

(1) Variables modifiées Les variables modifiées par final doivent être initialisées et ne peuvent pas être réaffectées une fois la valeur initiale attribuée.

Remarque : les variables locales n'entrent pas dans le cadre de notre discussion, car les variables locales elles-mêmes ont une portée et ne sont pas modifiées avec des mots tels que privé et public.

(2) Méthode modifiée, la méthode modifiée par final signifie qu'elle ne peut pas être réécrite.

(3) Classes modifiées, les classes modifiées par final ne peuvent pas être héritées.

Remarque : pour une classe modifiée en finale, toutes les méthodes membres de la classe sont implicitement désignées comme méthodes finales.

2.1. Variables finales modifiées

Les variables modifiées par final doivent être explicitement initialisées. L'initialisation peut être effectuée de trois manières : 1) initialisées lorsqu'elles sont définies, 2) définies dans la valeur du constructeur. , 3) Définissez la valeur de la variable d'instance finale dans le bloc non statique.

La variable finale modifiée signifie : cette variable ne peut pas être modifiée après son initialisation. Le sens immuable signifie ici que sa valeur est immuable pour les types de base, et pour les variables d'objet, sa référence est immuable, c'est-à-dire ne peut plus. pointer vers d’autres objets.

public class Test01{    
    final int x1= 10000;    
    final int x2;    
    final int x3;
    {
       x2 = 20000;
        }
    Public exe3(){        
        this.x3 = 3000;
        }
}

Si la variable modifiée par final est un type d'objet, alors inchangeable signifie que la variable ne peut pas pointer vers d'autres objets, mais la valeur de l'objet peut être modifiée, par exemple :

final Operate operate = new Operate() ;// operate有一个普通变量i初始化为10operate.i = 11;
operate.i = 12;
System.out.println(operate.i); //输出12上述是自定义类,即便是数组,List等集合类型,所保存的值也是可以更改的。

3. La différence entre final et static

static agit sur les variables membres pour indiquer qu'une seule copie est enregistrée, tandis que final est utilisé pour garantir que les variables sont immuables. Jetez un œil à un exemple sur Internet :

public class Test {
    public static void main(String[] args)  {
        MyClass myClass1 = new MyClass();
        MyClass myClass2 = new MyClass();
        System.out.println(myClass1.i);
        System.out.println(myClass1.j);
        System.out.println(myClass2.i);
        System.out.println(myClass2.j);
 
    }
}
class MyClass {
    public final double i = Math.random();
    public static double j = Math.random();
}
//运行结果,两次打印,j的值都是一样的,j是static类型的属于类,因此两次值相同。i不是static的因此属于对象,但是i的值是不可变的。

(Partage de vidéos d'apprentissage : tutoriel vidéo Java)

4. Autres connaissances liées à la finale

(1) Utilisez le mot-clé final. , si compilé Si le compilateur peut déterminer la valeur d'une variable pendant la phase de compilation, le compilateur utilisera la variable comme constante de compilation. Si cela doit être déterminé au moment de l’exécution, le compilateur n’optimisera pas le code concerné.

public class Test {    
    public static void main(String[] args)  {
        String a = "hello2";  
        final String b = "hello";
        String d = "hello";
        String c = b + 2;  
        String e = d + 2;
        System.out.println((a == c));
        System.out.println((a == e));
    }
}
    //final类型,在编译阶段能够确定值。
    //非final类型在编译阶段确定不了
    输出:
        true
        false
    public class Test {    
            public static void main(String[] args)  {
            String a = "hello2";  
            final String b = getHello();
            String c = b + 2;  
            System.out.println((a == c));
 
        }     
    public static String getHello() {        
        return "hello";
    }
}
//即便是final类型,编译阶段也确定不了值。输出false

(2) Attention à ne pas confondre final avec finalement, finalize(), etc.

(3) Déclarer les classes, méthodes et variables comme finales peut améliorer les performances, afin que la JVM ait la possibilité d'estimer puis d'optimiser.

(4) Les variables de l'interface sont toutes publiques statiques finales.

Recommandations associées : questions et réponses d'entretien Java

Lien original : http://www.cnblogs.com/liun1994/p/6691094.html

Auteur original : Suifenglangzi90

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer