ホームページ  >  記事  >  Java  >  Javaでのfinalキーワードの使用方法

Javaでのfinalキーワードの使用方法

WBOY
WBOY転載
2023-04-26 19:37:051336ブラウズ

1. 理解

final: 最終的な

2. 関数

変更に使用できる最終的な構造: クラス、メソッド、変数

1. 変更 - クラス

final はクラスを変更するために使用されます。これは、このクラスが他のクラスに継承できないことを示し、セキュリティを向上させ、プログラムの可読性を向上させます。

例: String クラス、System クラス、StringBuffer クラス...

コードのデモ:

最終クラス A{
}
class B は A を拡張します{ //エラー。継承できません。
}

2. Modification-method

final はメソッドの変更に使用され、このメソッドがサブクラスによってオーバーライドできないことを示します。

例: Object#getClass();

コードのデモ:

class A {
   public final void print() {
     System.out.println("A");
   } 
}
class B extends A {
    public void print() { 
    // 错误,不能被重写。
    } 
}

3. 変更変数

最終的に変更された変数 (メンバー変数またはローカル変数) は定数と呼ばれます。名前は大文字で、一度しか割り当てることができません。

static Final は、属性 (グローバル定数) を変更するために使用されます。

コードのデモ:

class A {
   private final String INFO = "嘻嘻"; //声明常量
     public void print() {     
     //INFO = "哈哈";
     //The final field A.INFO cannot be assigned
     } 
}

3.1 変更メンバー変数 (プロパティ)
Final マーク付きのメンバー変数は、宣言 (明示的に初期化) するか、各コンストラクターまたはコード ブロック内で宣言する必要があります。使えるようになる前に。

例:

final double MY_PI = 3.14;

3.2 変更 - ローカル変数
final を使用してローカル変数を変更する場合、次のことを示します。この仮パラメータは定数です。このメソッドを呼び出すときは、実パラメータを定数パラメータに割り当てます。この仮パラメータは、一度割り当てられるとメソッド本体内でのみ使用でき、再割り当てすることはできません。

3. よくある質問

//题目一:
public class Test1 {    
        public int addOne(final int x) {
         //   return ++x;
         //Cannot assign a value to final variable 'x'
            return x + 1;
        }
}
//题目二:
public class Something {
    public static void main(String[] args) {
       Other o = new Other();
       new Something().addOne(o);
    }
    public void addOne(final Other o) {
       // o = new Other();
       o.i++;
     } 
}
class Other {
   public int i; 
}
//题目三:
class Root{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root(){
		super();
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid(){
		super();
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg){
		//通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}	
	public Leaf(){
		//通过super调用父类中有一个字符串参数的构造器
		super("小老师ir");
		System.out.println("Leaf的构造器");
	}
}
public class LeafTest{
	public static void main(String[] args){
		new Leaf(); 
		System.out.println();
		new Leaf();
	}
}
/*output:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:小老师ir
Leaf的普通初始化块
Leaf的构造器
Root的普通初始化块
Root的无参数的构造器
Mid的普通初始化块
Mid的无参数的构造器
Mid的带参数构造器,其参数值:小老师ir
Leaf的普通初始化块
Leaf的构造器
*/

以上がJavaでのfinalキーワードの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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