baselines演算法庫common/vec_env/dummy_vec_env.py模組分析
類與物件
類
類 = 方法 + 屬性
類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但是並不能代表某一個具體的事物。
Person類 Car類 這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為。
物件
物件是抽象概念的具體例項
能夠體現出特點,展現出功能的是具體的例項,不是一個抽象的概念。
物件是具體的事物,類是抽象的,是對物件的抽象,類是物件的模板。
建立與初始化物件
使用new關鍵字建立物件
- 使用new關鍵字建立物件的時候,會給物件分配預設的值和記憶體空間*。
程式碼演示
構造器(構造方法)
- 使用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