final關鍵字

1    使用final修飾的變量必需要給它賦予初始值(也能夠在構造函數中賦予初始值),不然編譯沒法經過。java

 

2    對於final關鍵字修飾的變量賦予初始值的方法函數

  • 直接在定義的時候  final  xxx xxx = xxx;
  • 構造函數中賦予初始值;

含有final關鍵字修飾的變量,對於其賦值 ,要麼在定義變量的時候賦值,要麼在構造函數中進行構造賦值,不管構造函數入參是什麼,是否有入參,構造器中必須同時包含全部的有final關鍵字修飾的變量並對其進行賦值,不然編譯沒法經過。this

這不是從程序執行的角度來看(程序執行可能用不到類中定義的函數或者變量),而是從程序自己的角度去考慮,考慮這個程序是否有邏輯上的不通,是否能夠在邏輯上被全部能使用這個程序的其餘程序所調用。spa

 

3    final關鍵字修飾的對象變量是不變的地址值,其中的屬性的值是能夠變,不變的只是對象所在的地址值,只保證對象(地址)不變,不關心對象到底有什麼樣的屬性,或者屬性的值是否會變。code

 

4    final修飾的變量不能賦值兩次,哪怕兩次賦值的東西是同一個東西,它無論你賦的什麼值,它只關心你只要賦值一次,第二次就不能再進行賦值操做。對象

下面的是具體的例子。get

public class NoteBook {
	private int num;
	private String name;

	public void setNum(int num) {
		this.num = num;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getNum() {
		return num;
	}

	public String getName() {
		return name;
	}
}

 

public class Human {
	private String name;
	private final int age;
	private String address;
	private final NoteBook notebook;

	
	//這幾個構造函數的例子就是說明不管入參是什麼,是否入參,又要對final關鍵字修飾的變量進行初始化;
	public Human() {
		age = 120;
		notebook = new NoteBook();
	}

	public Human(int age, NoteBook notebook) {
		this.age = age;
		this.notebook = notebook;
	}
	
	public Human(int xxx1, String xxx2, char xxx3) {
		age = 580;
		this.notebook = new NoteBook();
		xxx1 ++;
		this.address = xxx2;
	}



	public void setAddress(String address) {
		this.address = address;
	}

	public void setName(String name) {
		this.name = name;
	}

	// public void setNoteBook(NoteBook notebook) {
	// 	this.notebook = notebook;
	// } 由於 notebook是final修飾的,因此不能二次賦值;


	public int getAge() {
		return age;
	}

	public String getName() {
		return name;
	}

	public String getAddress() {
		return address;
	}

	public NoteBook getNoteBook() {
		return notebook;
	}


}

 

public class Test {
	public static void main(String args[]) {
		NoteBook notebook = new NoteBook();
		notebook.setNum(15);
		Human human = new Human(599,notebook);

		System.out.println(human.getAge());
		System.out.println(human.getNoteBook().getNum());


		notebook.setNum(9999999);//對final修飾的對象變量的屬性進行二次賦值

		System.out.println(human.getNoteBook().getNum());//,編譯經過,結果是9999999

	}

}
相關文章
相關標籤/搜索