Java類實例化
在本教程中,將學習如何將類實例化,讀取類實例的字段等等。
創建類的實例的一般語法如下:
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
)值。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 yiibai.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