這次有兩個主題,第一個太簡單啦,就是java中變量的命名規則,純記憶性東西。第二個主題,就是討論一下對象引用變量的一個注意點。
如果你對命名規則很熟啦,就直接看第二個內容吧。(上邊的圖稍微有點順序紊亂啊)
一、java中變量的命名規則
大多數語言的命名規則是相似的,只有一些微小的差別。
java中的關鍵字有:
boolean byte char double float int long short public private
protected abstract final native static strictfp synchronized transient volatile if
else do while switch case default for break continue assert
class extends implements import instanceof interface new package super this
catch finally try throw throws return void const goto enum
java的命名規則就說這麼多,變量除了注意命名規則之外,還要注意命名規范。
二、對象引用變量的注意之處
基本變量沒有這個毛病,通過代碼來引入問題。
1 public class Test { 2 public static void main(String[] args) { 3 int i1 = 10; 4 int i2 = i1; 5 i1 = 10000; 6 System.out.println("i1 = " + i1); 7 System.out.println("i2 = " + i2); 8 } 9 }
預測一下結果吧。OK,如你所料:
在看一段代碼,如果預測結果正確,就不要往下看啦。
1 public class Test { 2 public static void main(String[] args) { 3 Test t = new Test(); 4 Test.Dog d1 = t.new Dog(1);//若看不懂,只需看成創建了一個Dog類一個實例變量 5 Test.Dog d2 = d1;//把d1賦值個d2,此時d2的age是不是1? 6 d1.age = 10;//重新為d1的age屬性賦值成10 7 //打印結果 8 System.out.println("dog1's age = " + d1.age); 9 System.out.println("dog2's age = " + d2.age); 10 } 11 12 //為了節省空間能一眼看完,此處寫成內部類 13 class Dog { 14 //為了方便把屬性定義為public,實際中最好不要 15 public int age; 16 public Dog(int age) { 17 this.age = age; 18 } 19 20 } 21 }
猜猜結果:
猜對沒有,為什麼沒有更改d2的age,d2的age從1變成了10?
基本變量中存的就是實際值,而對象引用變量中存的是一個能找到實際值得數據(可以看成c語言中的地址,因此,所有的對象引用變量的大小都是一樣的),所以,當d1賦值d2時,只是把那個能找到實際對象的數據賦值給了d2,內存中只有一個Dog的實例,d1,d2指向同個變量。
所以,d1改變object的值時,d2因指向相同的object,所以,結果就不言而喻啦。
這說得還遠遠不夠,想深入了解,請找書看。
Challenges are what make life interesting and overcoming them is what makes lifes meaningful.