- 修改一個類的成員(變量或方法),一定要測試所有引用該成員的其他類(包括WEB頁面)。
- 修改一個類的成員名稱(變量或方法),一定要先搜索代碼中有沒有使用反射。
- 把一個頁面設置為不緩存,一定要測試所有使用history.back()或history.go(-1)這樣的腳本來返回該頁面的頁面。
- 在代碼中刪除一個數據表字段,一定要測試所有使用改數據庫字段的類,和使用這些類的類及頁面。
- 一定一定要對頁面進行全文檢索,因為Eclipse等工具的引用檢索無法檢索到通過標簽引用的對象的屬性。
1.類成員變量或類實例成員變量在該類被載入的時候被載入。
例:
private ClassA ca = new ClassA();
static ClassB cb = new ClassB();
這里的new是必須的,否則ClassA和ClassB不會被載入。
2.類成員函數或類實例成員函數在反射方法(未調用方法前)時,
如果該方法的返回類型不是void,則返回類型被載入。
3.類成員函數或類實例成員函數在反射方法被調用或直接調用該方法時,
方法中引用的其他類型被載入。
1.建立數組
1 int[] i = {1,2,3};
2 String[] s = {"a","b","c"};
上面的語句確實可以建立數組。看似{1,2,3}可以
獨立代表一個數組對象,其實是不可以的,這和String類型的字面值不同,一個String類型的字面值就是一個String類的實例,而一個數組的字面值什么都不是。
2.靜態方法或變量的覆蓋
1 public class Main {
2
3 public static int i = 10;
4 /**
5 * @param args the command line arguments
6 */
7 public static void main(String[] args) {
8 System.out.println(TTT.i);
9 System.out.println(Main.i);
10 Main m = new Main();
11 System.out.println(m.i);
12 TTT t = new TTT();
13 System.out.println(t.i);
14 Main m2 = new TTT();
15 System.out.println(m2.i);
16 System.out.println(((TTT)m2).i);
17
18 Main.Test();
19 TTT.Test();
20 m.Test();
21 t.Test();
22 m2.Test();
23 ((TTT)m2).Test();
24 }
25
26 public static void Test() {
27 System.out.println("Hello Test From Main.");
28 }
29
30 }
31
32 class TTT extends Main {
33
34 public static int i = 20;
35
36 public static void Test() {
37 System.out.println("Hello Test From TTT.");
38 }
39 }
3.一個接口可以繼承多個接口(使用extends關鍵字)
4.如果一個類中定義了final常量,并且在多個類中被引用,當該常量被修改時(
代碼級修改),其他引用該常量的類都要被重新編譯,
否則,新值是不會被代入引用該常量的類中。原因是常量在編譯期被硬編碼到引用它的類中,可以通過反編譯工具來驗證。
5.一個方法的返回類型必須直接寫在方面名稱的前面
6.與類名相同的方法名(非構造函數)是被允許的(JDK1.4測試通過,也許1.4之前的版本不能通過)
1 public class Test {
2 Test() {
3 
4 }
5
6 public void Test() {
7 
8 }
9 }
這兩天在研究Log4j的一些用法,無意中發現Log4j提供了一個Log Viewer,名字叫做ChainSaw。
這個工具在Log4j的jar包中,這個工具可以分析xml格式的log文件,同時這個工具可以監聽當前
項目發送過來的log。
用法很簡單 java -cp ./log4j-1.2.15.jar org.apache.log4j.chainsaw.Main,執行該命令后就會出現
ChainSaw的Swing窗口了。
要想監聽當前項目發送過來的Log,需要配置項目里的log4j.properties文件,加入下面一段:
log4j.appender.CHAINSAW_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.CHAINSAW_CLIENT.RemoteHost=localhost
log4j.appender.CHAINSAW_CLIENT.Port=4445
log4j.appender.CHAINSAW_CLIENT.LocationInfo=true
在rootLogger中加入CHAINSAW_CLIENT的appender,如:log4j.rootLogger=INFO,CHAINSAW_CLIENT
改工具可以設置多個過濾條件,如級別、線程、Logger、消息等。
更多使用方法可以自己摸索一下,很簡單哦。
今天為了解決一個項目問題,跟蹤到Log4j的源碼里,發現我們以前都寫過下面的程序吧:
1
if (
log.isDebugEnabled())
2
log.debug("Erro Message");
其實再確認是否Enabled,因為debug、info等方法里面有同樣的驗證。
所以以后少一段這樣的驗證也許會提高一些性能。
我測試的Log4j的版本是1.2.9
補充:有些情況下對于這個判斷還是很必要的,如log的信息是調用不同的方法的結果組合而成的,并且這些方法執行起來比較費時,這個時候就需要先判斷一下。
CSV : Comma Separate Values
CSV 英文文檔 : http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm
CSV即Comma Separate Values,這種文件格式經常用來作為不同程序之間的數據交互的格式。
具體文件格式 :
- 每條記錄占一行
- 以逗號為分隔符
- 逗號前后的空格會被忽略
- 字段中包含有逗號,該字段必須用雙引號括起來
- 字段中包含有換行符,該字段必須用雙引號括起來
- 字段前后包含有空格,該字段必須用雙引號括起來
- 字段中的雙引號用兩個雙引號表示
- 字段中如果有雙引號,該字段必須用雙引號括起來
- 第一條記錄,可以是字段名
看了很多Javascript的書籍,發現對Select可以使用add方法添加Option選項。
selectObj.add(new Option("Label", "Value"));
但是add方法好像只在IE下好用。現在提供一個通用的方法:
selectObj.options[selectObj.length] = new Option("Label", "Value");
另外如果想還想使用add方法,可以寫成如下格式:
selectObj.add(new Option("Label", "Value"), null);
請注意,在IE6及IE7下請使用不帶null參數的add方法,在FF下請使用帶null參數的方法,IE8下帶不帶都可以。
很奇怪為什么一定要加null,我猜測add方法里一定使用了'=== null'來判斷第二的參數或者沒有對參數數組的長度做驗證。
突然心血來潮想試試C++,本來想用Cygwin,但是它要下載的東西太多了,無奈網絡太慢,所以放棄了。
后來轉向MinGW,Eclipse和Netbeans生成的Makefile里都使用了類Unix的內部命令,比如cp、mkdir等。
所以在Windows環境下MinGW還不能直接和IDE集成。解決的辦法很簡單,下載一個MSYS,在MinGW網站上有介紹。
MSYS是一個最小shell環境,提供對類Unix最常用內部命令的支持,在MSYS環境里啟動Eclipse或Netbeans,
編譯C/C++項目就不會再出什么錯誤了。