不可變對象和類,變量的作用域

可變對象和不可變對象

1、可變對象是一種創建後能修改的對象,他能直接或間接的引用數據域,能爲類中的變量賦予新的值

2、不可變對象是一種創建後內容就不能改變的對象,例如String類就是一種不可變對象;

如果一個類的所有數據域都是是私有的,也沒有修改起方法,但他有指向引用可變域方法的訪問器方法時,他就不是一個不可變對象;

而要設置一個不可變對象,首先要把數據域設置爲私有的,其次是不能設置修改器方法,然後還不要設置能指向引用可變域數據的訪問方法eg:

<span style="font-size:14px;"><span style="font-size:14px;">package newpackage2;

public class Object {
    private int number;
    private java.util.Date tame;
    
    public Object(int Newnumber){
        number = Newnumber;
        tame = new java.util.Date();
    }
    
    public int get(){
        return number;
    }
    
    public java.util.Date gettame(){
        return tame;
    }
}</span></span>
(代碼基於《java語言程序設計》)
類的數據域是私有的,也沒有修改器方法,但對象卻不是不可變對象,因爲他有能指向引用可變域數據的訪問方法,

<span style="font-size:14px;"><span style="font-size:14px;">Object case2 = new Object(45);
        java.util.Date tame = case2.gettame();
        tame.setTime(46446);</span></span>
gettame()方法是對Date類對象的引用,而通過這個引用就能改變tame的值。


變量作用域:

實際變量和靜態變量是作用域整個類的,所以不管在那個位置申明變量效果都是相同的;

一個變量如果是在類中的方法中定義的,那他的作用域就是這個方法中,而不能用於其他方法,這種變量就稱爲局部變量

如果一個類變量和一個局部變量名稱相同,哪裏局部變量優先,類變量則隱藏;eg:

<span style="font-size:14px;"><span style="font-size:14px;">private int x = 45;
    public void fx(){
        int x = 15;
        System.out.println("x = " + x);
    }</span></span>
<span style="font-size:14px;"><span style="font-size:14px;">public void fz(){
        System.out.println(" x = " + x);
    }</span></span>

第一個方法顯示的是: x = 15

第二個方法顯示的是: x = 45

在fx()方法中顯示了局部變量,而局部變量x只能作用於fx()方法,在方法fz()中顯示的就是類變量x的值;

而如果想要在fx()方法中使用類變量x, 就要是用this引用隱藏數據域,eg: 

<span style="font-size:14px;">public void fx(){
        int x = 15;
        System.out.println("x = " + x);
        this.x = x;
    }</span>
類變量的值就變爲了15。

在編程中我們爲了程序的可讀性和便於修改,一般都不要將同一個類中的變量設置爲相同的變量名



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章