java從入門到放棄--[1.5]面向對象

面向對象

面向對象編程思想:將程序模塊化的思想。

  • 什麼是面向對象?

面向對象編程思想誕生之前,程序開發採用的是面向過程的結構化編程方式,是一種面向功能劃分的軟件結構。

最小粒度細化到方法這一層。

面向過程注重的是每一個步驟,面向對象關注點在於整件事情的模塊化結構。

  • 類和對象

類和對象的關係

每個對象都有特定的特徵:1、屬性。2、方法。

屬性指的是對象的靜態特徵,方法用來描述對象的動態特徵。

對象是用來描述客觀存在的一個實體,改實體是由一組屬性和方法構成。

類是與對象緊密結合的另外一個概念,類是產生對象的模版,所有的對象都是通過類來創建的。

二者的關係:類是對象的抽象化描述,這些對象具有相同的特徵和動作(屬性和方法)。

對象是類的具體實例。

Java 程序是以類位組織單元,程序運行時的主體是通過類創建的具體對象。

定義類

public class 類名{
    //定義屬性,屬性名符合駝峯式命名法
    public 數據類型 屬性名;
    //定義方法,方法名符合駝峯式命名法
    public 返回值類型 方法名(參數列表:數據類型 參數名){
        //方法體
    }
}

Java 關於返回值的定義分爲兩類:有返回值和無返回值,有返回值的方法需要在方法定義時指定返回值的數據類型,並在方法體中用 return 將結果返回給外部調用者,加法運算。

如果一個方法不需要進行返回操作,將返回值類型定義爲 void。

參數列表是指外部在調用該方法時需要傳入到方法內部進行運算的數據。

 

構造函數、構造方法、構造器

構造函數是一種特殊的方法,普通方法是用來描述某個動作的,構造方法是用來創建對象的。

  • 方法名必須與類名一致。

  • 不需要定義返回值類型。

構造函數可分爲有參構造和無參構造,有參構造是指帶參數的構造函數,無參構造是指沒有參數的構造函數。

任何一個類都默認自帶一個無參構造函數,如果手動在類中定義一個有參構造,則會覆蓋默認的無參構造。

 

this 關鍵字

this 用來指代當前類的實例化對象,通過 this 可以調用當前類的屬性和方法,比如在有參構造中,通過 this 將外部傳入的值賦給當前類的實例化對象。

this 除了可以在類中訪問屬性也可以在類中調用方法,類中的方法可以分爲兩類:構造方法、普通方法。

用 this 調用這兩類方法的語法也不同,調用構造函數的語法是 this(參數列表),不能在普通方法中使用 this 調用構造函數。

用 this 調用普通方法,this.方法名(參數列表),可以在構造函數中使用,也可以在普通方法中使用。

 

成員變量和局部變量

變量的作用域是指在程序中可以通過變量名來訪問該變量的範圍,變量的作用域由變量被聲明時所在位置決定的,Java 中根據不同的作用域可以將變量分爲成員變量和局部變量。

局部變量:如果一個變量在方法中聲明,則該變量是局部變量。

成員變量:如果一個變量在方法外,類中聲明,則該變量是成員變量。

public class HelloWorld{
    int num2 = 2;
    public int test(){
        int num1 = 1;
    }
}

1、成員變量和局部變量的區別在於作用域不同,成員變量的作用域在整個類中,類中的每個方法都可以訪問該變量,局部變量的作用域只在定義該變量的方法中,出了方法體就無法訪問。

2、成員變量和局部變量的初始值也不同,局部變量不會賦初始值,成員變量會賦初始值,具體的值是由成員變量的數據類型決定的。

 

封裝

封裝是指將類的屬性隱藏在內部,外部不能直接訪問和修改,如何實現?通過修改成員變量的可見性,從公有改爲私有。

​
public class Student {
    private int id;
    private String name;
    private int age;
    public void show() {
        System.out.println("學生信息如下:");
        System.out.println("學生編號:"+id);
        System.out.println("學生姓名:"+name);
        System.out.println("學生年齡:"+age);
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if(age <= 0) {
            System.out.println("輸入的數值有誤!");
            age = 18;
        }
        this.age = age;
    }
}

封裝的核心思想就是儘可能把屬性都隱藏在內部,對外提供方法來訪問,我們可以在這些方法中添加邏輯處理來實現過濾,以屏蔽錯誤數據的賦值。

封裝的步驟:

  • 修改屬性(成員變量)的訪問權限爲私有,使得外部不能直接訪問。

  • 提供外部可以直接調用的方法。

  • 在該方法中加入對於屬性的邏輯控制,避免出現邏輯上的錯誤。

什麼是訪問權限?

訪問權限是指該屬性可以被直接訪問的範圍,是在屬性定義時設定的,訪問權限的可選項一共有 4 種:public、private、默認(不寫)、protected,區別在於作用域範圍不同。

 

static

static 表示靜態或者全局,可以用來修飾成員變量和成員方法以及代碼塊。

使用 static 修飾的成員變量和成員方法獨立於該類的任何一個實例化對象,訪問時不依賴於該類的對象,而是直接通過類去訪問,可以理解爲被該類的所有實例對象所共用,所以說是全局的。

static 還可以修飾代碼塊,被 static 修飾的代碼塊叫做靜態代碼塊。

static {
  System.out.println(1);
}

靜態代碼塊的特點是隻執行一次,什麼時候執行?當這個類被加載到內存時執行,不需要開發者手動調用,會自動執行。

被加載到內存中的類叫做運行時類,靜態代碼塊就是在家中類的時候執行的,因爲類只加載一次,所以靜態代碼塊也只執行一次。

 

發佈了213 篇原創文章 · 獲贊 508 · 訪問量 89萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章