- 修改一個(gè)類的成員(變量或方法),一定要測(cè)試所有引用該成員的其他類(包括WEB頁面)。
- 修改一個(gè)類的成員名稱(變量或方法),一定要先搜索代碼中有沒有使用反射。
- 把一個(gè)頁面設(shè)置為不緩存,一定要測(cè)試所有使用history.back()或history.go(-1)這樣的腳本來返回該頁面的頁面。
- 在代碼中刪除一個(gè)數(shù)據(jù)表字段,一定要測(cè)試所有使用改數(shù)據(jù)庫字段的類,和使用這些類的類及頁面。
- 一定一定要對(duì)頁面進(jìn)行全文檢索,因?yàn)镋clipse等工具的引用檢索無法檢索到通過標(biāo)簽引用的對(duì)象的屬性。
1.類成員變量或類實(shí)例成員變量在該類被載入的時(shí)候被載入。
例:
private ClassA ca = new ClassA();
static ClassB cb = new ClassB();
這里的new是必須的,否則ClassA和ClassB不會(huì)被載入。
2.類成員函數(shù)或類實(shí)例成員函數(shù)在反射方法(未調(diào)用方法前)時(shí),
如果該方法的返回類型不是void,則返回類型被載入。
3.類成員函數(shù)或類實(shí)例成員函數(shù)在反射方法被調(diào)用或直接調(diào)用該方法時(shí),
方法中引用的其他類型被載入。
1.建立數(shù)組
1 int[] i = {1,2,3};
2 String[] s = {"a","b","c"};
上面的語句確實(shí)可以建立數(shù)組??此苳1,2,3}可以
獨(dú)立代表一個(gè)數(shù)組對(duì)象,其實(shí)是不可以的,這和String類型的字面值不同,一個(gè)String類型的字面值就是一個(gè)String類的實(shí)例,而一個(gè)數(shù)組的字面值什么都不是。
2.靜態(tài)方法或變量的覆蓋
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.一個(gè)接口可以繼承多個(gè)接口(使用extends關(guān)鍵字)
4.如果一個(gè)類中定義了final常量,并且在多個(gè)類中被引用,當(dāng)該常量被修改時(shí)(
代碼級(jí)修改),其他引用該常量的類都要被重新編譯,
否則,新值是不會(huì)被代入引用該常量的類中。原因是常量在編譯期被硬編碼到引用它的類中,可以通過反編譯工具來驗(yàn)證。
5.一個(gè)方法的返回類型必須直接寫在方面名稱的前面
6.與類名相同的方法名(非構(gòu)造函數(shù))是被允許的(JDK1.4測(cè)試通過,也許1.4之前的版本不能通過)
1 public class Test {
2 Test() {
3 
4 }
5
6 public void Test() {
7 
8 }
9 }
這兩天在研究Log4j的一些用法,無意中發(fā)現(xiàn)Log4j提供了一個(gè)Log Viewer,名字叫做ChainSaw。
這個(gè)工具在Log4j的jar包中,這個(gè)工具可以分析xml格式的log文件,同時(shí)這個(gè)工具可以監(jiān)聽當(dāng)前
項(xiàng)目發(fā)送過來的log。
用法很簡(jiǎn)單 java -cp ./log4j-1.2.15.jar org.apache.log4j.chainsaw.Main,執(zhí)行該命令后就會(huì)出現(xiàn)
ChainSaw的Swing窗口了。
要想監(jiān)聽當(dāng)前項(xiàng)目發(fā)送過來的Log,需要配置項(xiàng)目里的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
改工具可以設(shè)置多個(gè)過濾條件,如級(jí)別、線程、Logger、消息等。
更多使用方法可以自己摸索一下,很簡(jiǎn)單哦。
今天為了解決一個(gè)項(xiàng)目問題,跟蹤到Log4j的源碼里,發(fā)現(xiàn)我們以前都寫過下面的程序吧:
1
if (
log.isDebugEnabled())
2
log.debug("Erro Message");
其實(shí)再確認(rèn)是否Enabled,因?yàn)閐ebug、info等方法里面有同樣的驗(yàn)證。
所以以后少一段這樣的驗(yàn)證也許會(huì)提高一些性能。
我測(cè)試的Log4j的版本是1.2.9
補(bǔ)充:有些情況下對(duì)于這個(gè)判斷還是很必要的,如log的信息是調(diào)用不同的方法的結(jié)果組合而成的,并且這些方法執(zhí)行起來比較費(fèi)時(shí),這個(gè)時(shí)候就需要先判斷一下。
CSV : Comma Separate Values
CSV 英文文檔 : http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm
CSV即Comma Separate Values,這種文件格式經(jīng)常用來作為不同程序之間的數(shù)據(jù)交互的格式。
具體文件格式 :
- 每條記錄占一行
- 以逗號(hào)為分隔符
- 逗號(hào)前后的空格會(huì)被忽略
- 字段中包含有逗號(hào),該字段必須用雙引號(hào)括起來
- 字段中包含有換行符,該字段必須用雙引號(hào)括起來
- 字段前后包含有空格,該字段必須用雙引號(hào)括起來
- 字段中的雙引號(hào)用兩個(gè)雙引號(hào)表示
- 字段中如果有雙引號(hào),該字段必須用雙引號(hào)括起來
- 第一條記錄,可以是字段名
看了很多Javascript的書籍,發(fā)現(xiàn)對(duì)Select可以使用add方法添加Option選項(xiàng)。
selectObj.add(new Option("Label", "Value"));
但是add方法好像只在IE下好用。現(xiàn)在提供一個(gè)通用的方法:
selectObj.options[selectObj.length] = new Option("Label", "Value");
另外如果想還想使用add方法,可以寫成如下格式:
selectObj.add(new Option("Label", "Value"), null);
請(qǐng)注意,在IE6及IE7下請(qǐng)使用不帶null參數(shù)的add方法,在FF下請(qǐng)使用帶null參數(shù)的方法,IE8下帶不帶都可以。
很奇怪為什么一定要加null,我猜測(cè)add方法里一定使用了'=== null'來判斷第二的參數(shù)或者沒有對(duì)參數(shù)數(shù)組的長(zhǎng)度做驗(yàn)證。
突然心血來潮想試試C++,本來想用Cygwin,但是它要下載的東西太多了,無奈網(wǎng)絡(luò)太慢,所以放棄了。
后來轉(zhuǎn)向MinGW,Eclipse和Netbeans生成的Makefile里都使用了類Unix的內(nèi)部命令,比如cp、mkdir等。
所以在Windows環(huán)境下MinGW還不能直接和IDE集成。解決的辦法很簡(jiǎn)單,下載一個(gè)MSYS,在MinGW網(wǎng)站上有介紹。
MSYS是一個(gè)最小shell環(huán)境,提供對(duì)類Unix最常用內(nèi)部命令的支持,在MSYS環(huán)境里啟動(dòng)Eclipse或Netbeans,
編譯C/C++項(xiàng)目就不會(huì)再出什么錯(cuò)誤了。