自從大一暑假開始到現(xiàn)在,,我學(xué)習(xí)Java差不多快兩年的時間了,其間閱讀
過無數(shù)的博客,,從Java SE 到Java
EE,、從基礎(chǔ)類庫到各類框架、從編程思想到設(shè)計模式,,我能從博客中學(xué)習(xí)到各種書本中沒有的東西,,了解到各種新的技術(shù)。在此我感謝所有博主們辛勤的勞動,,是
你們的無私奉獻,、知識共享的精神才讓我們這些初學(xué)者獲得了極佳的學(xué)習(xí)途徑,解決了我們初學(xué)者學(xué)習(xí)中遇到的大部分類似的問題,。
也正是這個原因,,我一直想自己寫關(guān)于Java的博客,貢獻自己微薄的力量,,但是鑒
于時間和自己的能力,,一直沒有開始。經(jīng)過快兩年的不斷學(xué)習(xí),,還有閱讀了大量的有關(guān)Java的博客文章,,我發(fā)現(xiàn)自己Java水平比起兩年前有了質(zhì)的提高,所
以有了打算寫博客的念頭,,一來記錄下自己學(xué)習(xí)的知識,,二來想讓各位網(wǎng)友評論博客發(fā)現(xiàn)自己的不足,三來幫助像兩年前的我一樣的初學(xué)者,。
這是我的第一篇博客,,我打算從IDE開始,為什么選擇NetBeans而不是Eclipse ,?
我發(fā)現(xiàn)周圍的初學(xué)者相對于Eclipse而言更喜歡NetBeans,,我雖然
NetBeans和 Eclipse都在使用,但自從NetBeans6.0
M9開始,,我更喜歡使用NetBeans,。那么為什么NetBeans讓那么多初學(xué)者愛不釋手呢,原因當(dāng)然是”Netbeans使用很簡單功能很強大” J,。Netbeans沒有Eclipse安裝插件的煩惱,,使用起來沒有 Eclipse那么復(fù)雜,NetBeans也完全是有插件組成的,。
NetBeans的真正威力只有真正體驗才知道,,至于關(guān)于NetBeans啟動慢問題,前幾天6.1Beta出來后,NetBeans性能已經(jīng)有了很大提升,。我的機子內(nèi)存為 2G,,玩Netbeans非常爽。
下面開始我的第一篇Java博客
NetBeans 6.0 提高生產(chǎn)力之Java代碼編輯器
代碼模板
有些代碼或者關(guān)鍵字經(jīng)常使用,,如果每次需要時我們都要一個一個字母輸入,,那么效率是很低下的。Netbeans提供了方便的代碼模板功能,,我們可以添加自己的模板,。當(dāng)然Netbeans默然提供了一些常用的模板,你只要輸入代碼的 縮寫形式 + Tab鍵就可以生成相應(yīng)的代碼
如:
只要輸入 sout + Tab鍵就可以生成System.out.println(“”)了,。
下面給出常用幾個縮寫形式:
Psf -----------public static final
br ------------break
fi -------------final
im ------------implements
ir --------------import
le--------------length
re-------------- return
sout-----------System.out.println ("|");
st --------------static
查看更多的默認代碼模板,,請擇菜單欄的 幫助(help)->快捷鍵列表(keyboard shortcuts Card)
當(dāng)然也可以添加自己的模板,從主菜單中選擇Tools > Options 選擇Editor
可以修改或添加代碼模板,,不止是Java語言哦,。
智能代碼提示、完成
《代碼大全》里第十一章 變量名的力量 里說道變量名的作用非常重要,。為變量命名時最重要的考慮事項是,,該名字要完全,準確地描述出該變量所代表的事物,。
上面的建議非常重要,,好的變量名能讓代碼的意圖更清晰,代碼更可閱讀性,。
這也是為什么Java界里面很多類或者方法的名稱都是這么長的原因,。
這樣閱讀是清晰了,但是不便于輸入,。如果讓你用純文本編寫 SSH(Sructs,, Spring,Hibernate),,不考慮配置文件,,你可能還是不愿意,因為SSH里面由于遵循良好的命名習(xí)慣,,大部分類名和方法名都是非常長的,。
NetBeans 6.0的Java編輯器提供超智能的代碼提示、完成功能,,智能的程度絲毫不遜于IntelliJ IDEA,,更不要說Eclipse了。
下面讓我們通過試驗來看看NetBeans Java代碼編輯器智能到什么程度
提示:代碼提示功能的快捷鍵為:Ctrl + 空格鍵 和 Ctrl+\ (反斜杠) ,,由于Ctrl + 空格鍵和
我們的中文輸入法沖突了,,所以你可以用Ctrl+\,,或者修改為自己喜歡的快捷鍵
l 試驗一 :
我們在Netbeans新建一個 Java 類,,刪除掉IDE給我們生成的代碼然后按下Ctrl+\
IDE識別出我們這時應(yīng)該用到的關(guān)鍵字
l 試驗二:
在一個類內(nèi)部中,,我們按下Ctrl+\
Foo是新建的類,默認繼承Object 對象,,看來IDE能識別出父類的方法clone()~toString
Foo() generate 是產(chǎn)生Foo類的構(gòu)造方法
后面是類內(nèi)部里面可能用到的關(guān)鍵字和java核心包里面的類和各個包
l 試驗三:
在一個方法內(nèi)部,,我們按下Ctrl+\
我們看到,代碼提示里提示有方法的參數(shù)名a,b,c
l 試驗四:
添加Spring 庫
然后在方法里面輸入Appli 再按下Ctrl+\
看到?jīng)]有,,Spring中的類名和 ”Appli”相關(guān)類都顯示出來了
l 試驗五:
在剛才的方法中輸入 ApplicationContext + 空格 + Ctrl+\
呵呵,,IDE幫我們想好了變量名的名稱了,以后再也不用為變量名發(fā)愁了
我們引用相關(guān)變量看看
試驗六:
在一個類的方法中輸入 List list=new + 空格 + Ctrl+\
我暈,,多態(tài)都支持,,呵呵。
代碼生成
如果NetBeans僅僅支持上面的代碼提示功能,,那么NetBeans吸引力也不是很大,,畢竟其它 IDE也提供相應(yīng)的功能,但是別急,,我們慢慢享受IDE提供的免費大餐,。
下面繼續(xù)探索NetBeans的代碼編輯器的其它功能
我們在類面添加兩個成員變量
private String name;
private String no;
然后在類里面按 Alt + Insert鍵(或者右鍵彈出菜單選擇 insert code… )
l 產(chǎn)生構(gòu)造方法,set ,、get方法
一旦成員變量變多,,代碼生成功能極大的方便了我們
l 重寫父類方法
Alt + Insert鍵 選擇 Override Method…
我可以重寫父類的方法
l 代理成員變量的方法
首先為了測試該功能,我們新建一個成員變量
private List list;
按 Alt + Insert鍵 選擇 Delegate Method…
然后如下圖所示
下一步,,產(chǎn)生了List的add()代理方法,,J
l 我們還注意到,Netbeans 6.1beta里多了一個代碼產(chǎn)生選項
Add Perprerty….
用來增加成員變量
聰明的小燈泡
和其它IDE一樣,, NetBeans提供相應(yīng)的代碼左邊出現(xiàn)一個小燈泡,,以完成修復(fù)導(dǎo)入包等功能。
l 包導(dǎo)入修復(fù)
如上圖,,單擊小燈泡后出現(xiàn)
l 包圍代碼
選擇一段代碼,,代碼左邊將產(chǎn)生小燈泡
點擊小燈泡
我們再選擇Surround with for try{
結(jié)果IDE為我們產(chǎn)生了
try {
System.out.println ("");
} catch (Exception exception) {
}
^_^ ,還可以用其它語句包圍
l 生成JavaDoc注釋
結(jié)果IDE為我們生成了相應(yīng)的注釋
提示:NetBeans6.0默認不提供該功能,,啟用該功能請確保Tools > Options > Java Code里的Javadoc里的選項都選中
l 生成返回變量聲明
我們經(jīng)常需要調(diào)用其它類的方法返回的值,,每次調(diào)用都要聲明一下局部變量,相當(dāng)麻煩
我們可以讓IDE來完成
點擊將產(chǎn)生 byte[] bytes = name.getBytes();
代碼重構(gòu)
《重構(gòu)——改善既有代碼的設(shè)計》一書里提供了超過70個已經(jīng)被證明效果的重構(gòu)手法,,但是如果沒有IDE的支持,,重構(gòu)過程中很容易出錯,這就是為什么很多人即使知道重構(gòu)的好處也不愿意重構(gòu)的原因,。如果 IDE能提供很重構(gòu)的支持,,那么重構(gòu)手法將變成半自動化,,提高重構(gòu)的效率。
現(xiàn)在讓我們來看看NetBeans 提供了哪幾種重構(gòu)手法:
正如上圖所示,,NetBeans提供了如下常用的重構(gòu)手法
Change Method parameters(改變方法參數(shù))
Pull Up(值域,、方法上拉)
Push Down(值域、方法下拉)
Extract Interface(提煉接口)
Extract Superclass(提煉超類)
Move Inner to Outer Level(移動內(nèi)部類為外部類)
Convert Anonymous to Inner(改變匿名類為內(nèi)部類)
Introduce Variable(引入變量)
Introduce Constant(引入常量)
Introduce Field(引入值域)
Introduce Method(引入方法)
Encapsulate Fields(封裝值域)
不明白重構(gòu)的初學(xué)者建議看《重構(gòu)——改善既有代碼的設(shè)計》一書(中國電力出版社)
由于邊幅的原因,,不能一一舉例,,僅拿兩個重構(gòu)手法來舉例
l Introduce Method(引入方法)
假如我們有如下Foo.java
public class Foo{
private String name;
private String no;
public void echo (String a, int b, Long c) {
//--------------------
System.out.println("=========================");
System.out.println(" 菜單 ");
System.out.println("=========================");
//--------------------
//其他關(guān)鍵代碼
//--------------------
System.out.println("=========================");
System.out.println(" 菜單 ");
System.out.println("=========================");
//--------------------
}
}
明顯字段代碼有冗余,,需要Introduce Method重構(gòu),,
最后改為:
public class Foo{
private String name;
private String no;
public void echo (String a, int b, Long c) {
showMenu();
//--------------------
//其他代碼
//--------------------
showMenu();
//--------------------
}
private void showMenu() {
//--------------------
System.out.println("=========================");
System.out.println(" 菜單 ");
System.out.println("=========================");
//--------------------
}
}
l Convert Anonymous to Inner(改變匿名類為內(nèi)部類)
假如我們有如下Foo.java
public class Foo{
private String name;
private String no;
public void echo (final String a, final int b, final Long c) {
new Thread(new Runnable() {
public void run() {
System. out.println(a+b+c);
}
});
}
}
上面的例子看起來不需要重構(gòu),但是這里僅僅是舉例怎么用Convert Anonymous to Inner手法
把光標放到new Thread()里面
看看IDE給我們生成了什么:
public class Foo{
private String name;
private String no;
public void echo (final String a, final int b, final Long c) {
new Thread(new RunnableImpl(a, b, c));
}
static class RunnableImpl implements Runnable {
private final String a;
private final int b;
private final Long c;
public RunnableImpl(String a, int b, Long c) {
this.a = a;
this.b = b;
this.c = c;
}
public void run() {
System.out.println (a + b + c);
}
}
}
結(jié)構(gòu)清晰了很多,。
總結(jié)
其實NetBeans的代碼編輯器還很多非常強大的功能我沒有說明,,鑒于邊幅原因,,而且很多功能是可以自己親身體驗的,所以這里就不一一列舉出來,。
我的下一篇博客將介紹用NetBeans 開發(fā) Swing Application Framework (JSR 296) 程序,。