可變對象和不可變對象
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。在編程中我們爲了程序的可讀性和便於修改,一般都不要將同一個類中的變量設置爲相同的變量名