一.原理、概念
1.面相對象語言的三個核心本質(zhì):數(shù)據(jù)抽象化(data abstraction)、繼承(inheritance)、多態(tài)(polymorphism也叫動態(tài)綁定dynamic binding)。覆寫(overriding)和重載(overloading),覆寫是子類的方法名、參數(shù)與父類的一樣,覆寫引發(fā)多態(tài);重載是同一類中相同的函數(shù)名,不同的參數(shù)(包括個數(shù)、類型、位置)
2.static,final,abstract說明:
static用來修飾變量(類變量)。方法(類方法),他們是靜態(tài)的、只需加載一次、類公用,類變量定義如用到方法只能是類方法,類方法內(nèi)用到的變量只能是類變量,因為他們被初始化時成員變量和成員方法還沒有初始化。
final用來修飾變量(不能改變)、方法(不能重載)、類(不能繼承)。
abstract用來修飾方法(只能被重載)、類(只能被繼承),抽象類不一定含有抽象發(fā)放;但含有抽象方法的一定為抽象類。
3.在一個文件夾內(nèi)的兩個.java文件如果沒設package,則編譯器會將兩個文件隸屬的文件夾視為default package,因此他們互為friendly。
4.類無構(gòu)造函數(shù)可自動產(chǎn)生一無參構(gòu)造函數(shù)(default constructor);當有任何構(gòu)造函數(shù)時都不會有default constructor。構(gòu)造函數(shù)調(diào)用其他構(gòu)造函數(shù)只能在第一行,故無法調(diào)用兩個構(gòu)造函數(shù)(包括父類和子類其他的構(gòu)造函數(shù))。
5.類的裝載時間:生成一個對象時(裝載整個類);取類變量或類方法時(裝載靜態(tài)部分)。
6.生成對象,實現(xiàn)接口。生成對象包括:聲明、實例化、初始化。
二.語法
1.java's lable:仔細看一下文檔你就會發(fā)現(xiàn),JAVA里的標號只能定義循環(huán)語句。
label1: for (.....) 是合法的。
break label1;
continue label2;
label2: if (...) 是非法的。
2.轉(zhuǎn)義字符 轉(zhuǎn)義字符的意義
\n 換行
\t 橫向跳到下一制表位置
\v 豎向跳格
\b 退格
\r 回車
\f 走紙換頁
\\ 反斜線符"\"
\' 單引號符
\a 鳴鈴
\u****???? 1~4位十六進制數(shù)所代表的unicode字符(java)
\*** 1~3位八進制數(shù)所代表的ASCII字符(c)
\x** 1~2位十六進制數(shù)所代表的ASCII字符(c)
3.三種常用進制表示:0123——八進制 123——十進制 0x123——十六進制。
4.length & length():length使數(shù)組的一個變量;length()是String類的一個方法。
5.throw & throws:throw在方法體內(nèi)引發(fā)異常;throws在方法參數(shù)表后向上級拋出異常。
6.無限循環(huán):for(;;) 和 while(true){} ,得用break離開。
三.類庫
1.java隨機數(shù):首先利用random()獲得一個隨機浮點數(shù),然后乘以你希望得到的整數(shù)的最大值,最后對得到的結(jié)果取整。例如你希望得到的整數(shù)的最大值是1000,那么你就可以這么寫: int rand = (int) (1000 * Math.random());//Math.random()的輸出范圍是[0,1)。
2.數(shù)組的相關(guān)操作
a)array的充填
Java標準程序庫中的Arrays中有fill(),將單一數(shù)值復制到每個位置
b)array的復制
Java標準程序庫中提供System.arraycopy()的static函數(shù)
c)array的比較
Arrays提供重載版的equals(),藉以比較兩個arrays是否相等,能夠處理object和所有基本型別,兩個arrays必須擁有相同個數(shù)的元素,而有所有對應元素必須兩兩相等。
d)array元素的比較
有兩種方法:a)【java編程思想e2 P310】實現(xiàn)java.lang.Comparable接口,Comparable只有一個compareTo()方法,覆寫它:x大返回-1
,相等返回0,x小返回1。b)【java編程思想e2 P311】實現(xiàn)java.util.Comparator接口,此接口有compare()和equals()方法,如無必要無需覆
寫equals()方法。
e)array的排序
利用內(nèi)置的sort函數(shù),可以針對任何primitives array或objects array進行排序。
f)在已排序的array中進行查找
array排序完畢后,可以使用Arrays.binarySearch()快速查找某個元素,在未經(jīng)排序的array上不能使用binarySearch(),否則結(jié)果完全無
法預測,如果array內(nèi)含多個相同元素,查找動作不保證會搜出其中哪一個元素。
3.容器(containers)
java.lang.Object -> java.util.AbstractCollection & AbstractMap
AbstractCollection -> AbstractList & AbstractQueue & AbstractSet
sop(AbstractCollection);//打印[dog, cat, bird]
sop(AbstractMap);//打印{first=dog, second=cat, third=bird}
四.經(jīng)驗
1.Java是面向?qū)ο蟮恼Z言,操作幾乎都是在對象之間進行的,一個類的實例如果是(null)的話則不能調(diào)用這個實例的方法,否則就會出java.lang.NullPointException錯誤。確定它肯定是不為null的。對于String的這種equals或equalsIgnoreCase的操作常常還可以用下面的方法進行安全操作:用一個確定的不為null的String去與未知的String進行比較。
String str = null;
if (“Hello”.equals(str))
{ System.out.println(“str is Hello”); }
2.java中應用浮點數(shù):http://www-128.ibm.com/developerworks/cn/java/j-jtp0114/index.html。建議:想辦法用整數(shù);或者用BigDecimal類。
3.java中+用于字符串連接和算術(shù)運算,char類型在做運算時會先轉(zhuǎn)換成int類型,所以System.out.println('H'+'a');輸出169。
如果你真想把char連接起來,要怎么辦呢?
1。用Stringbuffer。
StringBuffer buf = new StringBuffer();
buf.append(`H`);
buf.append(`a`);
System.out.println(buf);
2。按照對付int的方法來處理,利用String重載+運算符的特性。
System.out.println("" + `H` + `a`);
3。在JDK5.0里,還可以用格式化輸出。
System.out.println("%c%c", `H`,`a`);
System.out.println(""+'a'+'b'+'c');//前面加一個空串就都按字符串處理。