1. 程式人生 > >提高Java開發效率-常用外掛

提高Java開發效率-常用外掛

最近程式設計被推薦了幾個比較好用的外掛,現在來總結下,雖然網上已經有不少安裝,使用教程,但是為了自己的以後的學習使用,自己也就寫一下。

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

Lombok是一個可以通過簡單的註解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java程式碼的工具,通過使用對應的註解,可以在編譯原始碼的時候生成對應的方法。如實體類中的getter,setter之類的一系列方法。使我們的程式碼看起來更加的整潔簡練,缺點就是若是不瞭解lombok,會造成可讀性差。

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 明顯的無限迭代迴圈,將導致堆疊溢位.

若是哪裡有理解錯誤的或寫錯的地方,望各位讀者評論或者私信指正,不勝感激。