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)。
- Mar 31 Wed 2010 12:50
Java講義7 -- 再喝咖啡, 再靠近一點
close
全站熱搜
留言列表