首頁 >Java >java教程 >java final本質解釋

java final本質解釋

(*-*)浩
(*-*)浩轉載
2019-09-23 16:32:512554瀏覽

java final本質解釋

意思:final 意義是【只可以被賦值一次】。

賦值位置:在【宣告時賦值】、在【建構方法中賦值】

範例:

package com.dada.data;
 
public class TestFinal {
    // 1.声明时赋值
    private final int i = 0;
    private final int j;
    public TestF() {
        // 2.构造方法中赋值
        j = 10;
    }
}

注意:我們說final 是僅可以賦值一次沒錯,但是我們知道在java 中【值有兩種】,【基本資料型別的值】和【引用資料型別的值】,對基本資料型別來說,賦值就是直接把【值賦給變數】,對於引用資料型別來說就是把【引用賦給變數】。

因此:僅可以賦值一次的意義也就分為兩種情況了,1.如果是基本資料型,那麼就是值本身不能變;2.如果是引用資料型別的值,那就是引用不能變,但是被引用的內容是可以變的。

範例:

定義Student 類別:

package com.dada.data;
 
public class Student {
	private int id;
	private String name;
	private int score;
	public Student(int id, String name, int score) {
		this.id = id;
		this.name = name;
		this.score = score;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}
	
	@Override
	public String toString() {
		return "id: " + id + "\t name:" + name + "\tscore:" + score;
	}
}

定義測試類別:

#
package com.dada.data;
 
public class TestFinal {
	private final Student ss;
	
	public static void main(String[] args) {
		TestFinal tf = new TestFinal();
	}
	public TestFinal() {
		Student student = new Student(1, "dada", 3);
		// 第一次赋值
		ss = student;
		System.out.println(ss.toString());
		
		// 修改引用所对应的对象的内容
		student.setId(2);
		student.setName("hehe");
		student.setScore(10);
		System.out.println(ss.toString());
	}
}

輸出結果:

id: 1     name:dada    score:3
id: 2     name:hehe    score:10

總結:

由上面的例子可以知道,變數被final 修飾之後其引用的內容還是可以被修改的,之所以很多時候我們感覺它不能被修改是因為:

1.通常我們是在定義變數時進行的賦值,這個時候對於基本型別資料來說它是永遠不能改變的。

2.對於引用型別資料來說,因為我們無法取得對應的引用,所以也會覺得引用型別資料也是不能被修改的。

以上是java final本質解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除