提高Java开发效率-常用插件

最近编程被推荐了几个比较好用的插件,现在来总结下,虽然网上已经有不少安装,使用教程,但是为了自己的以后的学习使用,自己也就写一下。

一.lombok(IDEA,myeclipse,eclipse)安装以及使用

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。如实体类中的getter,setter之类的一系列方法。使我们的代码看起来更加的整洁简练,缺点就是若是不了解lombok,会造成可读性差。

1.1 lombok官方地址:Lombok官网,lombok的GitHub地址:Lombok的GitHub地址

1.2 IDEA安装lombok 

(1)在线安装:菜单File->Settings->Plugins->Browse repositories...->搜索框内搜索lombok->得到结果Lombok plugin,下载(install)并重新启动就ok了。

(2)离线安装:首先要下载lombok.jar,下载网址:lombok.jar,然后菜单File->Settings->Plugins->Install plug from disk->选择你下载的lombok.jar,然后apply->OK,重启就ok了。

1.3 myeclipse或eclipse安装lombok

(1)首先在下载lombok.jar,并打开myeclipse或eclipse的安装目录,找到myeclipse.ini/eclipse.ini所在的文件目录。

(2)打开myeclipse.ini/eclipse.ini,在配置的最后加上

-javaagent:lombok.jar

-Xbootclasspath/a:lombok.jar

(3)保存后重启myeclipse或eclipse。

1.4 Java maven项目中使用lombok,添加lombok依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven</artifactId>
    <version>1.16.20.0</version>
    <type>pom</type>

</dependency>

二.GsonFormat IDEA安装以及使用(myeclipse和eclipse就放弃吧,不适用)

主要用于使用Gson库将JSONObject格式的String 解析成实体,也就是快速的将json数据转转成你想要的实体类(Java Bean),这样方便了你根据前端给你所要求的的json数据格式去设计Java Bean。

1.1 GsonFormat的GitHub地址:GsonFormat。(希望有大神开发一款针对eclipse和myeclipse的同作用插件,如果读者知道已经开发出了,请私信或评论留下插件名字,下载地址,万分感谢)

1.2 IDEA安装GsonFormat

(1)在线安装:菜单File->Settings->Plugins->Browse repositories...->搜索框内搜索GsonFormat->得到结果GsonFormat,下载(install)并重新启动就ok了。

(2)离线安装:首先要下载GsonFormat.jar,下载网址:GsonFormat.jar,然后菜单File->Settings->Plugins->Install plug from disk->选择你下载的GsonFormat.jar,然后apply->OK,重启就ok了。

1.3 IDEA使用GsonFormat

(1)首先你需要在项目中建立一个空的Java Bean(不带任何属性),将鼠标移动到这个Java Bean的编辑区域  1.Alt+Insert,在弹出的框中选择GsonFormat 2.Alt+s。

(2)将你复制的json串,放入经过以上任意一部所打开的窗口,粘贴上去,点击OK,接着在弹出的窗口中,你可以选择属性,和改变属性的数据类型等。

三.FindBugs(IDEA,myeclipse,eclipse)安装以及使用

有时候随着项目的越写越大,时间越来越长,项目的审查工作是个巨大的负担,而且有时候我们会不小心忽略一些问题,这个时候我们需要一些代码检查工具代替我们去检查代码,所以FindBugs是个静态分析工具,能检查程序潜在bug,在bug报告中快速定位到问题的代码上,大大的节省了我们的时间,不过它也不是万能的,不可能面面俱到,一些它提供的错误还需要我们人工去判断。FindBugs是检查java字节码,也就是*.class文件。建议如果英文不好初期+谷歌翻译同时使用

3.2 IDEA安装FindBugs

(1)在线安装:菜单File->Settings->Plugins->Browse repositories...->搜索框内搜索FindBugs->得到结果FindBugs-IDEA,下载(install)并重新启动就ok了。

(2)离线安装:首先要下载FindBugs压缩包,下载网址:FindBugs压缩包,然后菜单File->Settings->Plugins->Install plug from disk->选择你下载的FindBugs压缩包(因为包含jar包较多),然后apply->OK,重启就ok了。

3.3 myeclipse和eclipse安装FindBugs

myeclipse和eclipse安装FindBugs需要注意myeclipse和eclipse的版本以及jdk的版本是否和你所安装的FindBugs版本兼容

(1)在线安装:

myeclipse:Help->Install from Site->Add->Name:findbugs,Location:http://findbugs.cs.umd.edu/eclipse

eclipse:Help->Install New Software->Add->Name:findbugs,Location:http://findbugs.cs.umd.edu/eclipse

然后点击OK,选择FindBugs,然后可以一路Next到Finish,重启myeclipse或eclipse,选中任意项目,右击鼠标,如弹出的框中出现findbugs,则表示安装成功或打开eclipse或myeclipse->window->Preferences,搜索关键字findbugs,如果能找到配置项,那么表示安装成功。

(2)离线安装:

首先需要下载你所适用的FindBugs的压缩包:下载网址:适用eclipse的FindBugs,然后打开myeclipse或eclipse的安装目录,找到dropins或plugins(任意一个),将压缩包放入直接解压到此目录,然后启动myeclipse或eclipse,选中任意项目,右击鼠标,如弹出的框中出现findbugs,则安装成功打开eclipse或myeclipse->window->Preferences,搜索关键字findbugs,如果能找到配置项,那么表示安装成功

(3)若是点击项目Find Bugs->Find Bugs后没有出现Bug Explorer,则Window->ShowView->Other->FindBugs->Bug Explorer。找出的bug有3中颜色, 黑色的臭虫标志是分类, 红色的臭虫表示严重bug发现后必须修改代码,橘黄色的臭虫表示潜在警告性bug 。

3.5 IDEA中使用FindBugs:选中项目,包,类,右击鼠标,选择FindBugs, Analyze Selected File(s)单个文件,Analyze Package(s) Files包下文件,Analyze Module Files整个module,Analyze Project Files整个工程

3.6 一些常见的错误:以下是复制,修改别人的,为了以后方便自己学习,多多担待

Bad practice 主要是代码中的一些坏习惯,没有按Java规范来
Class names should start with an upper case letter 主要包括类名的命名,以大写字母开头 
Method names should start with a lower case letter 方法名以小写字母开头 
Field names should start with a lower case letter 字段名以小写字母开头 
equals()method does not check for null argument equals()方法应该检查非空 
Class defines equals() and uses Object.hashCode() 一个类覆写了equals方法,没有覆写hashCode方法,使用了Object对象的hashCode方法 
Method ignores exceptional return value 方法忽略返回值的异常信息 
Equals method should not assume anything about the type of its argument equals(Object o)方法不能对参数o的类型做任何的假设。比较此对象与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的类型的对象时,结果才为 true。 
Comparison of String objects using == or != 用==或者!=去比较String类型的对象 
Method might ignore exception 方法可能忽略异常 
Method invokes System.exit() 在方法中调用System.exit(…)语句,考虑用RuntimeException来代替 
Method ignores result of InputStream.read() InputStream.read方法忽略返回的多个字符,如果对结果没有检查就没法正确处理用户读取少量字符请求的情况。 

Dodgy code 糟糕的代码(一般是没有按Java规范来写代码,或语句不全,类型转换,多余的语句,判断)
Switch statement found where default case is missing Switch没有默认情况下执行的case语句 
Switch statement found where one case falls through to the next case Switch语句中一个分支执行后又执行了下一个分支。通常case后面要跟break 或者return语句来跳出。 
Dead store to local variable 该指令为局部变量赋值,但在其后的没有对她做任何使用。通常,这表明一个错误,因为值从未使用过。 
Write to static field from instance method 在实例方法写入静态字段 
Redundant nullcheck of value known to be non-null 方法中对不为空的值进行为空的判断。 
Method uses the same code for two branches 此方法使用相同的代码,以实现两个有条件的分支。检查以确保这是不是一个编码错误 
Exception is caught when Exception is not thrown 在try/catch块中捕获异常,但是异常没有在try语句中抛出而RuntimeException又没有明确的被捕获 
Integral division result cast to double or float 整形数除法强制转换为double或者float类型。 
Possible null pointer dereference due to return value of called method 方法的返回值没有进行是否为空的检查就重新赋值,这样可能会出现空指针异常。 
Useless object created 对象创建了并没有用 
Unread public/protected field 没有用到的字段 

Internationalization 关于代码国际化相关方面的
Consider using Locale parameterized version of invoked method 
使用平台默认的编码格式对字符串进行大小写转换,这可能导致国际字符的转换不当。使用以下方式对字符进行转换 

Performance 关于代码性能相关方面的(多为声明了无用的属性)
Boxing/unboxing to parse a primitive 类型转换 比如字符串转换成int 应该使用Integer.parseInt(“”) 代替Integer.valueOf(“”) 
Method concatenates string using + in aloop 
每次循环里的字符串+连接,都会新产生一个string对象,在java中,新建一个对象的代价是很昂贵的,特别是在循环语句中,效率较低 
解决办法:使用StringBuffer或者StringBuilder重用对象。 
Private method is never called 私有方法没有被调用 
Explicit garbage collection;extremely dubious except in benchmarking code 
在代码中显式的调用垃圾回收命名,这样做并不能起作用。在过去,有人在关闭操作或者finalize方法中调用垃圾回收方法导致了很多的性能浪费。这样大规模回收对象时会造成处理器运行缓慢。 
Unread field:should this field be static? 没有用到的static 字段 
should be a static inner class 此内部类应该使用static修饰 

Experimental
Method may fail to clean up stream or resource on checked exception 
这种方法可能无法清除(关闭,处置)一个流,数据库对象,或其他资源需要一个明确的清理行动 
解决方法:流的关闭都写在finally里面 
Malicious code vulnerability 关于恶意破坏代码相关方面的(主要是一些属性,建议改为private并为其提供get,set方法 )
May expose internal representation by incorporating reference to mutable object 
此代码把外部可变对象引用存储到对象的内部表示。如果实例受到不信任的代码的访问和没有检查的变化危及对象和重要属性的安全。存储一个对象的副本,在很多情况下是更好的办法。 
Field isn’t final but should be 此字段前应该加final 
Field isn’t final and can’t be protected from malicious code 此字段前应该加final 
Field should be package protected 
一个静态字段是可以被恶意代码或其他的包访问修改。可以把这种类型的字段声明为final类型的以防止这种错误。 

Multithreaded correctness 关于代码正确性相关方面的
Static DateFormat DateFormat 在多线程中本身就是不安全的,如果在线程范围中共享一个DateFormat的实例而不使用一个同步的方法在应用中就会出现一些奇怪的行为。 
Call to static DateFormat DateFormats多线程使用本事就是不安全的,改进方法:需要创建多实例或线程同步 
Correctness 关于代码正确性相关方面的
Nullcheck of value previously dereferenced 此代码之前废弃null值检查。解决办法 进行null检查 
Possible null pointer dereference 可能为null 
Null pointer dereference 对象赋为null值后 没有被重新赋值 
Possible null pointer dereference in method on exception path 在异常null值处理分支调用的方法上,可能存在对象去除引用操作 
value is null and guaranteed to be dereferenced on exception path exception分支上,存在引用一个null对象的方法,引发空指针异常。 
Self comparison of value with itself 方法中对一个局部变量自身进行比较运算,并可说明错误或逻辑错误。请确保您是比较正确的事情。 

An apparent infinite recursive loop 明显的无限迭代循环,将导致堆栈溢出.

若是哪里有理解错误的或写错的地方,望各位读者评论或者私信指正,不胜感激。

猜你喜欢

转载自blog.csdn.net/malimingwq/article/details/79440275