[Java] Learning_Notes for J2SE

Java Learning             --others :  數組模擬鏈表 - 馬士兵教的
--------------------------------
Java 
	主講教師 : 馬士兵
	
課程內容
	* Java 基礎
		* 語法基礎
		* OO
		* Exception
		* Array
		* 基礎類 - 經常使用類
		* I / O Stream
		* Collection / Generic
		* Thread
		* TCP / UDP
		* GUI
		* Meta Data
		* Regular Expression
		
Java 體系
	* JDK初步
		* 其餘方向的基礎
	* Java Web編程
		* 針對Web程序
	* J2EE
		* 企業級應用
	* J2ME
		* 移動設備
	* 移動增值
		* SP運營商
		
教學方法
	* 巨無霸式的教學
		* 理論
		* 舉例
		* 理論回顧
		* 練習
		* 講解
  * 注重結合工程實踐
  * 注重傳授自學能力  
		
能力的三個層次 {
	* 知識
		* 學習前人的知識
	* 解決問題的方法
		* 靈活運用學到的知識
	* 解決問題的思路
		* 創造解決問題的方法
}

學習方法 {
	* 學習本講義
	* 完成習題
	* 運用自學的能力
			* 讀
			* 寫
			* 查
			* 背
}

預備知識 {
	* 英語
	* 計算機基本操做
}

其餘
	* 企業與學校之間的區別
		* 時限
		* 實用爲主
	* 浩瀚知識的分類
		* 實際開發中常用的(緊緊掌握)
		* 不常用用時就能查獲得的(瞭解)
		* 八輩子用不着一回的(運用本身的能力去查)
		
總結
	* 樂觀的努力
	* 眼光要高遠
	* 腳步要踏實

錯誤的作法(教師)
	* 講得多,練得少
	* 只灌輸知識點,沒有串聯
	* 不培養自學能力
	* 給答案不給思路
	* 項目太簡單
	* 項目太複雜
	* 項目太少
	* 注重授課技巧,不注重基本功
	* 重管理技巧,輕開發技巧
	* 知識太陳舊
錯誤的作法 (學生)
* 只看不練
* 只聽不練
* 鑽到細節中拔不出來(初學者)
		* 修正 : 明確目標,心無旁騖
		  學校 : 集中全部精力,教授實用知識
* 對計算機心存敬畏
		* 不敢動(裝卸軟件, 安裝系統)
		* 不敢調試bug

尚學堂 手把手教程
--------------------------------
J2SE 之 JAVA概述
想學習J2ME, JSP / Servlet, J2EE 嗎? * 請打好基礎 - J2SE
* 內容
	* 計算機語言的歷史以及Java語言的歷史地位
	* Java 自身的發展史
	* Java體系
	* Java的特色
	* Java的運行機制
	* Java運行環境的安裝與配置
	* 第一個程序HelloWorld
* 內容
	* JAVA概述
	* JAVA語言基礎
	* 面向對象編程
	* JAVA異常處理機制
	* 數組
	* JAVA經常使用類
	* JAVA容器類
	* JAVA流技術
	* JAVA多線程機制
	* JAVA網絡編程
	* GUI編程
* 計算機語言發展史及Java的歷史地位
	* 第一代語言
		* 打孔機 -- 純機器語言
	* 第二代語言
		* 彙編
	* 第三代語言
		* C, Pascal, Fortran 面向過程的語言
		* C++面向過程/面向對象
		* Java跨平臺的純面向對象的語言
		* .NET跨平臺的語言
		
		計算機語言朝着人類易於理解的方向發展
* Java發展史與java體系
	* 95年, Sun發佈JDK1.0
	* 98年,JDL1.2, 改名爲Java2
	* 後續JDK 1.3, 1.4
	* 目前JDK 1.5, 改名爲Java5.0
	* 咱們使用5.0, 1.6, 1.7
	
	j2se --> {
				1, java web {
						* j2ee  95% 以上
						* 移動增值
					}
				2, j2me
	}
* Java語言的特色
	* 一種面向對象的語言
	* 一種平臺無關的語言, 提供程序運行的解釋環境
	* 一種健壯的語言, 吸取了C/C++語言的優勢, 但去掉了其影響程序健壯性的部
	  分(如: 指針, 內存的申請與釋放等)。

* Java程序運行機制及運行過程
	* Java兩種核心機制:
		* Java 虛擬機 (JVM)
		* 垃圾收集機制(Garbage collection)
 * 核心機制之Java虛擬機 {
	 * java虛擬機能夠理解成一個以字節碼爲機器指令的CPU
	 * 對於不一樣的運行平臺, 有不一樣的虛擬機
	 * Java虛擬機機制屏蔽了底層運行平臺的差異, 實現了"一次編譯, 隨處運行"。
	                                     -- Jvm for Unix
	 *.java -編譯-> *.class -執行-> JVM- -- Jvm for Windos
	                                     -- Jvm for otherPlatform
	   Java  --   解釋性的語言
	   C/C++ --   編譯型的語言
 }
 * 核心機制之垃圾收集 {
 	* 再也不使用的內存空間應回收 - 垃圾回收
 	* 在 C/C++ 等語言中, 由程序員負責回收無用內存
 	* Java語言消除了程序員回收無用內存空間的責任; 它提供一種系統級線程跟蹤存
 	  儲空間的分配狀況。並在JVM的空閒時, 檢查並釋放那些可被釋放的存儲器空間。
 	* 垃圾收集在Java程序運行過程當中自動進行, 程序員沒法精確控制和干預。
 * J2SDK & JRE
      -  Software Development Kit (軟件開發包)
      -  Java Runtime Environment
      開發須要 JDK
      用戶只需 JRE
 * Java開發環境的下載 安裝 配置
 	* 配置 Java開發環境步驟 (WindowsXP)
 	* 下載 並安裝最新版本的J2SDK
 	* 設置 Windows環境變量。
 	* 選擇 合適的文本編輯器或使用集成開發環境
 	-------------------------------
 	* 下載 http://java.sun.com
 	* 安裝
 	* 配置 path & classpath
 			* path : windows系統執行命令時要搜尋的路徑
 			* classpath : java在編譯和運行時要找的class所在的路徑
 	* 驗證                       HelloWorld.java
 		* java  運行 java 程序
 		* javac 編譯 java 程序
 	  
 	. 表明當前路徑
 * Java Application初步
 	* Java源文件以「java」爲擴展名。源文件的基本組成部分是類 (class), 如本例中的 HelloWorld 類
 	* 一個源文件中最多隻能有一個public類. 其它類的個數不限,若是源文件 文件包含一個public類,
 		它必需按該類名命名
  * Java 應用程序的入口是 main() 方法
  * Java語言嚴格區分大小寫
  * Java方法有一條條語句構成, 每一個語句以分號結束
  * Java語言有三種註釋方式: { // 單行註釋, /* 多行註釋 */ 
  	                          /**
  	                          * 用於多行註釋,而且能夠被doc工具解析
  	                          */
   }
 * 總結第一個程序 {
 	* 構建程序本身的環境
 	* 運用copy
 	* 掌握 path 和 classpath
 	* 熟悉常見的錯誤
 	* 熟悉java程序簡單規則
 	* 熟悉java程序的編譯與運行
 }
 * UltraEdit遺留問題
 補充 {
 * 先談學習方法 
 	* 你怎麼去了解一臺發動機?
 	* 你怎麼去了解一座高山? 怎麼去了解你的校園?
 	* 你怎麼去畫一樹寒梅
 	
 	* 先學脈絡,再學細節,這是規律,請務必尊重學習規律。
 	
 	* 養成自動學習的習慣
 	* 學技術 google 谷老師很是好,不姓 百
 	* 建議你的 JDK 裝在不帶空格的目錄裏面!
 	
 	path
 		* 操做系統用 path 的路徑來找執行程序
 		* javac/java 找不到路徑的解決方式
 		* 用戶變量 / 系統變量
 		
 	* FAQ:
 		* 系統裝了多個版本的JDK
 		* ping 找不到路徑
 	* 命令收集 : {
 			cd \
 			notepad
 			echo %path%
 			set path=d:\java\java-app\jdk1.5\bin;%path%
 			java -verbose HelloWorld
 		}
 	* 作任何事情 {
 			聽別人意見的時候, 先作本身的努力
 	* classpath {
 		* javac/java 用來查找類
 		* 「.」 表明當前路徑
 		* jar文件 = 路徑(文件夾) 
 		
 		* FAQ:
 			* 2 projects, 用同一個類的不一樣版本
 			
 * 總結
 	* 抓住脈絡,要事爲先
 	* 主動學習, 培養能力
 		* 動手動手,動手動手
 * Next:
 	* OO 思惟
 	* 要求:
 		* 瞭解面向對象的概念
 			* 類,對象,屬性,方法
 			* 預習第三章
 			* 下載eclipse
 	* 時間:
 		* http://www.bjsxt.com 
 * 常見Java 開發環境
 	* 編輯器
 		* UltraEdit
 		* EditPlus
 	* 集成開發環境 (IDE):
 		* JBuilder (http://www.borland.com)
 		* Eclipse  (http://www.eclipse.org)
 		* Sun One Studio (http://java.sun.com)
 		* WSAD (http://www.ibm.com)
 * 內容
 	* 標識符
 	* 關鍵字
 	* Java 基本數據類型
 	* 運算符
 	* 表達式和語句
 	* 分支
 	* 循環
 	* 方法
 	* 變量的做用域
 	* 遞歸調用
 	
 變量名稱
 
  * 在方法體內 聲明的變量 叫作 局部變量
  * 在方法體外, 類體內聲明的變量叫作 成員變量
  
 * 成員變量 {
 	
 		* 成員變量能夠是Java語言中任何一種數據類型(包括基本類型和引用類型)
 		
 		* 在定義成員變量時能夠對其初始化,若是不對其初始化                                                      
 		
 		* 成員變量的做用範圍爲整個類體
 	}
  
  Java數據類型的劃分 {
  	                                      -- 整數類型 (byte, short, int, long)
  	                          -- 數值型 --   
  	                         |            -- 浮點類型 (float, double)
  	           --基本數據類型 -- 字符型 (char)
  	          |              |
  	          |               -- 布爾型 (boolean)
  	數據類型 --                         
  	          |               -- 類 (class)
  	          |              |
  	           --引用數據類型 -- 接口 (interface)
  	                         |
  	                          -- 數組 (array)
  	                          
    Java 中定義了4類8種基本數據類型
    boolean 類型只容許取值 true / false , 不能夠用 0 或 非0 替代。
    char    java 字符采用 Unicode 編碼 (全球語言統一編碼), 每一個字符佔兩個字節
  }
  J2SE 之 面向對象編程
  * 編程語言的發展
  * 面向過程的設計思想
  * 面向對象的設計思想
  * 對象和類的概念
  * 類之間的關係
  * 對象和引用
  * Java 類的定義
  * 構造函數
  * 對象的建立和使用
  * this 關鍵字
  * static 關鍵字
  * package 和 import 語句
  * 訪問控制
  * 類的繼承
  * 方法的重寫
  * final 關鍵字
  * Object類
  * 對象轉型
  * 多態
  * 抽象類
  * 接口
  ---------
  類 (對象) 之間的關係 {
  	1, 關聯關係  -- 學院 - 研究生 - 教授
  	2, 繼承關係  -- 運動員 { 游泳運動員,球類運動員, 射擊運動員 }
  	3, 聚合關係  -- 彙集 - 球隊{隊長,隊員}  組合 - 人-{ 頭, 身體, 四肢 }
  	4, 實現關係  -- 
  }
  * 對象是Java程序的核心, 在Java中萬事萬物皆 「對象」
  
  * 對象能夠當作是靜態屬性 (成員變量) 和 動態屬性(方法) 的封裝體
  
  * 類是用來建立同一類型的對象的 「模板」, 在一個類中定義了該類對象所應具備的成員變量以及方法
  
  ----------------------------------------------------------
  咱們的語言    ->   成員變量 = 屬性   方法 = 函數
  ----------------------------------------------------------
  爲何用對象?
  	* 面向對象的編程 -- 一組對象互相配合經過溝通完成特定功能
  		* 彙編是對機器語言的抽象
  		* 面向過程的語言是對彙編的抽象
  		* 對象更加符合對於現實問題的抽象
  	* 對象都有對外服務的接口
  		* 經過繼承能夠複用
  	* 對象隱藏內部服務的實現
  		* 經過聚合能夠複用
  	* 面向對象更加容易使咱們達到這些年苦苦追求的境界
  		* Reusable, Extensibility
  	* 組件 -- 比對象更高層次上的抽象 (二進制級別)
  		* EJB, Web Service, CORBA, COM ...
  * 命名規則 {
  	* 類名首字母大寫
  	* 變量名和方法名的首字母小寫
  	* 運用駝峯標識
  }
  * 對象的建立和使用 {
  	* 必須使用 new 關鍵字建立對象
  	* 使用對象引用
  	* 同一類的每一個對象共享該類的方法
  		* 非靜態方法是針對每一個對象進行調用
  	}
  * this 關鍵字 {
  	* 在類的方法定義中使用的 this 關鍵字表明使用該方法的對象的引用
  	* 在必須指出當前使用方法的對象是誰時要使用this
  	* 有時使用this能夠處理方法中成員變量和參數重名的狀況。
  	* this能夠看做是一個變量,它的值是當前對象的引用
  }
  * static 關鍵字 {
  	* 在類中,用static聲明的成員變量爲靜態成員變量,它爲該類的公用變量,在第一次使用時被初始化。
  	* 用 static 聲明的方法爲靜態方法,在調用該方法時,不會將對象的引用傳遞給它,因此在static方法
  		中不可訪問非static成員。
  		* 靜態方法再也不是針對於某個對象調用, 因此不能訪問非靜態成員。
  	* 能夠經過對象引用或類名訪問靜態成員。
  }
  * package / import
  * J2SDK 中主要的包介紹
  	* java.lang - 包含一些 java 語言的核心類
  	* java,awt  - 包含了構成抽象窗口工具集 (abstract window tookit) 的多個類
  	* java.applet-包含applet運行所需的一些類
  	* java.net  - 包含執行與網絡相關的操做的類
  	* java.io   - 包含能提供多種輸入/輸出功能的類
  	* java.util - 包含一些實用工具類.
  * 類的繼承與權限控制
  * 方法的重寫
  * super 關鍵字
  * Object類
  	* Object類是全部Java類的根基類
  * toString方法
  	* Object類中定義有 public String toString() 方法,其返回值是 String 類型, 描述當前對象的有關信息
  * 在進行 String 與其餘類型數據的鏈接操做時 (如:
  	System.out.println("info" + person), 將自動調用該對象類的 tiString() 方法
  * 能夠根據須要在用戶自定義類型中重寫 toString() 方法
  
  * equals 方法
  	* Object 類中定義有:
  		* public boolean equals(Object obj) 方法
  			* 提供對象是否 「相等」 的邏輯
  		* Object的 equals 方法定義爲:x.equals(y) 當 x 和 y 是同一對象的應用
  			時返回 true 不然返回  false
  		* J2SDk 提供的一些類,如 String, Date等,重寫了 Object 的 equals 方法,調用
  			這些類的 equals 方法, x.equals(y), 當 x 和 y 所引用的對象是同一類對象且
  			屬性內容相等時 (並不必定是相同對象), 返回 true 不然返回 false.
  		* 能夠根據須要在用戶自定義類型中重寫 equals 方法。
  			
  * 對象轉型
  * 動態綁定 和 多態
  * 抽象類
  * Final 關鍵字
  * 接口 - 特殊的抽象類 {
  					只包含常量和方法的定義
 * 第六章 經常使用類 {
 		* 字符串相關類 (String, StringBuffer)
 		* 基本數據類型包裝類
 		* Math類
 		* File類
 		* 枚舉類
 		
 		* String 類
 			* java.lang.String 類表明 不可變 的字符序列
 		* StringBuffer 類
 			* java.lang.StringBuffer 表明可變的字符序列
 		* 基本數據類型包裝類
 			* 包裝類(如:Integer, Double)
 			* java.lang.Integer
 		* Math 類
 			java.lang.Math
 		* File 類
 			java.lang.File
 		* 補充 java.lang.Enum
 		
 		總結
 			* String 
 				* 正則表達式
 			* 包裝類
 			* Math, File, 枚舉
 			
 			ile類
 		* 枚舉類
 		
 		* String 類
 			* java.lang.String 類表明 不可變 的字符序列
 		* StringBuffer 類
 			* java.lang.StringBuffer 表明可變的字符序列
 		* 基本數據類型包裝類
 			* 包裝類(如:Integer, Double)
 			* java.lang.Integer
 		* Math 類
 			java.lang.Math
 		* File 類
 			java.lang.File
 		* 補充 java.lang.Enum
 		
 		總結
 			* String 
 				* 正則表達式
 			* 包裝類
 			* Math, File, 枚舉
 	}
 	第七章 容器 {
 		* 容器的概念
 		* 容器API
 		* Collection 接口
 		* Iterator 接口
 		* 加強的 for 循環
 		* Set 接口
 		* List接口 和 Comparable接口
 		* Collections 類
 		* Map 接口
 		* 自動打包 / 解包
 		* 泛型 (JDK1.5新增)
 		-----
 		* J2SDk 所提供的容器位於 java.util 包內。
 		* 容器API的類圖以下圖所示:
 			
 			   <<interface>>
 			    Collection
 			                                      <<interface>>
 <<interface>>      <<interface>>                 ^
      Set                List                     |
       ^                  ^                       |
       |           _______|______                 |
 		 HashSet   LinkedList    ArrayList          HashMap
 		 
 		* Collection 接口 -- 定義了存取一組對象的方法, 其子接口 Set 和 List 分別定
 			義了存儲方式。
 			
 			* Set 中的數據對象沒有順序且不能夠重複。
 			* List中的數據對象有順序且能夠重複
 			
 		* Map 接口定義了存儲 「鍵 (key) -- 值 (value) 映射"對"的方法。
 		
 		Collection 方法舉例
 			* 容器類對象在調用 remove, contains 等方法時須要比較對象是否相等
 				這會涉及到對象類型的 equals 方法和 hashCode 方法,對於自定義的
 				類型,須要要重寫 equals 和 hashCode 方法以實現自定義的對象相等
 				規則。
 				* 注意 : 相等的對象應該具備相等的 hashcodes
 			* ---
 			
第二遍學習java
**************************
*** 第一,二章 配置, 基礎 ***  手中無劍, 心中有劍
	分析設計這個東西 : (1) 有哪些類
			               (2) 類的屬性和方法
			               (3) 類與類之間的關係
	一個源文件只能有一個 public class
*******************************************************************************
	const(C++) = final(JAVA)   變量本質 <-> 一小格
第二章 就、java 數據類型
    java裏全部的數字都是有符號的。
	byte   1           int   4
	short  2           long  8
	java語言的數據類型在任何操做系統所佔用的大小同樣。
	十六進制 0x12 或者 OX12
	java 整數默認爲int, 聲明long類型,後面加 l / L.
	Java 常量 整型常量,字符常量,字符串常量...
 格式 : (1) 要讓別人看得清楚 (2) 要讓別人看得舒服
  浮點類型 : {
    float 4 
	double 8
	十進制 :     3.14    314.0   .314
	科學記數法 : 3.14e2  3.14E2  100E-2
	float 放入 double 中會出錯, int 放入 long 中不會出錯.解釋麻煩。
    float精度7位,double精度15位
  }
  * boolean 類型不能夠轉換爲其餘數據類型
  * 整形,字符型,浮點型的數據在混合運算中相互轉換,轉換時遵循原則 :
        (1) 容量小的類型自動轉換爲容量大的數據類型
		     * byte, short, char -> int -> long -> float -> double
			 * byte, short, char 之間不會互相轉換,它們三者在計算的時候,首先會轉爲int
		(2) 容量大的要轉換爲容量小的,要增強制轉換,但可能形成精度下降和溢出。
		(3) 有多種數據類型的數據混合運算時,系統首先全轉爲容量最大的那個類型,而後再進行計算。
		(4) 實數常量默認爲 double, 整數常量默認爲 int
	能夠將 int 賦值給 short 等變量,可是不要超過範圍。
 (6) 運算符 {
   *1 字符串鏈接符 '+' 也是算術加法。
   *2 "+" 運算符兩側的操做數中只要有一個是字符串(String)類型,系統會自動將另外一個操做數轉換爲字符串再鏈接。
   *3 當進行打印時,不管任何類型,都自動轉爲字符串進行打印 System.out.println(c);
  }
 (7) if / else分支, switch, ...while, for, do {} while
    *1  switch () {
	       case xx :
		      ...default : 
		} 當心case穿透,多個case能夠合併,default能夠省略,java中的switch只能探測int類型。
 第二章總結 : (1)* 標識符 (2)* 關鍵字 (3)* 基本數據類型 (4)* 運算符 (5)* 表達式和語句 
               (6)* 分支 (7)* 循環 (8)* 方法 (9)* 變量的做用域 (10)* 遞歸調用
*******************************************************************************************	
***** —————————————————— ****
****   第五章  -  數組   ****
****  —————————————————— ****  	
  * 四維空間
  int[] a, int a[];
  內存分析 - 知道了內存你就明白了一切!
  原本無一物 : 何處裝數組。
  * 動態初始化
  * 靜態初始化 int a[] = {3, 9, 8}; 內部過程屏蔽掉啦!
  
  ipconfig
  ipconfig -all  這裏 -all 就是命令行參數。
  
  基礎類型通常分配在棧上面!包裝類,用於把基礎類型包裝成對象,則分配在堆上了。
  例如 類 Double, Integer
  
  約瑟夫環 - 面向過程 和 面向對象 寫法
  
  另外一個比較精巧的算法 : 用數組來模擬鏈表
  	算法和邏輯思惟能力不是一朝一夕能完成的。
  排序算法緊跟着的是 - 搜索算法
  
  -------------------------------
  你這裏是經過對象square1調用的方法getsquare()
 	public static void main(String[] args){
		getsquare(); //這裏會出錯
	}
	是的。其實main函數能夠簡單認爲跟本類沒什麼關係,只是調用本類的
	其它靜態方法時不用寫類名而已。因此,要調用其它非靜態方法,都要
	先實例化,就像別的類來調用同樣。 
-------- 我有些懂啦! 但仍是不太懂,我能理解啦! (我的理解)--------

	二維數組 : 能夠當作以數組爲元素的數組
	* 數組的拷貝 {
	}
	大公司剝削人剝削得最厲害!
  明白內存你就明白了一切!。。。
  
  總結 {
  	* 數組內存的佈局
  	* 常見算法
  }
}
***** —————————————————— ****
****   第六章  - 經常使用類  ****
****  —————————————————— ****  	
本章內容 {
	* 字符串相關類 (String, StringBuffer)
	* 基本數據類型包裝類
	* Math類
	* File類
	* 枚舉類
	
	* java.lang.String 類表明不可變的字符序列
	
		String s1 = "helo";
		String s3 = "hello";
		s1 == s3 true
		字符串常量 - data seg 區
		data segment 編譯器有優化
		
		若是是 new s1 == s3 false
		      s1.equals(s3) true
		字符串你能夠當作是一個字符數組!
		
		String 類經常使用方法 {
			* 靜態重載方法 public static String valueOf(...)
			* public String[] spllit(String regex)
		}
		String.valueOf(Object obj);  多態的存在
		toString
		java.lang.StringBuffer 表明可變的字符序列
		
		* 基本數據類型包裝類
			基本數據 : 棧  -> 包裝 --> 堆上面
			* 包裝類 {
				* 寫程序要按部就班方法
			}
		* Math 類 { java.lang.Math 其中方法的參數和返回值類型都爲 double }
		* File 類 { java.io.File 類表明系統文件名 (路徑和文件名) 
				File 類的常見構造方法 :
				* public File(String pathname)   
					以 pathname 爲路徑建立 File 對象, 若是 pathname 是相對路徑,則默認的當前路徑在系統屬性 user.dir 中存儲
				* public File(String parent, String child)
				* File 的靜態屬性 String separator 存儲了當前系統的路徑分隔符。
					原型 : public static final String separator 可是事實上不管在哪 你寫 / 都沒有問題
					
					注意 \ 在 java 裏面是轉義字符
			}
		 * Enum - java.lang.Enum 枚舉類型 {
		 		1, 只可以取特定值中的一個 
		 		2, 使用 enum 關鍵字
		 		3, 是 java.lang.Enum
		 		4, 舉例 : TestEnum.java
		 	}
	總結~~~ API 和 金庸的書差很少!
			
***** —————————————————— ****
****   第七章  -  容 器  ****
****  —————————————————— ****  					
	第七章 容器 {
 		* 容器的概念       -        數組是麼, 固然是!
 		* 容器API
 		* Collection 接口
 		* Iterator 接口
 		* 加強的 for 循環
 		* Set 接口
 		* List接口 和 Comparable接口
 		* Collections 類
 		* Map 接口
 		* 自動打包 / 解包
 		* 泛型 (JDK1.5新增)
 		-----
 		* J2SDk 所提供的容器位於 java.util 包內。
 		* 容器API的類圖以下圖所示:
 		--------------------------------------------------
 		
 		
 		1136 1136 1136   --  一個圖, 一個類, 三個知識點,六個接口
 			
 			   <<interface>>
 			    Collection
 			   /           \                        <<interface>>
 <<interface>>      <<interface>>                 ^
      Set                List                     |
       ^                  ^                       |
       |           _______|______                 |
 		 HashSet   LinkedList    ArrayList          HashMap
 		 
 		 
 		1136  1136  1136  一個圖, 一個類, 三個知識點,六個接口
		
 		* Collection 接口 -- 定義了存取一組對象的方法, 其子接口 Set 和 List 分別定義了存儲方式。	
 			* Set  中的數據對象沒有順序且不能夠重複。
 			* List 中的數據對象有順序且能夠重複
 			
 		* Map 接口定義了存儲 「鍵 (key) -- 值 (value) 映射"對"的方法。
 		
 		Collection 方法舉例
 			* 容器類對象在調用 remove, contains 等方法時須要比較對象是否相等
 				這會涉及到對象類型的 equals 方法和 hashCode 方法,對於自定義的
 				類型,須要要重寫 equals 和 hashCode 方法以實現自定義的對象相等規則。
 				* 注意 : 相等的對象應該具備相等的 hashcodes
 			ArrayList 底層是一個數組
     哈哈: 裝入的是對象,由於對象在堆上,棧裏面的內容隨時可能被清空!
		hashCode 能直接定位到那個對象
		toyreb
		Iterator - 接口最小化原則
		我這大管家在作操做的時候 : 連主人作任何的操做都不讓操做啦!由於 iterater 執行了鎖定,誰也不讓誰看!	
		JDK 1.5 加強的 for 循環	
		Set {
			HashSet, TreeSet 一個以 hash 表實現, 一個以 樹 結構實現
		}
		List {
			Object set(int index, Object element)
			int indexof(Object o);
			int lastIndexof(Object o);
		}
*** 一個類 {
	Collections  -- java.util.Collections 提供了一些靜態方法實現了基於List容器的一些經常使用算法
	例如 {
		void sort(List)
		...
	}
	LinkedList -- 逆序的時候效率較 ArrayList 高!
	對於 特定的 對象怎麼肯定誰大誰小。 {
		對象間能夠比較大小
		經過 接口 只能看見對象的一點】
		Comparable 接口  -- 全部能夠實現排序的類 都實現了 Comparable 接口
	}
	public int compareTo(Object obj)
	
	泛型規定 - 只能傳 「貓」
	
	vector / hashtable 之前遺留下來的。效率特別低
	
	
	Map 接口 {
		Map 接口的實現類有 HashMap 和 TreeMap 等。 {hashmap 用 hash表來實現, TreeMap 用二叉樹來實現-紅黑}
		Map 類中存儲的鍵 - 值對經過鍵來標識,因此鍵值不能重複。{
			不能重複 : 是equals()
									equals() 太慢, 因此咱們用 hashCode() 來比較
								}
		}
	JDK 1.5 以後 {
		能夠自動打包和解包
# - Auto-boxing / unboxing
		* 在合適的時機自動打包 , 解包
			* 自動將基礎類型轉化爲對象
			* 自動將對象轉換爲基礎類型
		* TestMap2.java
		}
	示例練習 {
		TestArgsWords.java
	}
JDK 1.5 泛型
* 原由 :
	* JDK 1.4 之前類型不明確
		* 裝入集合類型都被看成 Object 對待, 從而失去本身的實際類型。
		* 從集合中取出時每每須要轉型, 效率低, 容易產生錯誤。
* 解決辦法 :
	* 在定義集合的時候同時定義集合中對象的類型
	* 示例 : BasicGeneric.java
		* 能夠在定義 Collection 的時候指定
		* 也能夠在循環時用 Iterator 指定
* 好處 :
	* 加強程序的可讀性和穩定性
	何時能夠指定本身的類型 : 你看 API, 他跟你就能夠跟
* 總結 {
	1136
	* 一個圖
	* 一個類
		* Collections
  * 三個知識點
  	* For
  	* Generic
  	* Auto-boxing / unboxing
  * 六個接口 {
  	1, Collection {
  		2, Set, 
  		3, List
  	}
  	4, Map
  	5, Iterator
  	6, Comparable
  }
***** —————————————————— ****
****   第八章   -   流   ****
****  —————————————————— ****  	  
	能幫助你創建文件,不能幫你建目錄
	
	讀到內存區 - 
	
	* 轉換流 {
		中文 windos 編碼 JBK
		當前系統默認的 編碼是 JBK
		IOS8859_1 包含的全部西歐語言 --> 後來才推出 UniCode (國際標準化組織爲了包含全球)
		JBK   JB2312   JB18030  東方人本身的編碼 - 國標碼 - 就是漢字,你能夠認爲
		日文,韓文 都有本身的編碼  - 臺灣有本身的 大五碼
		拉丁1, 2, 3, 4, 5. 6. 7. 8. 9 都贊成啦!包括俄羅斯, 可是中文還不行 ---- > UniCode
		FileOutputStream() 構造方法本身去查
	* System.in {
		System 類   --   in 是 InputStream 類型
		public static final InputStream in   抽象類 類型,  又是父類引用指向子類對象
		InputStreamReader isr = new InputStreamReader(System.in);
		System.in -> 管道直接堆到黑窗口上
		BufferedReader br = new BufferedReader(isr);
		
		wait() 
		運行後 : 等待在那 - 阻塞式的方法 不少 
		readLine() 有點特殊
		實際上是 System.in 比較特殊  -- 標準輸入 - 等待着標準輸入 {
			你不輸入 - 我可不就等着麼,固然這個也叫作同步方法。
			你不輸入,我就不能幹別的
			同步式的
		}
		
	* 數據流 {
		請你把 long 類型的數, 寫到 --> 文件裏面去
		readUTF()
		UTF8 比較省空間
	}
	* 打印流 {
		System.out 
		out - public static final PrintStream
		默認在咱們的黑窗口輸出
		語言表明人的思惟 - 可以促進人的思惟
		log4J 著名的日誌開發包
	}
	
	* Object 流 {
		把整個 Object 所有寫入硬盤被
		在 VC 上叫作系列化
		存盤點。
		挨着排的序列化
		再一點一點讀出來
		
		Serializable 接口  --- 標記性的接口
		transient int k = 15;
		至關於這個 k 是透明的。在序列化的時候不給於考慮,讀的時候讀默認值。
		
		* Serializable 接口
		* Externalizable 接口  extends  Serializable 
	}
}
		
		
	
	
	
		
		
			
相關文章
相關標籤/搜索