Java SE 20 の最終キーワード

25 番目の最後のキーワード

final キーワードは、最終的で不変であることを意味します。

  • よくある4つの使い方
  1. クラスを変更するために使用できます
  2. メソッドを変更するために使用できます
  3. ローカル変数の変更に使用できます
  4. メンバー変数の変更にも使用できます

25.1 final キーワードの変更されたクラス

  • 意味: 現在のクラスはサブクラス (宦官クラス) を持つことはできません
  • フォーマット:
public final class 类名称 {
    
    
	//...
}
  • 注: クラスが final の場合、その中のすべてのメンバー メソッドをオーバーライドできません (息子がないため)。

25.2 final キーワードはメソッドを変更します

  • 意味: final キーワードを使用してメソッドを変更する場合、このメソッドは最終メソッドです。つまり、上書きおよび再書き込みはできません。
  • フォーマット:
修饰符 final 返回值类型 方法名称(参数列表){
    
    
	//方法体
}
  • 例:
public abstract class Fu {
    
    
	
	public final void method() {
    
    
		System.out.println("父类方法执行");
	}
	
	public abstract void methodAbs();
}
public class zi entends Fu {
    
    
	
	//不能覆盖重写
/*	@Override
	public final void method() {
		System.out.println("父类方法执行");
	}	*/

	public void methodAbs() {
    
    }
}
  • 注:
    クラスとメソッドの場合、abstract キーワードと final キーワードは矛盾するため同時に使用できません。(一方は上書きする必要があり、一方は上書きできません)

25.3 final キーワードはローカル変数を変更します

  • 基本型の場合、不変とは、変数内のデータを変更できないことを意味します
  • 参照型の場合、不変とは、変数のアドレス値が不変であることを意味します。
public class Demo {
    
    
	
	public static void main(String[] args) {
    
    
		//一旦使用final用来修饰局部变量,不那么这个变量就不能进行更改。
		final int num1 = 10;
		
		//正确写法!只要保证有唯一一次赋值即可
		final int num2;
		num2 = 20;
	
		
		final Person per1 = new Person( name:"IU");
		System.out.println(per1.getName());
//		per1 = new Person( name:"Yonna");//报错
		per1.setName("Suzy");
		System.out.println(per1.getName());//地址值不可变,但是内容可以变
	}
	
}
public class Person {
    
    
	
	private String name;
	
	public Person() {
    
    
	}
	
	public Person(String name) {
    
    
		this.name = name;
	}
	
	public String getName() {
    
    
		return name;
	}
	
	public void setName(String name) {
    
    
		this.name = name;
	}
	
}

25.4 final キーワードはメンバー変数を変更します

  1. メンバー変数にはデフォルト値があるためです。したがって、final を使用した後、手動で値を割り当てる必要があり、デフォルト値は与えられません。
  2. 最終メンバー変数については、直接割り当てを使用するか、コンストラクター割り当てを使用します。(2つのうちの1つを選択してください)
  3. クラス内のオーバーロードされたすべてのコンストラクターが最終的に最終的なメンバー変数に値を割り当てるようにする必要があります。
public class Person1 {
    
    
	
	private final String name = "IU";//直接赋值
	
	public Person() {
    
    
	}
	
	public Person(String name) {
    
    
		this.name = name;
	}
	
	public String getName() {
    
    
		return name;
	}
	
	public void setName(String name) {
    
    
		this.name = name;
	}
	
}
public class Person2 {
    
    
	
	private final String name;
	
	public Person() {
    
    //通过构造方法进行赋值
		name = "IU";
	}
	
	public Person(String name) {
    
    
		this.name = name;
	}
	
	public String getName() {
    
    
		return name;
	}
	
//	public void setName(String name) {
    
    
//		this.name = name;
//	}
	
}

おすすめ

転載: blog.csdn.net/Niiuu/article/details/104232939