1. 程式人生 > 實用技巧 >17java類與物件&構造器

17java類與物件&構造器

類與物件的關係

  • 類是物件的模板!!!類是對物件的抽象;物件是具體的例項。
  • 類是一種抽象的資料型別,它是對某一類事物整體的描述/或定義,並不能代表某一個具體的事物
    • 動物,手機,Person類,Car類............
  • 物件是抽象概念的具體例項。能夠體現出特點,展現出功能的是具體的例項,不是一個抽象的概念。
    • 張三是人的一個具體例項

建立與初始化物件

  • 使用new關鍵字建立物件
  • 使用new關鍵字建立的時候,出了分配記憶體空間之外,還會給建立好的物件進行過預設初始化,以及對類中構造器的呼叫
  • 類中的構造器也稱為構造方法,是在進行建立的時候必須呼叫的。構造器有以下兩個特點:
    1. 必須和類的名字相同
    2. 必須沒有返回型別,也不能寫void

以前寫程式每個類都寫了main方法,都是為了測試程式方便,但是一名優秀的工程師是不會這樣做的。正確的做法是:一個完整的工程只有一個啟動類(main方法,程式的入口),其他的類用來完成特定的功能。如下:

package oop.OopDemo;

public class Student {//學生類
    //屬性:欄位
    String name;
    int age;
    //方法
    public void say() {
        System.out.println("I'm "+name+" and I'm "+age+" years old.");
        //System.out.println("I'm "+this.name+" and I'm "+this.age+" years old.");
    }
}
package oop.OopDemo;

public class Application {
    public static void main(String[] args) {
        //先例項化,在呼叫來裡面的物件的屬性和方法
        Student student1 = new Student();
        Student student2 = new Student();
        student1.name = "ffd";
        student1.age = 5;
        student2.name = "gfj";
        student2.age = 5;
        student1.say();//呼叫Demo01類裡面的say方法輸出demo01物件
        student1.say();//呼叫Demo01類裡面的say方法輸出demo02物件
        System.out.println(student1.name);
        System.out.println(student2.name);
    }
}

執行結果:

分析:

  • 一般使用Application作為主類(程式 的入口)的類名其餘的根據相應的功能取名即可。
  • 我們先看Student類,定義了一個學生類Student,這是一個學生物件的抽象,裡面包含了學生的共性:name,age 和一個say方法(當然還可以自定義很多其他的屬性和方法)。需要注意的是:(一般的)類只能包含兩個內容:屬性和方法
  • 再看Application類(主類,程式的入口),使用Student類裡面的屬性或者方法需要先把Student類例項化,然後的呼叫方法就和普通的類的物件相同了。
  • 這和上節的引用型別幾乎相同,只是這裡的主類和普通類不在同一個.java檔案中。
  • Question:普通類裡面如果物件的屬性前面用不用this進行引用有什麼區別?

構造器

下面直接用操作構造器的程式碼來進行說明:

//類
package oop.OopDemo;

public class Person {
	//屬性:欄位(自定義)
    String name;
    int age;
	//方法
    public Person() {//這是一個無參構造器,如果過不寫是預設存在的
        this.name = "fada";//這個不是預設存在的
    }

    public Person(String name) {//構造器支援方法的過載
        this.name = name;
    }

    public Person(int age) {
        this.age = age;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
//主類
package oop.OopDemo;

public class Application {
    public static void main(String[] args) {
        Person person = new Person();//使用new關鍵字例項化了一個物件
        System.out.println(person.name);
    }
}

執行結果:

Post Script:

  • Alt+Insert生成構造的快捷鍵
  • 為什麼要使用“this.”?
    因為構造器的引數可能與自定義的屬性(欄位)相同,加上this.表示這是自定義的屬性(欄位)而不是形式引數
  • 構造器:
    1.沒有返回值型別
    2.構造器的名稱和類名相同
  • 作用:
    1.在main方法裡面new的本質就是在呼叫構造方法
    2.初始化物件的值
  • 注意:
    1.無參構造器是預設存在的,即使不寫,class檔案裡面也有
    2.定義了有參構造器之後,如果想使用無參構造器,必須顯式定義(就是寫出來)