摘要:可處理中成員變量和參數(shù)重名的情況??煽醋魇且粋€(gè)變量,它的值是當(dāng)前對象的引用聲明的成員變量為成員變量,它為該類的公用變量,在第一次使用時(shí)被初始化。經(jīng)常出,不用逮壓路面上的小石子異常是提供的用于處理程序中錯(cuò)誤的一種機(jī)制。
Chap 3 Java OO
focus on :
* 對象和類的概念 * 類 (對類) 之間的關(guān)系 * 面向?qū)ο笤O(shè)計(jì)思想 * 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 設(shè)計(jì)思想
為什么用 OO ?
OO 編程 -- 一組對象互相配合通過溝通完成特定功能
匯編是對機(jī)器語言的抽象
面向過程的語言是對匯編的抽象
對象更加符合對于現(xiàn)實(shí)問題的抽象
對象都有對外服務(wù)的接口
通過繼承可以復(fù)用
對象隱藏內(nèi)部服務(wù)的實(shí)現(xiàn)
通過聚合可以復(fù)用
向?qū)ο蟾尤菀资刮覀冞_(dá)到這些年苦苦追求的境界
Reusable, Extensibility
組件 -- 比對象更高層次上的抽象
Web Service
3.2 Class 之間的關(guān)系關(guān)聯(lián)關(guān)系 -- 學(xué)院 - 研究生 - 教授
繼承關(guān)系 -- 運(yùn)動(dòng)員 { 游泳運(yùn)動(dòng)員,球類運(yùn)動(dòng)員, 射擊運(yùn)動(dòng)員 }
聚合關(guān)系 -- 聚集 - 球隊(duì) {隊(duì)長,隊(duì)員} 組合 - 人-{ 頭, 身體, 四肢 }
實(shí)現(xiàn)關(guān)系 -- implements
3.3 Class 和 ObjectJava 中萬事萬物皆 Object (對象)
Object 可看成 靜態(tài)屬性 (成員變量) 和 動(dòng)態(tài)屬性 (method) 的封裝體
Class 是用來創(chuàng)建同一類型的 Object 的 “模板”
成員變量 = 屬性 & method = 函數(shù)
同一類的每個(gè)對象共享該 Class 的method
非static method 是 針對每個(gè)對象進(jìn)行調(diào)用
局部變量分配在 Stack內(nèi)存
成員變量分配在 Heap內(nèi)存
3.4 new & Constructornew -- 引用的概念
Constructor
Constructor in class extends
如果調(diào)用 super 必須寫在 Constructor-method 的第一行
如果沒調(diào)用,系統(tǒng)自動(dòng)調(diào)用 super(), 如果沒調(diào),parent-class 中又沒寫參數(shù)為空這個(gè) Constructor-method 則出錯(cuò)。
3.5 this keywordthis 可處理 method 中 成員變量 和 參數(shù)重名 的情況。
this 可看作是一個(gè)變量,它的值是當(dāng)前對象的引用
3.6 static keywordstatic 聲明的 成員變量 為 static 成員變量,它為該類的公用變量,在第一次使用時(shí)被初始化。
static 聲明的 method 為 static-method 在調(diào)用該method時(shí), 不會將對象的引用傳遞給它
static-method 中不可訪問 非static成員。
可通過對象引用 or 類名 訪問 static成員, static 成員 屬于 Class, 不屬于對象
3.7 package / importpackage named method : 公司域名倒過來!
class文件的最上層包的父目錄位于classpath下。
執(zhí)行一個(gè) Class 需要寫 all package name
J2SDK 中主要的包介紹
java.lang - 包含一些 java 語言的核心類
java.net
java.io
java.util
把自己的文件打成 jar文件method : jar -cvf test.jar *.*
3.8 Class extends修飾符 | 類內(nèi)部 | same package | 子類 | Anywhere | |
---|---|---|---|---|---|
private | Yes | ||||
default | Yes | Yes | |||
protected | Yes | Yes | Yes | ||
public | Yes | Yes | Yes | Yes |
override-method 不能使用比 被override-method 更嚴(yán)格的訪問權(quán)限 -- 其實(shí)這和polymophysm有關(guān)
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) 當(dāng) x 和 y 是同一對象的應(yīng)用時(shí)返回 true
J2SDk 提供的一些類,如 String, Date等,重寫了 Object 的 equals method.
屬性內(nèi)容相等時(shí) (并不一定是相同對象), 返回 true 否則返回 false.3.11 Object casting
upcasting
downcasting
基類引用 可以指向 子類對象
基類引用 不可訪問 子類對象新增加的成員
可以使用引用 變量 instanceof 類名 來判斷該引用型變量所指向的對象是否屬于該類或該類的子類
子類的對象可以當(dāng)作基類的對象來使用稱作 upcasting,反之 downcasting
3.12 polymophysm / dynamic binding內(nèi)存分析 - 明白了內(nèi)存你就明白了一切!
繼承
重寫
父類引用指向子類對象
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(); } }
知道了內(nèi)存, 就知道了一切
動(dòng)態(tài)綁定, 池綁定, 多態(tài)
1. 動(dòng)態(tài)綁定的機(jī)制 是 實(shí)際類型 new 的是 2. 深一點(diǎn) -- 是對象內(nèi)部有一個(gè)指針。。。。。。 3. 動(dòng)態(tài)綁定的機(jī)制是 : 是調(diào)用實(shí)際類型,不是引用類型。 4. 實(shí)際地址才會綁定到那個(gè) method 上。 method 在 code segment 5. 只有在 runtime,才能判斷調(diào)用哪一個(gè) method 帶來的莫大好處是 ... 可擴(kuò)展性達(dá)到了極致好 OO核心中的核心3.13 abstract Class
abstract關(guān)鍵字來 修飾一個(gè) Class 時(shí),這個(gè)類叫做abstract-class。abstract 修飾 method 時(shí),該 method 叫做 abstract-method
abstract-class 必須被 extends,abstract-method 必須被 override
abstract-class 不能被實(shí)例化
abstract-method 只需聲明,而不需要實(shí)現(xiàn)。
3.14 Final 關(guān)鍵字
final 的變量的值不能夠被改變
final 的成員變量
final 的局部變量(形參)
final method 不能被 override
final Class 不能被 extends
System final Class 如 : String, Math, Boolean etc..
3.15 interface概述
interface 是 abstract-method 和 常量值 的定義的集合
從本質(zhì)上講,接口是一種特殊的 abstract-class,這種 abstract-class只包含 常量 和 method definition,而沒有 var 和 method 的實(shí)現(xiàn)。 只包含 常量 和 method 的定義,而 沒有var 和 method 的實(shí)現(xiàn)。
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 可以多重實(shí)現(xiàn)
interface 中聲明的屬性默認(rèn)為 public static final 的; 也只能是 public static final的;
interface 中只能定義 abstract-method, 而且這些 method 默認(rèn)為public的,也只能是public的。
interface 可以繼承其他的接口,并添加新的 屬性 和 abstract-method。
多個(gè) Class 可 implements 同一 interface
一個(gè) Class 可 implements 多個(gè) interface
與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性
其中的變量全部都是 public static final int id = 1; java.lang - Comparable 我看就像 cmp 一樣!(個(gè)人認(rèn)為) Interface ComparableExample Program可以擴(kuò)展 接口與接口之間也可以相互繼承 類與接口只能 是 實(shí)現(xiàn)關(guān)系
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, 鼻腔內(nèi)感覺異常 2, 體溫持續(xù)升高 3, 分泌乳白色液體 直接說感冒不就得了么? e.printStackTrace(); 非常好!給程序員讀。堆棧信息都打印出來! java.lang.Throwable { 開車在上山走, 1, Error 山爆發(fā) JVM 出問題。 2, Exception { 你可以處理的 -- 剎車壞啦!修好再走。。。 1, ... 2, RuntimeException (經(jīng)常出,不用逮) 壓路面上的小石子 }4.2 Exception Deal
Java異常是Java提供的用于處理程序中錯(cuò)誤的一種機(jī)制。
所謂錯(cuò)誤是指在程序運(yùn)行的過程中發(fā)生的一些異常事件(如:除0溢出,數(shù)組越界,文件不存在等)
設(shè)計(jì)良好的程序應(yīng)該在異常發(fā)生時(shí)提供處理這些錯(cuò)誤的方法,使得程序不會因?yàn)楫惓5陌l(fā)生而阻斷或產(chǎn)生不可預(yù)見的結(jié)果。
Java程序的執(zhí)行過程中如出現(xiàn)異常事件,可以生成一個(gè) Exception-object,該異常類對象封裝了異常事件的信息并將被提交給Java-runtime-system,這個(gè)過程稱為 throw e (會被打印出來,默認(rèn)的處理方式)
Java-runtime-system 接收到異常對象時(shí),會尋找能處理這一異常的代碼并把當(dāng)前異常對象交給其處理,這一過程稱為 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(); } } } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65900.html
摘要:程序運(yùn)行機(jī)制兩種核心機(jī)制垃圾收集機(jī)制虛擬機(jī)可以理解成一個(gè)以字節(jié)碼為機(jī)器指令的虛擬機(jī)機(jī)制屏蔽了底層運(yùn)行平臺的差別實(shí)現(xiàn)了一次編譯隨處運(yùn)行。采用編碼全球語言統(tǒng)一編碼每個(gè)字符占兩個(gè)字節(jié)面向過程約瑟夫環(huán)面向?qū)ο蠹s瑟夫環(huán) Chap 0 Preface Java Basic Content List Java data type、 標(biāo)識符、運(yùn)算符、表達(dá)式和語句、分支、循環(huán)、方法 OO Except...
摘要:我們該選擇哪一款數(shù)據(jù)庫呢事實(shí)上,在比特幣白皮書中并沒有明確指定使用哪一種的數(shù)據(jù)庫,因此這個(gè)由開發(fā)人員自己決定。詳見精通比特幣第二版第章節(jié)交易的輸入與輸出此外,每個(gè)區(qū)塊數(shù)據(jù)都是以單獨(dú)的文件形式存儲在磁盤上。資料源代碼精通比特幣第二版 showImg(https://segmentfault.com/img/remote/1460000013923488?w=1200&h=627); 最...
摘要:我們該選擇哪一款數(shù)據(jù)庫呢事實(shí)上,在比特幣白皮書中并沒有明確指定使用哪一種的數(shù)據(jù)庫,因此這個(gè)由開發(fā)人員自己決定。詳見精通比特幣第二版第章節(jié)交易的輸入與輸出此外,每個(gè)區(qū)塊數(shù)據(jù)都是以單獨(dú)的文件形式存儲在磁盤上。資料源代碼精通比特幣第二版 showImg(https://segmentfault.com/img/remote/1460000013923488?w=1200&h=627); 最...
摘要:一序列化和反序列化的概念把對象轉(zhuǎn)換為字節(jié)序列的過程稱為對象的序列化把字節(jié)序列恢復(fù)為對象的過程稱為對象的反序列化。代表對象輸入流,它的方法從一個(gè)源輸入流中讀取字節(jié)序列,再把它們反序列化為一個(gè)對象,并將其返回。 一、序列化和反序列化的概念 把對象轉(zhuǎn)換為字節(jié)序列的過程稱為對象的序列化;把字節(jié)序列恢復(fù)為對象的過程稱為對象的反序列化。 對象的序列化主要有兩種用途: 1) 把對象的字節(jié)序列永久地保...
摘要:容器的類圖如下圖所示接口定義了存取一組對象的方法其子接口和分別定義了存儲方式。中的數(shù)據(jù)對象沒有順序且不可以重復(fù)。注意相等的對象應(yīng)該具有相等的 Chap 6 常用類 focus on : 字符串相關(guān)類 (String, StringBuffer) 基本數(shù)據(jù)類型包裝類 Math類 File類 枚舉類 6.1 字符串相關(guān)類 String 類 -- java.lang.String 類...
閱讀 943·2023-04-26 02:16
閱讀 1240·2019-08-30 15:55
閱讀 2810·2019-08-30 15:53
閱讀 3412·2019-08-29 15:38
閱讀 2921·2019-08-29 13:42
閱讀 2005·2019-08-26 13:34
閱讀 1868·2019-08-26 10:10
閱讀 3100·2019-08-23 14:40