面向程序與面向物件:
1.面向程序思想的典型栗子是C語言,C語言實作一個程式的流程是:在主函式中一步一步地羅列代碼(定義子函式來羅列也是一樣的道理),以此來實作我們想要的效果;
2.面向物件思想的典型栗子是Java語言,Java是一種完全面向物件的語言,它實作一個程式的流程是:事先從我們創建的物件中挑選需要的物件,讓他們做出各自的行為,以此來實作我們想要的效果;
3.兩者的區別:面向程序思想的耦合性強,擴展性差,這樣會導致用面向程序寫出來的程式相對于面向物件寫出來的程式適用范圍小很多;但是對于小型專案來說,面向程序的效率可能會更高一些,因為它不需要像面向物件那樣,先進行物件的提取,然后再開始編程,面向程序上來就是干,就是整;
類:
1.模板:
class 類名 { 變數;方法;}
2.概念:
類是我們程式員虛構出來的東西,比如說我們要創建車類,我們會將它的屬性和行為以代碼的方式提煉出來,屬性就相當于變數,行為就相當于方法,把兩者寫到類體里,一個 class 車(車類)就創建好了;
3.使用:
一般我們通過在主方法將類實體化為物件進行使用;
物件:
1.物件創建:
物件是new出來的,eg:Student xiaoMing = new Student( ) ; // 等價于: 參考資料型別 變數名 = new 構造方法( ) ; // ” new Student ( ) “是用學生類創建出來的學生物件 小明;
new 是一個運算子,如上述栗子中 new作用就是:在堆記憶體中為Student( )構造方法中的每個實體變數分配空間,這些所有的實體變數都可以用一個地址來找到,這個地址就被存到了 s1 中,s1 屬于參考資料型別的變數,他的參考資料型別就是Student;
2.類與物件的關系:
類( 實體化 )=物件,物件( 抽象化 )=類 ; 所以說物件其實就是一種特殊的類,它的模板就是類,只不過物件屬于現實生活中實際存在的事物,而類是我們虛構的;
實體變數與參考:
1.實體變數其實就是我們在定義類時,對于現實事物進行屬性提取,將其表達為變數的形式,這種變數就是實體變數;
2.實體變數格式: 在資料型別前沒有 “ static ”修飾的變數都是實體變數;
3.參考好比做 C語言 中的指標變數,它儲存了物件記憶體地址的變數;
如下圖:

a 就是 Address(參考資料)型別的變數,其中儲存了堆記憶體中的那個 Address 型別物件的地址;Address 是一個我們定義好的 Address 類的類名,它的類體中定義了三個 String 型別的變數,此時它被實體化為一個物件;所以此時就可以通過“ a . 屬性( city/steet/zipcode) ”的方式來訪問這三個實體變數中的資料( 北京/ 大興區/ 121221)了;對于圖中的 User(參考資料)型別的變數 u 也是同理,它指向了堆記憶體中的那個 User 物件;
注意:所有實體變數的訪問必須通過” 參考 . “的方式訪問;靜態變數用” 類名 . “的方式訪問,其實也可以用” 參考 . “的方式來訪問,但是其實在運行階段,它還是會被當作” 類名 . “來進行訪問,所以沒必要用” 參考 . ”的方式來訪問靜態變數( 程式員的一個好習慣 );
構造方法:
1.構造方法也屬于方法的一種,方法分為普通方法與構造方法,每個類體中都必須至少有一個構造方法,如果沒有的話,系統會自動提供一個無參的構造方法(預設構造器)(為所有類體中的實體變數賦默認值);
2.構造方法的作用是為類體中的實體變數賦值,方法體中為空也可以,因為系統會在方法體中自動給實體變數賦默認值(在物件創建時),比如 int 型別的實體變數初始默認值就是0,boolean 型別的初始默認值是 false 等等,這也是為什么“實體變數不進行初始化也不會報錯”的原因,因為在呼叫相應的構造方法時,如果實體變數咱們沒有在此構造方法中手動賦值,系統就會賦默認值;
3.格式: public 方法名(有參/無參) { 方法體 }
注意: 訪問權限修飾符必須用 public ;不要用 static 修飾方法 ;回傳值型別不要寫 ;
輔助理解代碼:
public class A {
//源檔案類名
int a;
String b;
public A() {
//a = 0;
//b = null;
// 方法體為空,系統為所有未賦值的實體變數賦默認值
}
public A(int a,String b){
this.a=a;
this.b=b;
//當然書寫一個有參方法,一股腦兒的將所有實體變數賦值也不是必要的,根據程式員自己的需求,利用方法多載來書寫多個構造方法,到時候用哪個呼叫哪個就行,如下代碼:
}
public A(int a){
this.a=a;
//b 被系統賦默認值 null
}
public A(String b){
this.b=b;
//a 被系統賦默認值 0
}
}
上方代碼還涉及到一個新的知識: “ this ” :
1.“ this ”等價于當前物件,比如說在 A 類中,“ this . ”就等價于“ A . ”;
2.在我看來 this 就一個用途:在類中,書寫一個有參構造方法時,我們需要在方法名()的()中書寫形參的資料型別以及變數名,而取名當然“ 見名知意 ”最好,所以干脆就為 形參 取 與之對應的實體變數的變數名,那么方法體中又怎樣區分名字相同的 實體變數 和 形參 呢?如上方代碼 :this . a = 實體變數 a ; a = 形參 a(遵循就近原則)
隨筆:
1.參考資料型別:
1).概念:參考資料型別包括 String 型別 和 我們自己手動創建的參考資料型別;Java中所有的 “ 類 “ 都屬于參考資料型別;
2).參考資料型別的變數中裝的是地址,地址指向堆記憶體中的物件
2.OOA---面向物件分析;OOD---面向物件設計;OOP面向物件編程;
實作一個軟體的程序:分析---設計---編程;
3.靜態變數的賦值在類加載時完成,而實體變數在用構建方法創建物件時完成賦值;
由于博主目前還沒有將 Java-SE 的知識都學完,所以有些地方可能說的有些片面,若前輩們能夠指點一二就更好了 (~ ̄(OO) ̄)ブ
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/350684.html
標籤:Java
