使用NetBeans提高Java生产效率

来源:互联网 发布:javascript倒计时代码 编辑:程序博客网 时间:2024/05/21 14:03

NetBeans 6.0 提高生产力之 Java代码编辑器 

代码模板

有些代码或者关键字经常使用,如果每次需要时我们都要一个一个字母输入,那么效率是很低下的。Netbeans提供了方便的代码模板功能,我们可以添加自己的模板。当然 Netbeans默然提供了一些常用的模板,你只要输入代码的 缩写形式 + Tab键就可以生成相应的代码

如:

只要输入 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 

当然也可以添加自己的模板, 从主菜单中选择Tools > Options 选择Editor


可以修改或添加代码模板,不止是
 Java语言哦。


智能代码提示、完成

《代码大全》里第十一章 变量名的力量 里说道变量名的作用非常重要。为变量命名时最重要的考虑事项是,该名字要完全,准确地描述出该变量所代表的事物。

上面的建议非常重要,好的变量名能让代码的意图更清晰,代码更可阅读性。

这也是为什么 Java界里面很多类或者方法的名称都是这么长的原因。

这样阅读是清晰了,但是不便于输入。如果让你用纯文本编写 SSH Sructs, Spring Hibernate),不考虑配置文件,你可能还是不愿意,因为 SSH里面由于遵循良好的命名习惯,大部分类名和方法名都是非常长的。

NetBeans 6.0 Java编辑器提供超智能的代码提示、完成功能,智能的程度丝毫不逊于 IntelliJ IDEA,更不要说Eclipse了。

下面让我们通过试验来看看 NetBeans Java代码编辑器智能到什么程度

提示:代码提示功能的快捷键为: Ctrl + 空格键  Ctrl+/ (反斜杠 ) ,由于 Ctrl + 空格键和

我们的中文输入法冲突了,所以你可以用 Ctrl+",或者修改为自己喜欢的快捷键

l         试验一 

我们在 Netbeans新建一个 Java 类,删除掉 IDE给我们生成的代码然后按下 Ctrl+/

 
IDE识别出我们这时应该用到的关键字

l         试验二:

在一个类内部中,我们按下 Ctrl+/
 

Foo是新建的类,默认继承 Object 对象,看来 IDE能识别出父类的方法 clone()~toString

Foo() generate 是产生 Foo类的构造方法

后面是类内部里面可能用到的关键字和 java核心包里面的类和各个包

l         试验三:

在一个方法内部,我们按下 Ctrl+/

我们看到,代码提示里提示有方法的参数名 a,b,c

l         试验四:

添加 Spring 


然后在方法里面输入
 Appli 再按下 Ctrl+/

看到没有, Spring中的类名和 ”Appli”相关类都显示出来了

l         试验五:

在刚才的方法中输入 ApplicationContext + 空格 + Ctrl+/

 
呵呵,
 IDE帮我们想好了变量名的名称了,以后再也不用为变量名发愁了

我们引用相关变量看看

 


试验六:

在一个类的方法中输入 List list=new + 空格 + Ctrl+/

 

 

我晕,多态都支持,呵呵。



代码生成

如果 NetBeans仅仅支持上面的代码提示功能,那么 NetBeans吸引力也不是很大,毕竟其它 IDE也提供相应的功能,但是别急,我们慢慢享受 IDE提供的免费大餐。

下面继续探索 NetBeans的代码编辑器的其它功能

我们在类面添加两个成员变量

     private  String name;
    
 private  String no;

然后在类里面按 Alt + Insert键(或者右键弹出菜单选择 insert code… )
 

l         产生构造方法, set 、 get方法

 
一旦成员变量变多,代码生成功能极大的方便了我们

l         重写父类方法

Alt + Insert 选择 Override Method…

我可以重写父类的方法

l         代理成员变量的方法

首先为了测试该功能,我们新建一个成员变量

private List list;

 Alt + Insert 选择 Delegate Method…


然后如下图所示

下一步,产生了 List add()代理方法, J
 


l         我们还注意到, Netbeans 6.1beta里多了一个代码产生选项

Add Perprerty….

用来增加成员变量
 



聪明的小灯泡

和其它 IDE一样, NetBeans提供相应的代码左边出现一个小灯泡,以完成修复导入包等功能。

l         包导入修复

 
如上图,单击小灯泡后出现
 

l         包围代码

选择一段代码,代码左边将产生小灯泡

 
点击小灯泡

 
我们再选择
 Surround with for try{

结果 IDE为我们产生了

          try   {
 
             System.out.println (
 "" );
 
         }
 
  catch   (Exception exception)  {
 
         }
 

^_^ ,还可以用其它语句包围

l         生成 JavaDoc注释

 
结果
 IDE为我们生成了相应的注释

 
提示:
 NetBeans6.0默认不提供该功能,启用该功能请确保 Tools > Options > Java Code 里的Javadoc里的选项都选中


l         生成返回变量声明

我们经常需要调用其它类的方法返回的值,每次调用都要声明一下局部变量,相当麻烦

我们可以让 IDE来完成

 
点击将产生
     byte[] bytes = name.getBytes();


代码重构

《重构——改善既有代码的设计》一书里提供了超过 70个已经被证明效果的重构手法,但是如果没有 IDE的支持,重构过程中很容易出错,这就是为什么很多人即使知道重构的好处也不愿意重构的原因。如果 IDE能提供很重构的支持,那么重构手法将变成半自动化,提高重构的效率。

现在让我们来看看 NetBeans 提供了哪几种重构手法:

 
正如上图所示,
 NetBeans提供了如下常用的重构手法

Change Method parameters(改变方法参数 )

Pull Up(值域、方法上拉)

Push Down(值域、方法下拉)

Extract Interface(提炼接口)

Extract Superclass(提炼超类)

Move Inner to Outer Level(移动内部类为外部类 )

Convert Anonymous to Inner(改变匿名类为内部类)

Introduce Variable(引入变量)

Introduce Constant(引入常量)

Introduce Field(引入值域)

Introduce Method(引入方法 )

Encapsulate Fields(封装值域 )

不明白重构的初学者建议看《重构——改善既有代码的设计》一书(中国电力出版社)

由于边幅的原因,不能一一举例,仅拿两个重构手法来举例

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(
 " ========================= " );
 
         
 // --------------------
 
         
 // 其他关键代码
 
         
 // -------------------- 
 

         System.out.println(
 " ========================= " );
 
         System.out.println(
 "            菜单            " );
 
         System.out.println(
 " ========================= " );
 
         
 // -------------------- 
 

     }
 

 
 }
 

 

明显字段代码有冗余,需要 Introduce Method重构,

 

最后改为:

 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(改变匿名类为内部类)

假如我们有如下 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);

            }

        });

    }

}

上面的例子看起来不需要重构,但是这里仅仅是举例怎么用 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);
 
         }
 

 
     }
 

 
 }
 

 

结构清晰了很多。