鍍金池/ 教程/ Java/ Java類實例化
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對象
Java類基礎(chǔ)
Java接口繼承
Java類方法
Java訪問級別
Java對象克隆
Java初始化塊
Java可變長度參數(shù)
Java接口字段
Java對象相等比較(Equals)
Java實例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計
Java對象finalize()方法
Java抽象類和方法
Java Object類
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類型的限制
Java main()方法
Java Enum類
Java注解用法
Java枚舉比較
Java注解類型
Java內(nèi)部類成員
Java繼承和構(gòu)造函數(shù)
Java類實例化
Java內(nèi)部類類型
Java對象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類型
Java異常類
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類
Java類成員訪問級別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語句的用法)

Java類實例化

在本教程中,將學(xué)習(xí)如何將類實例化,讀取類實例的字段等等。

創(chuàng)建類的實例的一般語法如下:

new <Class Constructor>;

new運算符后面是對構(gòu)造函數(shù)的調(diào)用。new運算符通過分配堆上的內(nèi)存來創(chuàng)建類的實例。以下語句創(chuàng)建Dog類的實例:

new Dog();

Dog()是對Dog類的構(gòu)造函數(shù)的調(diào)用。當(dāng)不向類添加構(gòu)造函數(shù)時,Java編譯器會自動添加一個。Java編譯器添加的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)不接受參數(shù)。

類的構(gòu)造函數(shù)的名稱與類名稱相同。new運算符為類的每個實例字段分配內(nèi)存。在創(chuàng)建類的實例時不會為類靜態(tài)變量分配內(nèi)存。

要訪問類的實例的實例變量,必須有它的引用。類的名稱在Java中定義了一個新的引用類型。指定引用類型的變量可以存儲相同引用類型的實例的引用。

聲明一個引用變量,它用于存儲Dog類的實例的引用。

Dog anInstance;

Dog是類名,它也是一個引用類型,并且anInstance是該類型的變量。
anInstanceDog類型的引用變量。anInstance變量可用于存儲Dog類的實例的引用。

new運算符為類的新實例分配內(nèi)存,并返回對該實例的引用。

需要將由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);
    }
}

執(zhí)行上面的示例代碼,得到如下結(jié)果 -

obj.name is :旺財
obj.name is :XML
changedName is :XML

字段默認(rèn)初始化

類的所有字段(靜態(tài)以及非靜態(tài))都將將初始化為默認(rèn)值。字段的默認(rèn)值取決于其數(shù)據(jù)類型。

數(shù)字字段(byte, short, char, int, long, floatdouble)初始化為0。 布爾字段初始化為false。 引用類型字段初始化為null

下面的代碼演示了字段的默認(rèn)初始化值。

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);
    }
}

上面的代碼生成以下結(jié)果 -

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