ホームページ  >  記事  >  Java  >  インタビュアー: Final キーワードの役割と静的キーワードとの違いについて詳しく説明してください。

インタビュアー: Final キーワードの役割と静的キーワードとの違いについて詳しく説明してください。

王林
王林転載
2021-03-08 10:27:404525ブラウズ

インタビュアー: Final キーワードの役割と静的キーワードとの違いについて詳しく説明してください。

まえがき:

予想どおり、面接官は前回の面接でもこの質問をしました。最後のキーワードの具体的な意味と説明を教えてください。詳細?その機能と静的との違いを説明します。面接を受けるすべての人がこの質問に注目できるように、回答を特別にまとめましたのでご参照ください。

1.final キーワードの意味

final の表面的な意味は変更できない、つまり定数を意味し、C 言語の const キーワードと同様の意味です。変更できないこと 静的スカラーとは異なる数量 静的変数は 1 つの記憶領域のみを参照し、値は変更できます。 Final を使用する理由は、ソフトウェア設計の観点から、final というキーワードを他人が見たときに、それが何を意味するのかを知り、理解する効果が得られるからですが、この「意味論」が存在するからこそ、プログラミングには注意が必要です。誤用を避けるために使用してください。

Java では、最終的な変更は定数であり、変数名は大文字にする必要があります;

数学クラス: public static Final double E = 2.7182818284590452354; public staticfinal double PI = 3.14159265358979323846;
。 ....Javaソースコードの多くの変数はfinal

2で変更されています。finalの役割

finalの役割は変更箇所によって異なります。

(1) 変数の変更 Final によって変更された変数は初期化する必要があり、初期値が割り当てられた後に再割り当てすることはできません。

注: ローカル変数自体にはスコープがあり、プライベートやパブリックなどの単語で変更されないため、ローカル変数は説明の範囲外です。

(2) 変更されたメソッド、final で変更されたメソッドは書き換えできないことを意味します。

(3) 変更されたクラス Final で変更されたクラスは継承できません。

注: Final-Modified クラスの場合、クラス内のすべてのメンバー メソッドが暗黙的に Final メソッドとして指定されます。

2.1. 最終的に変更された変数

final によって変更された変数は明示的に初期化する必要があります。初期化は 3 つの方法で行うことができます: 1) 定義時に初期化する、2) コンストラクターで設定する 値, 3) 非静的ブロックの最後のインスタンス変数の値を設定します。

最終変更された変数の意味: この変数は初期化された後は変更できません。ここでの不変の意味は、その値が基本型に対して不変であり、オブジェクト変数に対してその参照が不変であることを意味します。他のオブジェクトを指すのが長くなります。

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

final によって変更された変数がオブジェクト型の場合、変更不可とは、その変数が他のオブジェクトを指すことはできないが、オブジェクトの値は変更できることを意味します。例:

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

3. Final と static

の違い static はメンバー変数に作用して 1 つのコピーだけが保存されることを示しますが、final は変数が不変であることを保証するために使用されます。インターネット上の例を見てください:

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的值是不可变的。

(学習ビデオ共有: java ビデオ チュートリアル)

4. その他の最終関連知識

(1) Final キーワードを使用します。コンパイル済みの場合 コンパイラがコンパイル段階で変数の値を決定できる場合、コンパイラはその変数をコンパイル時の定数として使用します。これを実行時に決定する必要がある場合、コンパイラは関連するコードを最適化しません。

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) Final を、finally、finalize() などと混同しないように注意してください。

(3) クラス、メソッド、変数を Final として宣言すると、JVM が推定して最適化できるようになるため、パフォーマンスが向上します。

(4) インターフェイス内の変数はすべて public static Final です。

関連する推奨事項: Java インタビューの質問と回答

元のリンク: http://www.cnblogs.com/liun1994/p/6691094.html

原作者: Suifenglangzi90

以上がインタビュアー: Final キーワードの役割と静的キーワードとの違いについて詳しく説明してください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。