在本教學中,將學習如何將類範例化,讀取類範例的欄位等等。
建立類的範例的一般語法如下:
new <Class Constructor>;
new
運算子後面是對建構函式的呼叫。new
運算子通過分配堆上的記憶體來建立類的範例。以下語句建立Dog
類的範例:
new Dog();
Dog()
是對Dog
類別建構函式的呼叫。當不向類新增建構函式時,Java編譯器會自動新增一個。Java編譯器新增的建構函式稱為預設建構函式。預設建構函式不接受引數。
類別建構函式的名稱與類名稱相同。new
運算子為類的每個範例欄位分配記憶體。在建立類的範例時不會為類靜態變數分配記憶體。
要存取類的範例的範例變數,必須有它的參照。類的名稱在Java中定義了一個新的參照型別。指定參照型別的變數可以儲存相同參照型別的範例的參照。
宣告一個參照變數,它用於儲存Dog
類的範例的參照。
Dog anInstance;
Dog
是類名,它也是一個參照型別,並且anInstance
是該型別的變數。anInstance
是Dog
型別的參照變數。anInstance
變數可用於儲存Dog
類的範例的參照。
new
運算子為類的新範例分配記憶體,並返回對該範例的參照。
需要將由new
運算子返回的參照儲存在參照變數中,如下程式碼所示 -
Dog anInstance = null;
anInstance = new Dog();
可以為任何參照型別的變數分配一個空(null
)值。null
值意味著參照變數是指沒有物件。
Dog obj = null; // obj is not referring to any object
obj = new Dog(); // Now, obj is referring to a valid Dog object
可以使用一個 null
文字與比較運算子來檢查是否相等,如下程式碼所示 -
if (obj == null) {
//obj is null
}
if (obj != null) {
//obj is not null
}
Java不會混合參照型別和原始型別。所以不能給一個原始型別變數賦null
值。
點(.
)符號用於參照範例變數。點符號語法的一般形式是 -
<Reference Variable Name>.<Instance Variable Name>
obj.name
參照obj
參照範例的 name
範例變數。
要為範例變數 name
分配值,請使用參考以下程式碼 -
obj.name = "Rectangle";
以下語句將範例變數- name
的值分配給String
型別變數-aName
:
String aName = obj.name;
要參照類變數,請使用類的名稱。
ClassName.ClassVariableName
例如,使用Dog.count
來參照Dog
類的類變數 - count
。
向類變數 - count
分配新值,如下程式碼 -
Dog.count = 1;
要將類變數- count
的值讀取到變數中,如下程式碼 -
long count = Dog.count;
以下程式碼顯示如何使用類範例欄位和類變數 -
class Dog {
static int count = 0;
String name;
String gender;
}
public class Main {
public static void main(String[] args) {
Dog obj = new Dog();
// Increase count by one
Dog.count++;
// 範例變數賦值
obj.name = "旺財";
obj.gender = "公";
System.out.println("obj.name is :" + obj.name);
obj.name = "XML";
System.out.println("obj.name is :" + obj.name);
String changedName = obj.name;
System.out.println("changedName is :" + changedName);
}
}
執行上面的範例程式碼,得到如下結果 -
obj.name is :旺財
obj.name is :XML
changedName is :XML
類的所有欄位(靜態以及非靜態)都將將初始化為預設值。欄位的預設值取決於其資料型別。
數位欄位(byte
, short
, char
, int
, long
, float
和double
)初始化為0
。 布林欄位初始化為false
。 參照型別欄位初始化為null
。
下面的程式碼演示了欄位的預設初始化值。
public class Main {
byte b;
short s;
int i;
long l;
float f;
double d;
boolean bool;
String str; // 參照型別
// from tw511.com
public static void main(String[] args) {
Main obj = new Main();
System.out.println("byte is initialized to " + obj.l);
System.out.println("short is initialized to " + obj.s);
System.out.println("int is initialized to " + obj.i);
System.out.println("long is initialized to " + obj.l);
System.out.println("float is initialized to " + obj.f);
System.out.println("double is initialized to " + obj.d);
System.out.println("boolean is initialized to " + obj.bool);
System.out.println("String is initialized to " + obj.str);
}
}
上面的程式碼生成以下結果 -
byte is initialized to 0
short is initialized to 0
int is initialized to 0
long is initialized to 0
float is initialized to 0.0
double is initialized to 0.0
boolean is initialized to false
String is initialized to null