好程序員Java教程分享Java面向對象與面向過程,面向對象: 是一種看待問題, 解決問題的思惟方式, 着眼點在於找到一個可以幫助解決問題的實體, 而後委託這個實體來解決問題java
面向過程: 是一種看待問題, 解決問題的思惟方式, 着眼點在於問題是怎樣一步步的解決的, 而後親力親爲的去解決這個問題程序員
Java是一種面向對象的語言:編程
用Java這門語言, 能夠很容易的寫出具備面向對象思惟方式的代碼編程語言
用面向對象的編程語言寫出的代碼, 必定是面向對象的代碼? 錯!ide
大象裝冰箱:this
面向過程:spa
- 打開冰箱門 我
- 把大象裝進去 我
- 關上冰箱門 我
面向對象:設計
- 打開冰箱門 冰箱
- 把大象裝進去 大象
- 關上冰箱門 冰箱
小明要去組裝一臺電腦:code
面向過程:對象
- 補充電腦相關知識 小明
- 去市場買零配件 小明
- 將零配件運回家中 小明
- 組裝 小明
面向對象:
- 找到一個懂電腦的朋友(老王) 小明
- 去市場買零配件 老王
- 將零配件運回家中 快遞
- 組裝 老王
類和對象
對象: 可以幫助解決問題的那個實體
類: 若干個具備相同的特徵和行爲的對象的集合
類和對象的關係: 類是對象的集合, 對象是類的個體
張三, 李四, 王五, 趙六, 人類
哈士奇, 泰迪, 金毛, 阿拉斯加, 拉布拉多, 薩摩耶… 狗類
快遞: 順豐, 各類通, 各類達,
超級英雄(Super Hero): Caption American, Iron man, Spider man, Doctor Strange, Ant
1.6.2 類的設計
類的語法:
class 類名 { // 類體 // 類是若干個具備相同的特徵和行爲的對象的集合 // 在類體中, 定義了這些相同的特徵和行爲 // 特徵: 表現出的是屬性(就是一個全局變量) // 行爲: 表現出的是方法(不要加static) // 屬性, 是有默認值的 // 整型: 0 // 浮點型: 0.0 // 布爾型: false // 字符型: '\0' '\u000' // 引用數據類型: null String name; int age; void eat() {} void sleep() {} void coding() {} }
注意事項:
- 類名是一個標識符, 遵循大駝峯命名法
- 一個java文件中能夠寫多個類, 可是隻有和文件名相同的那個類名能夠修飾爲public
- 在程序編譯的時候, 每個類都會生成一個.class字節碼文件, 並且.class文件的名字和類名相同
注意:
在程序中, 是先有類, 而後再從這個類中實例化一個對象
1.6.3 對象的實例化
1.6.4 對象的內存分析
1.6.5 類中的成員的訪問
static:
用關鍵字static修飾的成員, 叫作靜態成員
沒有用關鍵字static修飾的成員, 叫作非靜態成員
靜態成員:
- 靜態成員是屬於類的, 在訪問的時候, 須要用類來訪問
- 靜態成員開闢空間, 是在這個類第一次被加載到內存中的時候開闢的
非靜態成員:
-
非靜態成員是屬於對象的, 在訪問的時候, 須要用對象來訪問
-
非靜態成員開闢空間, 是在這個對象被實例化的時候開闢的
-
靜態方法中, 不能直接訪問非靜態成員
-
在非靜態的方法中, 能夠直接訪問靜態的成員
class Person { String name; static int a; void eat() {} static void sleep() {} } class Program { public static void main(String[] args) { Person xiaoming = new Person(); // 訪問非靜態成員 xiaoming.name = "xiaoming"; xiaoming.eat(); // 訪問靜態成員 Person.a = 10; Person.sleep(); // 注: // 訪問靜態的成員, 也能夠使用對象來訪問, 可是會有警告 // 推薦使用類來訪問靜態成員 } }
1.6.6 類是一種自定義的類型
1.6.7 this關鍵字
this: 在程序中,表明對當前對象的引用。
當前對象:
this關鍵字是須要用在某一個非靜態方法中。
非靜態方法須要用對象來訪問,哪一個對象調用了這個方法,this就是誰
this關鍵字能夠被省略:
在類中訪問當前的非靜態的成員,能夠省略掉this
可是有一種狀況不能省略:
public class Person { String name; int age; char gender; void setInfo(String name, int age, char gender) { // 就近原則 this.name = name; this.age = age; this.gender = gender; } }