面向1-類和物件-方法、new的定義和使用

37201發表於2024-07-14

物件導向程式設計OOP

面向

物件導向和麵向過程

物件導向oop-分類的思維方式-本質——以類的方式組織程式碼,以物件的組織(封裝)資料

抽像+封裝+繼承+多型

認識上-先有物件(具體的事物)再有類(對物件的抽象) 程式碼上-先有物件再有類(類是物件的模板)

程序導向-線性步驟分析方式

-描繪一系列事物的共同特徵並將它抽象出來-比如哺乳動物

物件-具體的示例-比如人

使用new關鍵字建立物件-分配記憶體空間

​ 預設初始化

​ 對類中的構造器(必須掌握)進行呼叫

構造器-構造器又叫構造方法,在進行建立物件時必須要呼叫的

  1. 必須和類的名字相同

  2. 必須沒有返回型別,也不能寫void

總結

1、類與物件

類是一個抽象的模板,物件是一個具體的例項

2、方法

定義,呼叫

3、對應的引用

引用型別:基本型別(8)以外

物件是透過引用來操作的:具體的棧,而真實屬性是在堆中

4、屬性:欄位field 成員變數

預設初始化:數字-0,char-u000,boolean-false,引用-null

賦值-修飾符 屬性型別 屬性名 = 屬性值;

5、物件的建立和使用

  1. 必須使用new關鍵字創造物件,且必須有構造器 Person moulixu = new Person();
  2. 物件的屬性 mouixu.name
  3. 物件的方法 moulixu.sleep()

6、類

靜態的屬性 屬性

動態的行為 方法

方法

1、回顧方法定義

//回顧方法定義
package oop;

public class a1 {
    // main方法
    public static void main(String[] args) {

    }
    /* 方法定義
    修飾符 返回值型別 方法名(引數型別和引數名){
           方法體;
           return 返回值;
     }
     注:1、方法名-駝峰原則和見名知意
        2、返回數值應該和定義型別相同
        3、引數可定義多個
        4、return和break
    return代表運算結束返回結果,不再執行下一行程式碼;返回數值應該和定義型別相同
    break跳出switch,結束迴圈
     */
    public String sayHello(){
        return "Hello,World";
    }
    //空方法
    public void hello(){
        return;
    }
    //比大小
    public int max(int a,int b){
        return a>b?a:b;//三元運算子,是就a,不是就b
    }

}

2、回顧方法的呼叫-遞迴

/* 回顧方法的呼叫-遞迴

 */
package oop;

public class a2 {
    public static void main(String[] args) {
        //同態可以呼叫,不同態不可以
        //靜態方法+static
        a3.say();
        //非靜態方法
        //實列化這個類new; 物件型別 物件名 = 物件值;
        a3 a3 = new a3();
        a3.print();

        //實際引數和形式引數的型別要一一對應!
        int add = a2.add(3,5);
        System.out.println(add);

        //值傳遞
        int a=1;
        System.out.println(a);//輸出值唯1
        a2.change(a);
        System.out.println(a);//輸出值也為1

        //引用傳遞:傳遞一個物件,本質還是值傳遞
        Person person = new Person();
        System.out.println(person.name);//null
        a2.cite(person);
        System.out.println(person.name);//牟李旭
    }
    public static int add(int a,int b){
        return a+b;
    }
    //返回值為空
    public static void change(int a){
        a=10;
    }
    public static void cite(Person person){
        //person是一個物件,指向的Person person = new Person();這是一個具體的人,可以改變屬性
        person.name="牟李旭";
    }

}
//一個類裡面可以有多個class 但只能有一個public
//定義了一個Person類,有一個屬性name
class Person{
    String name; //預設值為null
}

/*
//輔助學習方法的呼叫
package oop;

import java.sql.SQLOutput;

public class a3 {
    //靜態方法
    public static void say(){
        System.out.println("靜態方法");
    }
    public void print(){
        System.out.println("非靜態方法");
    }
}
*/

3、類和new的使用

package oop;
//學生類-類是一個抽象的模板,透過new關鍵字創造具體的例項
//以類的方法組織程式碼,以物件的方式封裝程式
public class a4 {
    //類裡面只有屬性和方法
    // 屬性 欄位
    String name;//預設null
    int age;//預設零
    //方法
    public void study(){
        System.out.println(this.name+"學生在學習");//this.就表示當前這個類

    }
}




/* new的使用
package oop;
//一個專案應該只存在一個main方法
public class Application {
    public static void main(String[] args) {
        //類是抽象的,透過new需要例項化
        //類例項化後會返回一個自己的物件!
        //a4物件就是一個a4類的具體例項!-記住以後類的首字母大寫
        a4 xiaoming = new a4();
        a4 wangyi = new a4();
        //a4中的是模板為空的,需要定義才能使用
        System.out.println(xiaoming.name);//輸出為null
        System.out.println(xiaoming.age);//輸出為0
        xiaoming.name ="小明";
        xiaoming.age =18;
        System.out.println(xiaoming.name);//輸出為null
        System.out.println(xiaoming.age);//輸出為0


    }
}

 */

4、構造器的使用

/* 構造器的使用
alt+insert會生成構造器,根據選擇形成 select null生成無參
1、使用new關鍵字,本質是在呼叫構造器
2、用來初始化值
 */
package oop;

public class Application {
    public static void main(String[] args) {
        //使用new例項化了一個物件,即使原函式中什麼都沒有
        People people1 = new People();//一旦定義了有參定義,無參就必須顯示定義,否則使用不了
        People people2 = new People("xiaohei");//就會預設走有參構造器
        System.out.println(people1.name);
        System.out.println(people2.name);
    }
}



/*
//輔助理解構造器使用的理解
package oop;
/*
java自動生成的class檔案
用idea開啟class檔案, 專案結構-Moduls-增加目錄-加入out-點選ok和applay-out中生成class檔案有構造器
結論1、一個類即使什麼也不寫,也會存在一個方法開啟clss可以看到
   2、也可以自己定義構造器
   都必須遵守兩條規則
         (1). 必須和類的名字相同
         (2). 必須沒有返回型別,也不能寫void
    3、this.表示當前這個類,後面跟引數
注意點:定義有參構造以後,如果想使用一個無參構造,特別的定義一個無參構造
 */

public class People {
    String name;
    //例項化初始值
    //顯示的定義構造器
    //無參構造器
    public People(){
        this.name = "xiaobai";
    }

    //有參構造器:一旦定義了有參定義,無參就必須顯示定義
    public People(String name){
        this.name =name;//this.name表示的是類,而後面的name表示的是引數
    }
}
*/

相關文章