java基礎學習筆記——day08(面向對象,構造器,this、static)

java基礎學習筆記——day09

第三章——面向對象

1. 面向對象和麪向過程

這裏用人開車的例子說明:

  • 面向過程: 人開車,人是一個對象,車是一個對象,我們只需要知道,人有開車這個功能,車有被開這個功能,我們不需要知道人是怎樣開車的,車是怎樣組成的或者被開的,只要知道人開車能到目的地就行

  • **面向過程:**人開車,人是怎樣開車的我們要知道怎樣開車的(考駕照,買車,上車,點火,啓動,踩離合,踩油門……),裏面我們每一步都要劃分成詳細的一個一個過程,這就是面向過程

  • 面向過程和麪向對象的區別:

    1. 針對小問題,面向過程是解決辦法。但是面對一些複雜問題時,面向過程顯然力不從心。面向過程是微 觀上解決問題的方式,管得太多了。
    2. 面向對象是解決問題的另外一種方式,針對一些簡單問題有點大材小用,針對複雜問題就變得極其輕 鬆。面向對象是從宏觀上把控事務的整體走向。管的太少了。
    3. 面向對象和麪向過程不是相互獨立的而是相互依存的。通過面向對象去從整體上思考問題的大致方向, 但是後實際解決的過程中還是通過面向過程去執行的。
  • 編碼的過程中而言,存在一個需求,先從宏觀上整體看待需求,再從微觀上去實際編碼解決問題。

2. 對象

2.1 什麼是對象

  • 在java中萬事萬物都是對象(人,電腦,杯子,鼠標)

    • 人能吃飯,跑步;電腦能完遊戲,敲代碼;杯子能裝水;鼠標能幫助我們控制電腦

    • 對象對應了相應的功能,我們不需要知道這些功能是怎樣來的,怎樣實現的我們只需要知道他們有這個功能,並且能拿來用就行了,這就是對象

  • 面向對象大好處和魅力也在於此,就是減低了使用者的使用複雜度,提高了被使用者的安全 度。

2.2 類和對象的關係

  • **類:**類就是將具有相同特徵的許多事物歸爲一種類別

  • **對象:**對象就越是類具體事務的體現

  • 比如,鳥類就是一個類,裏面的對象有啄木鳥(啄木),老鷹(抓小雞),喜鵲(報喜)

在java中的類和對象:

  • 類:class修飾的 一個類可以產生很多個對象。
  • 對象:基於類的一個實例化的表現形式
  1. 類的產生是依賴於對象的,類是將對象中相同特徵或者是行爲抽取出來歸爲一類
  2. 對象的產生是依賴於類的,如果沒有類是無法產生該類的對象的,該類的實例
  3. 類是對於對象的抽像(抽取像的部分),對象是類的具象化的表現形式。

3. 如何編寫類和對象

3.1 編寫類

  • 類是爲了產生對象的,而對象存在的本質是爲了能夠幫助我們去實現一個具體的業務。對象對於使用者 而言,能夠知道的有
    1. 外在的表現形式:姓名、性別、身高、體重、籍貫 : 通過成員變量來實現的
    2. 內在的功能:能力:能夠做什麼:吃飯、睡覺、打豆豆、買菸、開車: 通過方法實現的
    3. 成員變量也好、方法也罷都是非靜態修飾的
public class Person{
    String name;//外在屬性:名字、性別、年齡
    char gender;
    int age;
    public void eat(){ //人能吃飯
        System.out.println("吃飯");
    }
    public void sleep(){//人會睡覺
          System.out.println("睡覺");
    }
}

3.2 編寫對象

  • java中通過new關鍵詞來產生當前類的一個具體的實例、對象。

  • 語法:

    類名  變量名 = new  類名();
public class PersonText{
    public static void main(String[] args){
       Person p = new Person();
        p.eat();
        p.sleep();
        System.out.println(p.name);
    }
}
  • 輸出結果:
吃飯
睡覺
null
  1. 類是一個引用類型,我們定義的所有的類都是一個自定義的數據類型,這些數據類型都是引用類 型。
  2. 凡是引用類型在創建對象時必須通過使用 new 關鍵詞來創建。
  • new關鍵字的作用:
    1. 開闢空間:在堆內存中開闢一個空間
    2. 賦初始值:給類中的成員變量賦初始值
    3. 指向引用:在新創建的變量中存儲一個開闢的堆內存的地址

4. 構造器

4.1 什麼是構造器

  • 構造器就是java中用來產生對象的特殊方法 ,這個特殊方法就是類中的一個構造器

4.2 構造器的聲明

4.2.1 無參的構造器
public class 類名{
    //創建一個無參構造器
    public 類名(){
        構造器中的執行語句;
    }
}
  • 構造器的方法名要和類名一致
  • 構造器方法沒有返回值

注意事項:

  • 在一個類中,如果沒有創建任何一個構造器,呢麼java會自動填充一個空參數的構造器(在代碼中看不見)
4.2.2 帶參數的構造器
public class 類名{
    String name;
    int age;
    //創建一個帶參構造器
    public 類名(String yname){
        name = yname;//構造器中的執行語句;
    }
}

測試:

class Person{
    String name;
    int age;
    //創建一個帶參構造器
    public Person(String yname){
        name = yname;//構造器中的執行語句;
    }
}
public class PersonText{
    public static void main(String[] args){
       Person p1 = new Person("小王");
       Person p2 = new Person("小李");
       Person p3 = new Person("小劉");
        System.out.println(p1.name);
        System.out.println(p2.name);
        System.out.println(p3.name);
    }
}

結果:

小王
小李
小劉
  • 注意
    • 如果一個類中存在帶參構造器,那麼無參構造器如果不顯示編寫,則不存在。如果顯示編寫,則還 有。
    • 構造器也存在重載。

5. this 關鍵字

5.1 什麼是this

  • 代表的是當前對象的。誰在調用誰是當前對象。
  • 大多數情況下this.都是可以省略的
  • 當出現了同名的變量時,this.是不可以省略的。此時this.的作用是用來區分同名變量。

5.2 this的使用

  • this關鍵詞,一共有兩種用法,稱之爲 this.this()
  • this. :當出現了同名的變量時,this.是不可以省略的。此時this.的作用是用來區分同名變量
 class Person{
    String name;
    int age;
    //創建一個無參構造器
    pubilic Person(){
        this.eat();//用this.  調用該類的eat()方法
    }
    //創建一個帶參構造器
    public Person(String name,int age){
        this.name = name;// this. 用來區分同名變量
        this.age=age;
        //如果不適用this. 那麼java就無法區分兩個同名變量				name和age,就會報錯
    }
    public void eat(){
        System.out.println("吃飯了");
    }
}
public class PersonText{
    public static void main(String[] args){
      //調用無參構造器
        Person p1 = new Person(); 
        System.out.println(p1.name);
      //調用有參構造器  
        Person p2 = new Person("小李",18); 
        System.out.println(p2.name);
        System.out.println(p2.age);
    }
}

結果:

吃飯了
null
小李 
18
  • this() :用來實現構造器之間的互相調用。
class Person{
    String name;
    int age;
    //創建一個無參構造器
    pubilic Person(){
        this("小李"18);//通過this() 調用了帶參構造器
    }
    //創建一個帶參構造器
    public Person(String name,int age){
        this.name = name;
        this.age=age;
    }
    public void eat(){
        System.out.println("吃飯了");
    }
}
  • this() 作用
    • 實現了構造器之間的相互調用
    • 其他方法中不能使用this(),只能在構造器中使用
    • 必須保證this()在構造器的第一行

6. static 關鍵字

6.1 含義

  • static的意思是: 靜態的 共享的
  • 通過static修飾的方法、類、就是靜態的方法、類

6.2 static的使用

  • static中使用static修飾的
public class Person{
    static int num=10;
    public static void main(String[] args){
        System.out.println(num); //直接訪問
    }
}
  • static中使用非static修飾的
public class Person{
    int num=10;
    public static void main(String[] args){
        Person p =new Person();
        System.out.println(p.num); 
        //通過創建對象訪問
    }
}
  • 非static中使用static修飾的
public class Person{
    static int num=10;
    public static void main(String[] args){
        Person p =new Person();
        p.method();
    }
    public void method(){
         System.out.println(num); //直接變量名和方法名訪問
    }
}
  • 在其他類中訪問靜態內容可以直接通過類名.方法名/變量名直接訪問
  • 靜態內容在其他類中訪問時可以通過類名直接 . ,也可以通過對象 . (不推薦使用)
public class Test{
    public static void main(String[] args){
        System.out.println(Person.num);
    }
}

6.3 注意事項

  • static修飾的內容是隸屬於類的,類被加載,靜態內容就被加載到內存中了。
  • 非static修飾的內容是隸屬於對象的,對象存在,非static的內容才能被調用。
  • 類信息是先於對象存在的。創建對象時類一定被加載到內存中了,但是如果類被加載到內存中,對 象不一定存在。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章