1. Java語言基礎
1.1. 關鍵概念
概念 |
說明 |
備註 |
類 |
類是描述一類對象行爲和狀態的模板 |
|
實例化 |
使用關鍵字new來創建一個對象 |
|
初始化 |
使用new創建對象時,會調用構造方法初始化對象 |
|
多態 |
一個行爲具有多個不同表現形式或形態的能力。多態就是同一個接口,使用不同的實例而執行不同操作 |
|
抽象類 |
沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類,例如包含抽象方法 |
|
封裝 |
防止該類的代碼和數據被外部類定義的代碼隨機訪問,對外隱藏實現細節,減少耦合 |
|
接口 |
抽象方法的集合,接口通常以interface來聲明,實現接口的類有公有特性或支持類似操作 |
|
包 |
防止命名衝突,訪問控制以及功能模塊劃分 |
|
1.2. 使用要點(注意點)
l Java語言大小敏感;
l Java中可以在標識符中使用$
l Java源代碼文件名和公有類名一致(與JVM類加載機制相關);
l Java類型轉換:自動類型轉換、強制類型轉換、隱含強制類型轉換;
l 靜態變量和實例變量:定義、加載創建時間和內存區、多線程處理;
l 靜態語句用於實例初始化;
l Transient關鍵字用於避免序列化;
l 在判斷一個實例引用的類型時,使用的是實際類型,而不是聲明的類型;
l Float和float、Long和long類型等;
l StringBuilder、StringBuffer和String類型常見使用方式和注意點(字符串操作、比較);
l 常見時間類型轉換和格式化,日期加減、比較以及Calendar類使用;
l 基本集合類型特點和常見函數,以及對應迭代器的使用和遍歷方法;
l
1.3. 基本數據類型
類型 |
大小 |
範圍 |
byte |
8位 |
-128(-2^7)~127(2^7-1) |
short |
16位 |
-32768(-2^15)~32767(2^15 - 1) |
int |
32位 |
-2,147,483,648(-2^31)~2,147,483,647(2^31 - 1) |
long |
64位 |
-2^63~2^63 -1 |
float |
32位 |
-127~+128(有效位數7) |
duble |
64位 |
-1023~+1024(有效位數15-16 |
boolean |
4/1字節 |
true/flse |
char |
16位 |
Unicode字符 |
引用類型 |
對象引用 |
|
1.4. 基本集合類型
|
有序否 |
允許元素重複否 |
|
Collection |
否 |
是 |
|
List |
是 |
是 |
|
Set |
AbstractSet |
否 |
否 |
HashSet |
|||
TreeSet |
是(用二叉樹排序) |
||
Map |
AbstractMap |
否 |
使用key-value來映射和存儲數據,Key必須惟一,value可以重複 |
HashMap |
|||
TreeMap |
是(用二叉樹排序) |
除此之外還有枚舉類型(enum)、數組(Vector)以及SortedSet、SortedMap等;
1.5. 面向對象三大基本特性和五大基本原則
三大特性是:封裝,繼承,多態
封裝:隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別。
繼承:所謂繼承是指可以讓某個類型的對象獲得另一個類型的對象的屬性的方法。它支持按級分類的概念。繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴展。
多態:所謂多態就是指一個類實例的相同方法在不同情形有不同表現形式。多態機制使具有不同內部結構的對象可以共享相同的外部接口。這意味着,雖然針對不同對象的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以調用。
五大基本原則
單一職責原則SRP(Single Responsibility Principle)
類的功能集中不雜亂;
開放封閉原則OCP(Open-ClosePrinciple)
一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的,功能擴展儘量通過添加方法而不是修改已有方法來實現;
替換原則(the Liskov Substitution Principle LSP)
子類應當可以替換父類並出現在父類能夠出現的任何地方,子類應該具有父類所有特性;
依賴原則(the Dependency Inversion Principle DIP)
避免循環依賴,應具體依賴抽象、上層依賴下層
接口分離原則(the Interface Segregation Principle ISP)
模塊間要通過抽象接口隔離開,而不是通過具體的類強耦合起來;
1.6. 正則表達式(java.util.regex)
Pattern類:一個正則表達式的編譯表示
Pattern.matches(pattern,content);
Matcher類:對輸入字符串進行解釋和匹配操作的引擎,提供比Pattern更強大的功能
Patternp=Pattern.compile("\\d+");
Matcherm=p.matcher("22bb23");
while(m.find()) {
count++;
System.out.println("Match number"+count);
System.out.println("start():"+m.start());
System.out.println("end():"+m.end());
}
1.7. 常見I/O類
在java.io包下IO操作類大致按以下分類:
按數據格式分:字節(InputStream/OutputStream)、字符(Writer/Reader);
按數據傳輸方式分:File、Socket(*);
Java的I/O類庫中大量使用適配器和裝飾器的設計模式,這一點有助於應對不同的使用環境也更加有利於我們理解這大量I/O類的使用;
結構層次(層次結構對應使用方式):
2.1. Java環境變量配置和編譯執行
“變量名”:JAVA_HOME
“變量值”:C:\Program Files\Java\jdk1.7.0_07
“變量名”:JRE_HOME
“變量值”:C:\Program Files\Java\jre1.7.0_07
path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%JRE_HOME%\bin;
“變量名”:ClassPath
“變量值”:.;%JAVA_HOME%\bin;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JRE_HOME%\lib;
Javac -d . HelloWorld.java
Java HelloWorld
2.2. Unicode與Ascii字符編碼
Java中常見的編碼有ISO-8859-1、GB-2312、GBK、UTF-16、UTF-8()
getBytes(charset)
獲取特定編碼的字節流
new String(byte[],charset)
按特定編碼解析字節流並轉換成Unicode編碼
除此之外,Charset類,提供encode、decode方法
如果出現編碼錯誤的情況,比如亂碼、一個問號、兩個問號還應該分析可能的原因;