1. 程式人生 > >java1.4升級到java1.5 新特性

java1.4升級到java1.5 新特性

        前幾天和一位騰訊的技術大牛聊天,聊到關於jdk的很多支援,包括jvm的優化,gc的呼叫機制,1.4-到1.8每次升級版本的新特性等,做軟體這行這麼多年了,一直在使用java,但是卻從來沒有細細的研究每個版本新特性到底有什麼不同,所以特意編寫了這麼一篇文件,讓自己能瞭解些他們的新特性,也共享一下新特性的改變,當然我下面的驗證並不能當做最官方的,但最起碼我是一個一個實驗了,如果存在問題或解釋的不正確的,也勞煩各位大牛給予指正.

         目前我下載的jdk版本,如果大家需要這些版本的話,後期我會上傳到百度雲上面去,供大家下載,大家在eclipse中一配置就好,不用安裝的哦

         

        工程建立的版本編碼為UTF-8

          

         好了,上面就是我的系統編碼以及工程的詳細資訊,那麼我們就開始測試吧!

==================================================華麗的分割線=======================================

       1.4版本,在list中新增string和數字時,比較的麻煩,可以看一下一下例子

       

       在獲取值的時候也會出錯,1.4對中文支援的不太好,目前我的工程師utf-8的,但是還是出現了中文亂碼的情況,這個問題網上很多教程說是由於jdk1.4對中文支援不太好,也有的說是環境的問題,目前這個亂碼問題還需要待確定.

       

       以下是在沒有改變任何引數時,把原有程式碼複製了一份,然後我們看到程式碼出現了黃色的下劃線,而且執行後,不會在出現亂碼的情況,由此可以驗證,1.4對中文確實支援不太好,在1.5版本的時候做了修正

       

       當我們新增泛型後,因為泛型的型別是string的,所以我們只能向list中新增string型別的引數,而不能新增數字型別,如果我們的需求只是一種型別的,使用泛型是可行的,但是我們的需求需要他即能儲存string,也能儲存int,那麼使用泛型就有點力不從心了


      

       因為我們添加了泛型,我們只能存string型別的,所有我們就只能add(string),我們可以看到第12行我們沒有對型別進行強轉,這就引出了1.4到1.5的另一個新特性 自動裝箱

/拆箱

      

      目前我們說了三點1.4到1.5 的特性,總結一下

     1.中文支援

     2.泛型

     3.自動裝箱/拆箱

     有人說了,1.4到1.5就這點特性嗎?當然不是,我們還有沒說,那我們繼續.

     我們可以看到 ,使用1.4版本做list遍歷的時候,我們需要寫int index=0....之類的,程式碼偏重

     

     現在我們轉換成1.5版本,然後又標黃了,大家應該知道為什麼了吧,因為沒加泛型,不新增泛型系統不會報錯.咱們就用1.5改一下下面的程式碼,一會的話我們也修改jdk為1.4來執行1.5支援的程式碼

     

     以下是使用jdk1.5的新特性迴圈的增強 for-each

     

     我們換做了1.4版本來執行for-each,我們可以看到,報錯了,因為1.4不支援呀

     

     我這裡改會了1.5 然後添加了泛型,又改了改,我們可以看到最下面的輸出,沒問題吧,這就是for-each增強

     

下面是1.4版本使用平方根方法的使用方式,我們得把類也拿過來不是,然後我們看一下1.5是怎麼用的

     

     說說看,你看下面的程式碼,發現了什麼我們不在使用Math.sqrt(int),而是直接把Math中的方法引入到了當前類中,這就是1.5的新特性 import static 靜態引入方法

      

     我們可以看到引入的方法,但是什麼方法可以這麼用呢,那麼我們就舉幾個例子來驗證一下,我們在test215中添加了一個public 的a 方法,然後我們在315中引入下,看看能不能引入進來

     

     我們可以看到,在315中是無法引入這個public方法的,即使是private,default或者是protected,都無法引入非靜態的方法.

     

     那麼我們就把a方法改成static方法

     

     然後我們可以看到315已經不再報錯了,因為a方法是靜態的,而且修飾符是public的,那麼如果是其他型別的呢,我們試一下private,default或者是protected

     

      privated修飾符

      

      在呼叫就報錯了,原因是如果修飾符為private型別的,則無法訪問import static方法,即使是static型別的方法,其他的default或者是protected在同包下沒有此類問題,非同包也會有此類問題,只要大家對public,private,default或者是protected瞭解,就明白他們的呼叫方式了

     

      我們在實際開發過程中,可能需要傳遞多個引數到另一方法,可能我們需要寫一下的方法,我們要計算a+b,那就得傳a和b,如果我們突然要計算在a+b+c,那麼我們得整體修改方法,引數列表得修改,程式碼也得修改,如果我們使用可變長進行計算,這樣我們就可以省去修改的部分

     

下面是1.5版本支援可變長引數,不過可變長引數這個新特性並不是哪哪都好,在使用時,也需要注意下,例如

(1)重寫方法不能縮小訪問許可權;

(2)引數列表必須與被重寫方法相同(包括顯示形式);

(3)返回型別必須與被重寫方法的相同或是其子類;

(4)重寫方法不能丟擲新的異常,或者超過了父類範圍的異常,但是可以丟擲更少、更有限的異常,或者不丟擲異常。


     以上大致是1.4升級到1.5的新特性,當然編寫程式碼只為參考,沒有按照程式碼規範走,請各位海涵,如果上面寫的有問題或者紕漏的,希望各位能夠糾正才是.