Java開發小技巧(一)

weixin_34107955發表於2017-12-18
5266042-346b93b942ca64bf.jpg

前言

相信許多程式設計師在看別人寫的程式碼的時候,會有懷疑人生的感想,面對一堆天書一樣的程式碼,很難摸清作者的思路,最後選擇了重構,如果你認同上面這個作法,說明了兩個問題:要麼原來的開發者技術菜、要麼你技術菜。

企業級專案的開發不是一個開發人員就能完成的,開發過程中往往會有一些需求變更、人員調動,所以程式碼的編寫規範非常非常重要,你要確保專案交接後,後續開發人員可以看懂你的東西,知道如何進行後期的維護和功能迭代。

最近在看公司專案原始碼(Java)的時候,發現專案的結構非常清晰,後期維護非常便捷,原因就是運用了很多巧妙的開發技巧,在這裡也和大家分享一下,希望對你們有幫助。

1.IP地址變數化

相信大家在連線資料庫的時候是這樣寫的:

jdbc:mysql://127.0.0.1:3306/test

這是連線本地MySql資料庫的字串,這句話看起來沒有問題,但是大多數企業專案會把資料庫獨立出來,使用資料庫一體機或遠端資料庫,這時候就需要修改上面的IP了,如果專案少這樣寫沒什麼問題,但是如果專案多了,豈不是每個專案都要去修改,這樣顯得非常不智慧,所以解決方案來了:

使用hosts檔案使IP地址變數化

首先介紹一下hosts檔案,它的作用就是將一些網址域名與其對應的IP地址建立一個關聯,相當於本地的DNS域名解析器,當使用者訪問一個網址時,系統會首先從hosts檔案中尋找對應的IP地址,一旦找到,系統會立即訪問對應的IP,如果沒有找到,則系統再會將網址提交DNS域名解析伺服器進行IP地址的解析。

Windows中hosts檔案位於C:\Windows\System32\drivers\etc\hosts,Linux中位於/etc/hosts

現在我們把資料庫連線字串改成這樣子:

jdbc:mysql://mydb:3306/test

與之前的不同之處在於,將127.0.0.1的IP地址改成了變數名mydb

接著我們來修改hosts檔案,開啟hosts檔案其實你可以看到,平時我們使用的localhost其實是預設解析到IP127.0.0.1上的,我們可以在檔案最下面新增這樣一行配置:

127.0.0.1 mydb

大功告成,執行專案你會發現一切正常,這就是將IP地址變數化的方法,如果之後公司要求將資料庫遷移到其它地方,只需修改一下伺服器的hosts檔案即可,伺服器上面所有的專案就能正常連線資料庫了,是不是很方便呢

2.配置檔案式開發

在我們的開發中經常會有一些需要預先定義好的變數或者常量,比如資料庫連線配置、Sql語句等等,如果把它們寫死在程式碼裡面,會顯得很不靈活,因為Java是一種編譯型開發語言,修改程式碼需要重新編譯和部署,於是我們可以使用這種方法——將變數存放到配置檔案中。

這樣如果我們修改了變數內容,也不需要重新編譯,像Spring、Mybatis等大多是Java框架都是利用這種方式來工作的。

下面舉一個簡單的例子:

首先我們新建一個config.properties的配置檔案:

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://mydb:3306/test?characterEncoding=utf8&useSSL=true&serverTimezone=UTC
db.username=root
db.password=toor

這是一個簡單的資料庫連線配置檔案,然後我們在程式碼中載入這個檔案:

File file = new File("config.properties");
if(!file.exists() && file.isDirectory()){
            throw new FileNotFoundException("缺少配置檔案config.properties");
        }
Properties prop = new Properties();
FileInputStream in = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(in, "UTF-8");  //解決檔案編碼問題
prop.load(reader);  //載入配置內容到prop物件中

這樣我們就可以通過Properties提供的方法來獲取相應的配置了,如:

String url = prop.getProperty("db.url");

載入配置檔案還有一種方式:

InputStream in = getClass().getResourceAsStream("config.properties");
prop.load(in);

這是通過classpath來獲取配置檔案,但是要求配置檔案必須放在classpath中,而且需要注意的是,如果你將專案打包成jar包,配置檔案也會被一起打包,沒辦法對檔案進行修改了。

使用Properties prop = System.getProperties();還可以獲取JVM的一些配置,比如系統換行符等資訊,在讀取解析本地檔案內容時是很有用:System.getProperty("line.separator")

3.其它技巧

(1) 使用System.getProperty("line.separator")獲取系統換行符,Windows上為\r\n,Linux為\n
(2) 避免使用硬編碼,使用常量存放固定值,且常量名全部大寫,如:private static final VALUE = "123";
(3) 使用"123".equals(value)方式進行等值判斷,而不用value.equals("123"),防止value為Null出現NullPointerException
(4) 多字串拼接時,使用StringBuffer(執行緒安全)或StringBuilder(非執行緒安全)代替str1 + str2的情況
(5) 使用obj.valueOf()的方式轉換基本型別,避免使用強制轉換
(6) 使用return result.size() > 0的方式優化if條件判斷
(7) 使用靜態程式碼塊初始化靜態成員
(8) 使用整型處理金融資料,將浮點值轉為整型進行計算,避免浮點值的精度偏差
(9) 使用Collection型別時,採用Map<String, Object> map = new HashMap<String, Object>();List<String> list = new ArrayList<String>();的標準形式,不要省略兩邊的泛型定義
(10) 使用分隔符拼接字串時,用str = str.substring(0, str.lastIndexOf(","));的方式刪除末尾多餘的分隔符

寫在最後

下一篇文章將給大家分享一個很實用的方法:利用Maven打造一個通用的工程,可以把一些通用的配置資訊、類、方法進行統一管理,並且為其它工程提供服務,敬請期待喲

本文為作者kMacro原創,轉載請註明來源:http://www.jianshu.com/p/830cad891984

相關文章