close

Java 雖然抄自 C++ 語言, 但是還是有許多改變需要注意。

* Java 的運算符號(operator)及其運算次序跟C++相同 (修正一些C/C++未規定清楚的), 
 且&&與||也有short cut evaluation(或稱short circuit或lazy evaluation)的特性。 

* Java 沒有指標, 保留了"參考"(reference), 但是一些規定跟C++ 也不太一樣。
 -- 八大原始型態(Primitive type) 的單一變數不能宣告出"參考"
   ==> 在C++中可以 long salary;  long& pay=salary; 使pay與salary參考同位址,
          再來寫 pay=38; 就如同寫 salary=38;
       但是在Java中沒有辦法這樣做。
 -- 事實上, 除了八大原始型態的單一變數外, 所有其它變數都是"參考",
   包括八大原始型態的array(陣列)變數也都是"參考"(陣列是object)。
 -- 既然array是參考, 宣告時不能宣告它的size
   例如 int x[60]; 是錯的, 只能寫 int x[];  或 int[] x;
   之後再用如 x = new int[60];  使 x 參考到新建的 array object,
   當然宣告時也可以順便new啦, 如 int x[]= new int[60];
 -- 注意 int [] x, y;  相當於 int x[], y[];
 -- 複習:
      Java中任何東東(包括原始型態)的 array 一律為 object, 只是個"reference"
      就是說array和任何object宣告後並不會自動creat, 一定要用 new 才能生出來 

* 注意對"參考"所做的assignment是改變"參考", 不是改變其參考的物件!
 -- 例如假設已有 Student 這class,
       Student x = new Student("張三");
       Student y = new Student("李四");
       y = x;   // 這使 y 和 x 都參考到 "張三", 而"李四"就不見了!
   // 因為Java有Auto Garbage Collection的能力, "李四"所佔記憶體會被自動回收 
 -- 注意如上的 y=x; 是複製"參考"而已, 若你是要複製出另一份object,
   必須用clone() 這method, 例如:
      y = x.clone();
   這樣會複製出另一個"張三", 則y和x各參考到不同的object(不同的"張三")。

* 再注意對"參考"所做的比較也只是比較"參考"本身, 不是比較其參考到的object
 所以如果x, y 仍如上述的Student, 則
    if(x == y) ...   // 是說如果 x和y 參考到同一個 object ...
 -- 若是要比較其object 的內容是否相同, 須用equals() 這method, 例如:
    if(x.equals(y)) ... // object 之內容相同

* 八大原始型態(Primitive type) 都有對應的class, 如下:
       boolean  ==>   Boolean          byte     ==>   Byte
       char     ==>   Character        short    ==>   Short
       int      ==>   Integer          long     ==>   Long
       float    ==>   Float            double   ==>   Double
  (就是除了char對應Character還有int對應Integer外, 其它直接將第一字母大寫。) 
   所以必要時, 你可以將原始型態資料包裝成object (物件, 個體)。

* class, object, reference
 -- object(物件,物體) 是 class(類別) 的一個 Instance (範例, 案例)。
 -- reference(參考)可參考到object, 有點類似指標但不是指標, 不可對它作運算。 
 -- 萬海歸宗: Java 程式所有Class都源自 Object (沒寫extends就是extends Object)
 -- base class 的reference可以參考到它所演生出的class之object
 -- 在super class中除了帶有final的function外, 都為 virtual(用於Polymorphism)

* Class (static) variables vs. Instance variables
 -- class中帶有 static 的變數不附屬於任一object, 所以又稱 class 變數。
 -- 注意寫法跟 C++ 不同:
      C++ 中寫 Student::TOTAL 表示Student這class中的TOTAL這field
      Java 中要寫成 Student.TOTAL  (注意在此 Student 是 class)
 -- 不帶有static的變數使用時一定要配合object, 故稱Instance variables
 -- 常數就是帶有final的變數, 表示不可再被改變的變數; 不是用 const 這保留字。 

* Class (static) methods vs. Instance methods
 -- class中帶有 static 的函數(方法)不附屬於任一object, 所以稱 class method
 -- 注意使用時也是要寫成ClassName.method() 而不是 C++ 的 ClassName::method()

* 數學函數: java.lang.Math 這class提供很多常用的數學函數
 -- 包括abs, min, max, ceil, floor, round, random, sqrt 以及三角函數等。
 -- 還有PI值以及自然對數E兩個double常數(Math.PI 和 Math.E)。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 英國旅遊民宿推薦 的頭像
    英國旅遊民宿推薦

    英國旅遊-英國民宿, 倫敦遊記, 英國海外婚紗

    英國旅遊民宿推薦 發表在 痞客邦 留言(0) 人氣()