1. 程式人生 > 其它 >baselines演算法庫common/vec_env/dummy_vec_env.py模組分析

baselines演算法庫common/vec_env/dummy_vec_env.py模組分析

類與物件

類 = 方法 + 屬性

類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但是並不能代表某一個具體的事物。

Person類 Car類 這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為。

物件

物件是抽象概念的具體例項

能夠體現出特點,展現出功能的是具體的例項,不是一個抽象的概念。

物件是具體的事物,類是抽象的,是對物件的抽象,類是物件的模板。

建立與初始化物件

使用new關鍵字建立物件

  1. 使用new關鍵字建立物件的時候,會給物件分配預設的值記憶體空間*。

程式碼演示


構造器(構造方法)

  1. 使用new關鍵字建立物件的時候,還會對類中構造器進行呼叫(new一個物件,本質是在呼叫構造器)

構造器也稱為構造方法,是在進行建立物件的時候必須要呼叫的。

構造器(構造方法)有兩個特點:

  • 必須和類的名字相同(大小寫也相同)
  • 必須沒有返回型別,也不能寫void(返回型別為空)

程式碼演示構造器

第一步

建立一個Person類 ,建立一個啟動器類Application類
public class Person{
    //public Person(){} 一建立Person類 ,這個Person()構造方法其實就存在了!只不過沒顯示出來。可以看編譯後的class檔案。
    //Person類中的Person(){}是構造方法
}

/*
    * 看完class檔案後,得出結論:
    * 一個類即使什麼都不寫,也會存在一個方法(構造方法)。
    * 這個構造方法 的名字 跟類的名字一模一樣(大小寫也一樣)
    * 這個構造方法 沒有返回值,也沒有void 
    * 這個預設存在的Person()構造方法是 無參構造(沒有引數)
    * */

---------------------------------------------------------------------------------
public class Person{
    //我們可以人為讓這個預設存在的構造方法顯示出來
    //
    public Person(){
    }
}

public class Application{
    new Person();
    //使用new關鍵字例項化了一個person物件
    Person person = new Person();
    /*
    //Person類現在是空的,但是還可以new出來一個Person()方法 為什麼呢?
    原因:Person()方法在Person類中其實是存在的!只不過沒顯示出來。
    正因為Person()方法是存在的,我們才能通過new關鍵字來例項化類,才能建立物件
    (即Person person = new Person();)
    
    */
}

第二步

public class Person{
    //定義一個name屬性/欄位
	String name;
}
public class Application{
    new Person();
    //使用new關鍵字例項化了一個person物件
    Person person = new Person();
   //此時沒有使用構造器例項化初始值 輸出為null
	System.out.println(person.name);//null
}

第三步

public class Person{
    //定義一個name屬性/欄位
	String name;
    
    //構造方法作用一:例項化初始值
    public Person(){
        this.name = "小明";
    }
}
public class Application{
    new Person();
    //使用new關鍵字例項化了一個person物件
    Person person = new Person();	//debug看出 ,進入構造器,構造器走完 其實才生成物件
   //此時使用構造器例項化初始值 輸出為小明
	System.out.println(person.name);//小明
}

第四步(用有參幹掉無參)

public class Person{
    //定義一個name屬性/欄位
	String name;
    
    //無參構造器
    public Person(){
        //this.name = "小明";
        //定義了有參構造方法之後,要用無參構造的話,無參必須要顯示定義,無參預設空著就行。
    }
    
    //有參構造器 (一旦定義了有參構造,要用無參構造的話,無參構造必須顯示定義)
    public Person(String name){
        this.name = name;
        //this.name中的name代表物件本身的name
        //= 右邊的name 代表引數傳遞下來的name!
    }
}

定義了有參構造之後,在Application類裡若什麼都不傳值,則還是預設null(String型別預設null)。

public class Application {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);//輸出null
    }
}

定義了有參構造之後,若在Application類裡傳遞值,則輸出值

public class Application {
    public static void main(String[] args) {
        Person person = new Person("123456");
        System.out.println(person.name);//輸出123456
    }
}

debug可看出,走Person person = new Person("123456");語句時,會跟隨引數判斷走哪個方法。

(沒傳引數,就走無參方法,傳了引數,就走相應的有參方法(方法過載))

構造器的作用總結

  • 使用new關鍵字,必須要有構造器。new一個物件,本質是在呼叫構造器

  • 有參構造器 (一旦定義了有參構造,無參構造必須顯示定義,一般無參構造方法裡面預設空著就行)

    ​ 若沒有顯示定義無參構造,若用無參構造的話則無效或報錯

構造器(構造方法)作用一:new一個物件,本質是在呼叫構造器

構造器(構造方法)作用二:使用構造器例項化初始值

IDEA生成構造器快捷鍵

生成有參構造器的前提時定義了類變數

Alt + Insert 選擇Constructor 選擇屬性(什麼都不選就生成無參構造器,選擇屬性就生成有參構造器)

或者右鍵 Generate 選擇Constructor 選擇屬性

構造器總結

1.構造器方法名和類名相同

2.沒有返回值

作用:1. new本質在呼叫構造方法

​ 2.初始化物件值

注意點:

  • 類建立後,即使什麼也不寫,也會預設有一個無參構造方法。(沒有這個無參構造器,new是new不出阿來的)

  • 定義有參構造後,如果想使用無參構造,則顯示的定義一個無參構造(不用無參的話,可以不顯示定義無參構造)

IDEA生成構造方法快捷鍵Alt + Insert