以下是創(chuàng)建類的實(shí)例的一般語法:
new <Class Constructor>;
new
運(yùn)算符后面是對構(gòu)造函數(shù)的調(diào)用。
new
運(yùn)算符通過分配堆上的內(nèi)存來創(chuàng)建類的實(shí)例。以下語句創(chuàng)建Dog類的實(shí)例:
new Dog();
Dog()是對Dog類的構(gòu)造函數(shù)的調(diào)用。
當(dāng)我們不向類添加構(gòu)造函數(shù)時(shí),Java編譯器為我們添加一個(gè)。
Java編譯器添加的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)不接受參數(shù)。
類的構(gòu)造函數(shù)的名稱與類名稱相同。
new運(yùn)算符為類的每個(gè)實(shí)例字段分配內(nèi)存。類靜態(tài)變量在創(chuàng)建類的實(shí)例時(shí)不會分配內(nèi)存。
要訪問類的實(shí)例的實(shí)例變量,我們必須有它的引用。
類的名稱在Java中定義了一個(gè)新的引用類型。特定引用類型的變量可以存儲相同引用類型的實(shí)例的引用。
聲明一個(gè)引用變量,它將存儲Dog類的實(shí)例的引用。
Dog anInstance;
Dog是類名,它也是一個(gè)引用類型,并且 anInstance
是該類型的變量。
anInstance是Dog類型的引用變量。anInstance變量可用于存儲Dog類的實(shí)例的引用。
new運(yùn)算符為類的新實(shí)例分配內(nèi)存,并返回對該實(shí)例的引用。
我們需要將由新運(yùn)算符返回的引用存儲在引用變量中。
anInstance = new Dog();
我們可以為任何引用類型的變量分配一個(gè)空值??罩狄馕吨米兞渴侵笡]有對象。
Dog obj = null; // obj is not referring to any object obj = new Dog(); // Now, obj is referring to a valid Dog object
您可以使用一個(gè)空文字與比較運(yùn)算符來檢查是否相等和不等。
if (obj == null) { //obj is null } if (obj != null) { //obj is not null }
Java不會混合引用類型和原始類型。我們不能給一個(gè)原始類型變量賦null。
點(diǎn)符號用于引用實(shí)例變量。
點(diǎn)符號語法的一般形式是
<Reference Variable Name>.<Instance Variable Name>
obj.name引用obj引用變量引用的實(shí)例的名稱實(shí)例變量。
要為名稱實(shí)例變量分配值,請使用
obj.name = "Rectangle";
以下語句將name實(shí)例變量的值分配給String變量aName:
String aName = obj.name;
要引用類變量,請使用類的名稱。
ClassName.ClassVariableName
例如,我們可以使用Dog.count來引用Dog類的計(jì)數(shù)類變量。
向計(jì)數(shù)類變量分配新值
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 = "Java"; obj.gender = "Male"; obj.name = "XML"; String changedName = obj.name; } }
類的所有字段(靜態(tài)以及非靜態(tài))都將初始化為默認(rèn)值。
字段的默認(rèn)值取決于其數(shù)據(jù)類型。
數(shù)字字段(字節(jié),短,char,int,long,float和double)初始化為零。布爾字段初始化為false。引用類型字段初始化為null。
下面的代碼演示了字段的默認(rèn)初始化。
public class Main { byte b; short s; int i; long l; float f; double d; boolean bool; String str; 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); } }
上面的代碼生成以下結(jié)果。
更多建議: