摘要:可處理中成員變量和參數重名的情況。可看作是一個變量,它的值是當前對象的引用聲明的成員變量為成員變量,它為該類的公用變量,在第一次使用時被初始化。經常出,不用逮壓路面上的小石子異常是提供的用于處理程序中錯誤的一種機制。
Chap 3 Java OO
focus on :
* 對象和類的概念 * 類 (對類) 之間的關系 * 面向對象設計思想 * class * new * 引用的概念 * constructor-method的概念 * method重載 * constructor-method重載 * this * static * package & import * private default protected public * extends * override * final * Object * toString * equals * upcasting downcasting * polymophysm / dynamic binding * abstract class * interface * implements3.1 OO 設計思想
為什么用 OO ?
OO 編程 -- 一組對象互相配合通過溝通完成特定功能
匯編是對機器語言的抽象
面向過程的語言是對匯編的抽象
對象更加符合對于現實問題的抽象
對象都有對外服務的接口
通過繼承可以復用
對象隱藏內部服務的實現
通過聚合可以復用
向對象更加容易使我們達到這些年苦苦追求的境界
Reusable, Extensibility
組件 -- 比對象更高層次上的抽象
Web Service
3.2 Class 之間的關系關聯關系 -- 學院 - 研究生 - 教授
繼承關系 -- 運動員 { 游泳運動員,球類運動員, 射擊運動員 }
聚合關系 -- 聚集 - 球隊 {隊長,隊員} 組合 - 人-{ 頭, 身體, 四肢 }
實現關系 -- implements
3.3 Class 和 ObjectJava 中萬事萬物皆 Object (對象)
Object 可看成 靜態屬性 (成員變量) 和 動態屬性 (method) 的封裝體
Class 是用來創建同一類型的 Object 的 “模板”
成員變量 = 屬性 & method = 函數
同一類的每個對象共享該 Class 的method
非static method 是 針對每個對象進行調用
局部變量分配在 Stack內存
成員變量分配在 Heap內存
3.4 new & Constructornew -- 引用的概念
Constructor
Constructor in class extends
如果調用 super 必須寫在 Constructor-method 的第一行
如果沒調用,系統自動調用 super(), 如果沒調,parent-class 中又沒寫參數為空這個 Constructor-method 則出錯。
3.5 this keywordthis 可處理 method 中 成員變量 和 參數重名 的情況。
this 可看作是一個變量,它的值是當前對象的引用
3.6 static keywordstatic 聲明的 成員變量 為 static 成員變量,它為該類的公用變量,在第一次使用時被初始化。
static 聲明的 method 為 static-method 在調用該method時, 不會將對象的引用傳遞給它
static-method 中不可訪問 非static成員。
可通過對象引用 or 類名 訪問 static成員, static 成員 屬于 Class, 不屬于對象
3.7 package / importpackage named method : 公司域名倒過來!
class文件的最上層包的父目錄位于classpath下。
執行一個 Class 需要寫 all package name
J2SDK 中主要的包介紹
java.lang - 包含一些 java 語言的核心類
java.net
java.io
java.util
把自己的文件打成 jar文件method : jar -cvf test.jar *.*
3.8 Class extends修飾符 | 類內部 | same package | 子類 | Anywhere | |
---|---|---|---|---|---|
private | Yes | ||||
default | Yes | Yes | |||
protected | Yes | Yes | Yes | ||
public | Yes | Yes | Yes | Yes |
override-method 不能使用比 被override-method 更嚴格的訪問權限 -- 其實這和polymophysm有關
3.10 Object ClassObject Class 是所有Java類的根基類
toString() Object 類中定義有 public String toString() method,其返回值是 String 類型。
equals method Object 類中定義有 :
public boolean equals(Object obj) method 提供對象是否 “相等” 的邏輯
Object的 equals method定義為:x.equals(y) 當 x 和 y 是同一對象的應用時返回 true
J2SDk 提供的一些類,如 String, Date等,重寫了 Object 的 equals method.
屬性內容相等時 (并不一定是相同對象), 返回 true 否則返回 false.3.11 Object casting
upcasting
downcasting
基類引用 可以指向 子類對象
基類引用 不可訪問 子類對象新增加的成員
可以使用引用 變量 instanceof 類名 來判斷該引用型變量所指向的對象是否屬于該類或該類的子類
子類的對象可以當作基類的對象來使用稱作 upcasting,反之 downcasting
3.12 polymophysm / dynamic binding內存分析 - 明白了內存你就明白了一切!
繼承
重寫
父類引用指向子類對象
package com.bjsxt.chap03; class Lady { private String name; private Animal pet; Lady(String name, Animal pet) { this.name = name; this.pet = pet; } public void myPetEnjoy() { pet.enjoy(); } } public class TestPolymoph_01 { public static void main(String[] args) { Cat c = new Cat("catName", "blue"); Dog d = new Dog("dogName", "block"); Lady l1 = new Lady("L1", c); Lady l2 = new Lady("L2", d); l1.myPetEnjoy(); l2.myPetEnjoy(); } }
知道了內存, 就知道了一切
動態綁定, 池綁定, 多態
1. 動態綁定的機制 是 實際類型 new 的是 2. 深一點 -- 是對象內部有一個指針。。。。。。 3. 動態綁定的機制是 : 是調用實際類型,不是引用類型。 4. 實際地址才會綁定到那個 method 上。 method 在 code segment 5. 只有在 runtime,才能判斷調用哪一個 method 帶來的莫大好處是 ... 可擴展性達到了極致好 OO核心中的核心3.13 abstract Class
abstract關鍵字來 修飾一個 Class 時,這個類叫做abstract-class。abstract 修飾 method 時,該 method 叫做 abstract-method
abstract-class 必須被 extends,abstract-method 必須被 override
abstract-class 不能被實例化
abstract-method 只需聲明,而不需要實現。
3.14 Final 關鍵字
final 的變量的值不能夠被改變
final 的成員變量
final 的局部變量(形參)
final method 不能被 override
final Class 不能被 extends
System final Class 如 : String, Math, Boolean etc..
3.15 interface概述
interface 是 abstract-method 和 常量值 的定義的集合
從本質上講,接口是一種特殊的 abstract-class,這種 abstract-class只包含 常量 和 method definition,而沒有 var 和 method 的實現。 只包含 常量 和 method 的定義,而 沒有var 和 method 的實現。
public interface Runner { //public static final int id = 1; int id = 1; public void start(); public void run(); void stop(); // public void stop(); }
interface特性
interface 可以多重實現
interface 中聲明的屬性默認為 public static final 的; 也只能是 public static final的;
interface 中只能定義 abstract-method, 而且這些 method 默認為public的,也只能是public的。
interface 可以繼承其他的接口,并添加新的 屬性 和 abstract-method。
多個 Class 可 implements 同一 interface
一個 Class 可 implements 多個 interface
與繼承關系類似,接口與實現類之間存在多態性
其中的變量全部都是 public static final int id = 1; java.lang - Comparable 我看就像 cmp 一樣!(個人認為) Interface ComparableExample Program可以擴展 接口與接口之間也可以相互繼承 類與接口只能 是 實現關系
public interface Valuable { public double getMoney(); } interface Protectable { public void beProtected(); } interface A extends Protectable { void m(); // void getMoney(); } abstract class Animals { private String name; abstract void enjoy(); } class GoldenMonkey extends Animals implements Valuable, Protectable { public double getMoney() { return 10000; } public void beProtected() { System.out.println("live in the room"); } public void enjoy() { } public void test() { Valuable v = new GoldenMonkey(); v.getMoney(); Protectable p = (Protectable)v; p.beProtected(); } } class Hen implements A { public void m() {} public void beProtected() {} public double getMoney() { return 1.0; } // public void getMoney() {} // 不常見,怪異的問題 }Chap 4 異常處理 4.1 寫程序有友好界面
1, 鼻腔內感覺異常 2, 體溫持續升高 3, 分泌乳白色液體 直接說感冒不就得了么? e.printStackTrace(); 非常好!給程序員讀。堆棧信息都打印出來! java.lang.Throwable { 開車在上山走, 1, Error 山爆發 JVM 出問題。 2, Exception { 你可以處理的 -- 剎車壞啦!修好再走。。。 1, ... 2, RuntimeException (經常出,不用逮) 壓路面上的小石子 }4.2 Exception Deal
Java異常是Java提供的用于處理程序中錯誤的一種機制。
所謂錯誤是指在程序運行的過程中發生的一些異常事件(如:除0溢出,數組越界,文件不存在等)
設計良好的程序應該在異常發生時提供處理這些錯誤的方法,使得程序不會因為異常的發生而阻斷或產生不可預見的結果。
Java程序的執行過程中如出現異常事件,可以生成一個 Exception-object,該異常類對象封裝了異常事件的信息并將被提交給Java-runtime-system,這個過程稱為 throw e (會被打印出來,默認的處理方式)
Java-runtime-system 接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交給其處理,這一過程稱為 catch e
4.3 Example Programimport java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import javax.imageio.IIOException; public class TestTx { public static void main(String[] args) { FileInputStream in = null; try { in = new FileInputStream("myfile.txt"); int b; b = in.read(); while (b != -1) { System.out.println((char)b); b = in.read(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { System.out.println(e.getMessage()); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65900.html
摘要:程序運行機制兩種核心機制垃圾收集機制虛擬機可以理解成一個以字節碼為機器指令的虛擬機機制屏蔽了底層運行平臺的差別實現了一次編譯隨處運行。采用編碼全球語言統一編碼每個字符占兩個字節面向過程約瑟夫環面向對象約瑟夫環 Chap 0 Preface Java Basic Content List Java data type、 標識符、運算符、表達式和語句、分支、循環、方法 OO Except...
摘要:我們該選擇哪一款數據庫呢事實上,在比特幣白皮書中并沒有明確指定使用哪一種的數據庫,因此這個由開發人員自己決定。詳見精通比特幣第二版第章節交易的輸入與輸出此外,每個區塊數據都是以單獨的文件形式存儲在磁盤上。資料源代碼精通比特幣第二版 showImg(https://segmentfault.com/img/remote/1460000013923488?w=1200&h=627); 最...
摘要:我們該選擇哪一款數據庫呢事實上,在比特幣白皮書中并沒有明確指定使用哪一種的數據庫,因此這個由開發人員自己決定。詳見精通比特幣第二版第章節交易的輸入與輸出此外,每個區塊數據都是以單獨的文件形式存儲在磁盤上。資料源代碼精通比特幣第二版 showImg(https://segmentfault.com/img/remote/1460000013923488?w=1200&h=627); 最...
摘要:一序列化和反序列化的概念把對象轉換為字節序列的過程稱為對象的序列化把字節序列恢復為對象的過程稱為對象的反序列化。代表對象輸入流,它的方法從一個源輸入流中讀取字節序列,再把它們反序列化為一個對象,并將其返回。 一、序列化和反序列化的概念 把對象轉換為字節序列的過程稱為對象的序列化;把字節序列恢復為對象的過程稱為對象的反序列化。 對象的序列化主要有兩種用途: 1) 把對象的字節序列永久地保...
摘要:容器的類圖如下圖所示接口定義了存取一組對象的方法其子接口和分別定義了存儲方式。中的數據對象沒有順序且不可以重復。注意相等的對象應該具有相等的 Chap 6 常用類 focus on : 字符串相關類 (String, StringBuffer) 基本數據類型包裝類 Math類 File類 枚舉類 6.1 字符串相關類 String 類 -- java.lang.String 類...
閱讀 902·2023-04-26 02:16
閱讀 1210·2019-08-30 15:55
閱讀 2791·2019-08-30 15:53
閱讀 3385·2019-08-29 15:38
閱讀 2892·2019-08-29 13:42
閱讀 1984·2019-08-26 13:34
閱讀 1842·2019-08-26 10:10
閱讀 3080·2019-08-23 14:40