Java編程思想學習心得
-----------------------------------------------------------------------------------
2008-12-4
1.java對象存儲在棧中基本類型存儲在堆棧中
2.作為一個類的成員使用時,java才確保給定其默認值。(局部變量不是適應)
3.javadoc命令只能始于/** ...*/ 為public和protected成員進行文檔注釋,
private和“包內可訪問成員”的注釋會被忽略掉,但是可以用-private標記來輸出。
4.關系操作符==和!=適應所有的對象,但是他們比較對象的引用是不是相同,如果要比較對象的內容
是否相等的話要用equals()方法,如果自己沒有改寫這個方法的話,還是比較對象的引用。
5.for(int i=0,j=0;i<10&&j!=11;i++,j++),只有for循環才具備在控制表達式里定義變量的能力。其他
任何條件或循環語句,都不可以采用這種方法。
------------------------------------------------------------------------------------------------
2008-12-5
1.this:關鍵字的作用。返回本對象的引用,在構造器中調用構造器。
2.將所有的對象放于String表達式之中,就可以輕易的將他們強制轉換為String的表達形式。
3.如果編譯單元完全不帶public類也是可能的,在這種情況下,你可以隨意對文件命名。
4.請注意,類既不可以是private的,也不可以是protected的。所以對于類的訪問權限,你僅有兩個選擇:
包訪問權或者是public。(內部類可以是private或是protected的,這是特例。)
5.Java允許生成空白final,是指被聲明為final但又未給定初值的數據成員。
如:private final int j;//Blank final 你必須在構造方法中對此final進行賦值。
類中所有的private方法讀被隱含是final的。(你可以對private方法增加final修飾符,但這是無意義的。)
6.只有非private方法才可以被重載,但是我們要密切注意重載private方法的現象,雖然編譯不會出錯,但是
不回按我們所期望的來執行。在子類中,對于基類中的private方法,我們最好用一個不同的名字。
------------------------------------------------------------------------------------------------
2008-12-8
內部類的特性:將一個類的定義放到另一個類的定義內部。
1.如果你想從外部類的非靜態方法之外的任意位置創建某個內部類對象你必須象main()方法中的那樣,具體地
指明這個對象的類型:OuterClassName.InnerClassName。
2.可以創建繼承接口的內部匿名類對象。
嵌套類:如果你不需要內部類對象與其外圍類對象之間的聯系,你可以將內部類聲明為static。
普通的內部類對象隱含地保存了一個引用,指向它的外圍類對象。然而,當內部類為static時,情況就不一樣了
嵌套類以為著:
a. 要創建嵌套類對象,并不需要起外圍類的對象。
b.不能從嵌套類的對象中訪問非靜態的外圍類對象。
c.普通內部類的屬性與方法,只能放在類的外部層次上,所以普通的內部類不能有static數據和static屬性,也不 能包含嵌套類。
局部類部類:在代碼塊里創建的內部類,局部內部類不能有訪問說明符,它可以訪問當前代碼塊內的常量,和次外圍類所有的成員。
每個內部類都能獨立地繼承自一個(接口)實現,所以無論外圍類是否已經繼承了某個實現,對于內部類都無影響。
------------------------------------------------------------------------------------------------
2008-12-9
1.重新拋出異常會把異常拋給上一級環境中的異常處理程序。同一個try塊的后續catch字句將被忽略。此外,異常對象的所有信息讀得以保持,高一級環境中捕獲次異常的處理程序可以從這里的異常對象中得到所有信息。
2.異常鏈:捕獲一個異常然后拋出另有個異常,并且希望把原始異常的信息保存下來。
3.一個出現在基類方法中的異常說明中的異常,不一定回出現在派生類方法的異常說明里,這點同繼承的規則不同在繼承中,基類的方法必須出現在派生類里,在繼承和重載過程中,方法的“異常說明的接口”不是變大了而是變小了。
4.當你重寫方法時,你只能拋出在父類方法的異常說明里列出的那些異常。因為這樣的話,對父類能工作的代碼應用到字類對象的時候,一樣能工作(這是面向對象的基本概念),異常也不例外。
------------------------------------------------------------------------------------------------
2008-12-10
復制數組:用System.arraycopy(),比用for循環復制要快很多。
Java提供兩種比較功能:
1.實現java.lang.Comparable接口。
2.實現java.util.comparator接口。
collection:一組獨立的元素。
map:一組成對的鍵值對(key-value)對象
容器的缺點:未知類型。容器只保存object型的引用。
List:保證維護元素特定的順序。
ArrayList:數組實現的list,允許對元素進行快速隨機訪問,但是向list中間插入與移除元素很慢。
LinkedList:雙向鏈表實現,向list中間插入與移除元素很快,隨機訪問則相對較慢。
Set:不保存重復的元素。每個元素都上唯一的,不保證元素的次序。
HashSet:為快速查找設計的set,存入Hashset的對象必須定義了hashCode().
TreeSet:保持次序的Set,底層為數結構。使用它可以從Set中提取有序的序列。
LinkedHashSet:具有HashSet的查詢速度,內部使用鏈表維護元素的順序,在使用迭代器遍歷Set時,
結果會按元素插入的次序顯示。
------------------------------------------------------------------------------------------------
正確的equals()方法必須滿足下列5個條件。
1.自反性:對任意的x,x.equals(x)一定返回true。
2.對稱性:對于任意的x,y,若y.equals(x)為true,則x.equals(y)也為ture。
3.傳遞性:對于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 應返回 true。
4.一致性:對于任何非空引用值 x 和 y,多次調用 x.equals(y) 始終返回 true 或始終返回 false,前提是對象上 equals 比較中所用的信息沒有被修改。
5.對于任何非空引用值 x,x.equals(null) 都應返回 false。
------------------------------------------------------------------------------------------------
2008-12-11
1.匿名內部類既可以實現一個接口,又可以繼承類(具體類或者抽象類)。
2.如果定義一個匿名內部類,它要訪問在它外部定義的一個變量,這個變量必須使用final關鍵字來修飾。
如下面的例子:
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
/**
* @author lin
*
*/
public class DirList {
//not using final in anonymous inner class
public static FilenameFilter filter(final String regex){//注意此處的 final
return new FilenameFilter(){
private Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir, String name) {
return pattern.matcher(
new File(name).getName()).matches();
}
};
}
/**
* @param args
*/
public static void main(String[] args) {
File path = new File(".");
String [] list;
if(args.length==0)
list=path.list();
else
list=path.list(filter(args[0]));
for(int i=0;i<list.length;i++)
System.out.println(list[i]);
}
}