1. 面向對象和麪向過程的區別?
面向過程就是分析出解決問題的步驟,然後用函數一步一步實現,在使用的時候調用即可;
面向對象則是把解決的問題按照一定規則劃分爲多個獨立的對象,然後通過調用對象的方法來解決問題。
面向對象優點:易維護、易複用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護
缺點:性能比面向過程低
2. 類和對象
什麼是類?什麼是對象?
1)現實世界是由很多對象組成的
基於對象抽出了類
2)對象:真實存在的單個的個體
類:類型/類別,一類個體
3)類中可以包含:
3.1)所有對象所共有的特徵/屬性(靜)---變量
3.2)所有對象所共有的行爲(動)------方法
4)一個類可以創建多個對象
同一個類的多個對象,結構相同,數據不同
5)類是對象的模板,對象是類的具體的實例
3. 對象的創建流程?
4.1)javac編譯源代碼,生成若干個字節碼
4.2)java將相關的字節碼文件加載進JVM中的方法區
4.3)JVM在方法區中找main主函數加載進棧內存中運行
4.4)主函數進棧
4.5)創建對象的流程
在堆內存中開闢對象的空間並分配地址
對成員變量進行默認初始化
相應的構造函數進棧 先進行顯示初始化
再執行構造函數的代碼 進行針對性初始化
構造函數出棧 對象創建完畢 將對象的地址賦予在函數中的變量
創建對象內存圖解
4. 私有private關鍵字
- 是一個權限修飾符,用於修飾成員變量和成員方法.
- 私有是針對類,而不是針對對象,也就是說,同一個類的所有的不同的對象之間,可以互相訪問別的對象的的私有的成員.
- 被私有化的成員只在本類中有效.
- 因此對私有的變量進行訪問 可以提供對應的 setXxx或者getXxx的方法
class Person{
private int age; //私有成員變量
private String name;
//對外提供設置成員變量的方法
public void setAge(int a){
//由於是設置成員變量的值,這裏可以加入數據的驗證
if( a < 0 || a > 130 ){
System.out.println(a+"不符合年齡的數據範圍");
return;
}
}
public int getAge(){
return age;
}
}
5. 構造函數
構造函數(構造方法、構造器、構建器)
1)常常用於給成員變量賦初值
2)構造函數名與類同名,沒有返回類型(不寫void),有return。
3)在創建(new)對象時被自動調用(有參傳參)
4)若自己不寫構造函數,則編譯器默認提供無參構造,若自己寫了構造,則不再默認提供
5)構造方法可以重載
構造函數的格式
修飾符 構造函數名(參數列表){ }
class Person{
private int age;
private String name;
//Person的無參構造
Person(){
}
//Person的一個參數構造
Person(int a){
this.age=a;
}
//Person的兩個參數構造
Person(int a,String nm){
this.age=a;
this.name=nm;
}
}
6. 構造函數和成員函數的區別?
構造函數沒有返回值 成員函數可有可沒有
構造函數只有在創建對象時被調用 對象創建完畢後不能被對象調用。成員函數在對象創建之後由對象調用
構造函數可以調用構造函數
構造函數可以調用成員函數 但是這個成員函數一般不會當作對象的特有行爲去看待。
7. this關鍵字
指代當前對象,哪個對象調指的就是哪個對象,方法中訪問成員變量之前默認都有個this
this的用法:
1)this.成員變量名-------訪問成員變量
2)this.方法名()---------------調用方法
3)this()--------------------------調用構造方法,不能相互調用,必須在第一行