天天看點

一個Java初學者寫的部落格(一)

Java簡介

java 是一個面向對象(Object Oriented,OO)的程式設計語言,和其他大多數的
面向對象程式設計語言一樣,都是單根結構,面向對象的最上級水準:萬物皆對象。

瞎扯1:
(即java 裡所有的東西都有共同的‘祖先’ Object),父和子的說法來源于面向
對象三大特征之一的繼承,說面向對象其實也就是面向 Object 這個‘祖先’,畢
竟java裡所有的東西都是 Object 的後代,這個說法就有點 多态 的意思了,面
向(Object),這個參數 Object 可以是 Object 的任何一個後代,當然我們
自己建立的類也是 Object 的後代。
           

類和對象

類:(歸)類
	成員變量,類的屬性、特征
	成員方法,類的行為、動作
	(構造方法,類變成執行個體時進行的行為/動作)

對象:類具體的例子,類的執行個體
	(構造方法 new 出來的)
           

類與類之間的關系

泛化:
	繼承
	實作(接口)
	
依賴:
	臨時性,很弱
	類 A 作為參數在類 B 中使用

關聯:
	長期性,比依賴強
	類 A 是類 B 的一個屬性

聚合(弱聚合):
	類 A 是類 B 的一個屬性,但是這個屬性可有可無

組合(強聚合):
	類 A 是類 B 的一個屬性,這個屬性必須有,同生命周期
           

面向對象

封裝:

	用 private 修飾 成員變量 ,隐藏類内部細節
	提供 public 修飾的 getter 和 setter 方法,作為外部通路類内 成員
	變量 的入口

	(工廠模式就是最好的應用,往下翻有工廠模式)
		
繼承:(分)類

	将一些類的 共同屬性/行為/特征/動作 抽象出來産生一個父類,便于分類
	(值得注意的是java特别符合現實中的倫理道德,每個類隻允許有一個父親,
	也就是單繼承 extend )
	
多态:前提是繼承,運作時才會發生(一個LOL戰隊一般都有有很多個隊員,真正
	要上場了才知道誰上場誰替補,faker 都替補了:) )

	可以說是有兩種: 1.指派多态     2.傳參多态
	也可以說是就一種:指派多态。    傳參多态了解為 形式參數 被指派。
	
	我是了解隻有一種:指派多态,待指派的(形式參數/對象引用),在運作
		之前被告訴是 XX的孩子 ,但是 XX 有好多個孩子,在運作時才會
		被具體告訴是 XX的哪個孩子 。

抽象類:半成品,有的本領自己還沒掌握,但是寄希望于自己的後代(現實中的
	父親望子成龍)

重寫/重載:

	重寫:修改方法内在,外表不修改(修身養性)
	
	重載:修改方法外表 和 内在,(整容 + 修身養性)

接口:(老師,教 類 本領的,是本領的集合,而且有各種老師)

	類想學什麼本領就繼承 什麼老師 ,不過學的有好有壞,學習後掌握的程度
	也都大不相同,是以每個本領都得具體到自己身上,也就是要重寫那個本領
	(想到說每一次考曆史都是改寫曆史的同學,還有表面上體育課---)。
           

I/O

Input:輸入到java運作環境jvm裡

Output:從java運作環境jvm輸出
	
位元組流和字元流的差別:

	位元組流:直接操作檔案
	字元流:通過緩沖區(記憶體)操作檔案

序列化:将一個對象變成位元組序列 , 繼承接口 Serializable 隻是一個辨別,
	表示可被序列化,(類似你拿了CET-4,就辨別你這個人會一點點英語)
           

集合架構

想仔細了解集合架構,點這裡跳轉到菜鳥教程 Java-集合架構: http://www.runoob.com/java/java-collections.html

那麼多東西誰能記得住,到時候點上面的連結。

ArrayList:動态數組,記憶體空間裡連續,是以查詢快,增删要維護所有的,
	是以增删慢

LinkedList:連結清單,記憶體空間裡不連續,是以查詢慢,因為記憶體空間裡是用 鍊 
	連起來的,增删隻用維護 鍊 就可以了,是以增删快

HashSet:不能重複,不一定是你放進去的順序

TreeSet:不能重複,可以排序

HashMap:key-value		
           

List:一般用來存放資料

Set:做個排序(TreeSet),去個重(HashSet)

Map:做緩存比較好,因為 key-value 。

包裝類

8個包裝類,對應8種基本資料類型,便于進行對象操作。

基本資料類型-包裝類-String 互相轉換:
           
一個Java初學者寫的部落格(一)
緩存值範圍:

	Boolean:    (全部緩存)
	Byte:       (全部緩存)
	Character:  (<= 127 緩存)
	Short:      (-128 — 127 緩存)
	Long:       (-128 — 127緩存)
	Integer:    (-128 — 127緩存)
	Float:      (沒有緩存)
	Doulbe:     (沒有緩存)

緩存值範圍作用:    判斷該不該 new 一個對象。
	見下圖:
           
一個Java初學者寫的部落格(一)

設計模式

工廠模式:隐藏生産細節, 想要什麼找什麼工廠生産

抽象工廠:将工廠抽象出父類,例如水果工廠,有蘋果工廠子類,香蕉工廠子類等。

單例:單例類的對象隻允許存在一個,是以就用 private 修飾構造方法,
	隻允許自己 new 自己。
	
	餓漢:一上來就直接 new 了。
	懶漢:讓一個 public static 的方法(通常是叫 getInstance )來 new,
		先判斷 執行個體對象 是否為 null ,是 null 的話就 new ,
		不是的話就不 new 并傳回 執行個體對象 的引用。 

裝飾者:套殼。(國産浏覽器:))

擴充卡:中間件。将兩個不比對的東西 比對 一下(電源擴充卡。。)
	
	(摘抄自這個部落格https://www.cnblogs.com/V1haoge/p/6479118.html)
	
	1、類擴充卡:
	  原理:通過繼承來實作擴充卡功能。
	  
	  簡單的例子:
		  兩個接口: A , B
		  兩個接口對應的實作類:A_Impl , B_Impl
		  擴充卡:  Adapter 繼承 B_Impl 實作 A 
				或者 Adapter 繼承 A_Impl 實作 B
			測試類:new 一個 Adapter 類的 對象 adapter 就可以連接配接
					接口 A 和 B 。
		  
	2、對象擴充卡:
		原理:通過組合(強聚合)來實作擴充卡功能。

		簡單的例子:
		  兩個接口: A , B
		  兩個接口對應的實作類:A_Impl , B_Impl
		  擴充卡:  Adapter 實作 A ,并包含一個 B_impl 類型的成員變量
				或者 Adapter 實作 B ,并包含一個 A_impl 類型的成員變量
			測試類:new 一個 Adapter 類的 對象 adapter 就可以連接配接
					接口 A 和 B 。
	3、接口擴充卡:
		原理:通過抽象類來實作适配,這種适配稍别于上面所述的适配。

		簡單的例子:
			接口 A 裡面有很多方法 
			抽象的 Adapter 空實作 A 的所有方法 
			實作類 A_Impl 繼承 Adapter ,需要什麼方法就重寫什麼方法