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

        前几天和一位腾讯的技术大牛聊天,聊到关于jdk的很多支持,包括jvm的优化,gc的调用机制,1.4-到1.8每次升级版本的新特性等,做软件这行这么多年了,一直在使用java,但是却从来没有细细的研究每个版本新特性到底有什么不同,所以特意编写了这么一篇文档,让自己能了解些他们的新特性,也共享一下新特性的改变,当然我下面的验证并不能当做最官方的,但最起码我是一个一个实验了,如果存在问题或解释的不正确的,也劳烦各位大牛给予指正.


         目前我下载的jdk版本,如果大家需要这些版本的话,后期我会上传到百度云上面去,供大家下载,大家在eclipse中一配置就好,不用安装的哦

         

        工程建立的版本编码为UTF-8

          

         好了,上面就是我的系统编码以及工程的详细信息,那么我们就开始测试吧!

==================================================华丽的分割线=======================================



       1.4版本,在list中添加string和数字时,比较的麻烦,可以看一下一下例子

       java1.4升级到java1.5 新特性_第1张图片

       在获取值的时候也会出错,1.4对中文支持的不太好,目前我的工程师utf-8的,但是还是出现了中文乱码的情况,这个问题网上很多教程说是由于jdk1.4对中文支持不太好,也有的说是环境的问题,目前这个乱码问题还需要待确定.

        java1.4升级到java1.5 新特性_第2张图片

       以下是在没有改变任何参数时,把原有代码复制了一份,然后我们看到代码出现了黄色的下划线,而且执行后,不会在出现乱码的情况,由此可以验证,1.4对中文确实支持不太好,在1.5版本的时候做了修正

       

       当我们添加泛型后,因为泛型的类型是string的,所以我们只能向list中添加string类型的参数,而不能添加数字类型,如果我们的需求只是一种类型的,使用泛型是可行的,但是我们的需求需要他即能存储string,也能存储int,那么使用泛型就有点力不从心了


      java1.4升级到java1.5 新特性_第3张图片

     

       因为我们添加了泛型,我们只能存string类型的,所有我们就只能add(string),我们可以看到第12行我们没有对类型进行强转,这就引出了1.4到1.5的另一个新特性  自动装箱/拆箱

      java1.4升级到java1.5 新特性_第4张图片

      目前我们说了三点1.4到1.5 的特性,总结一下

     1.中文支持

     2.泛型

     3.自动装箱/拆箱

     有人说了,1.4到1.5就这点特性吗?当然不是,我们还有没说,那我们继续.



     我们可以看到 ,使用1.4版本做list遍历的时候,我们需要写int index=0....之类的,代码偏重

      java1.4升级到java1.5 新特性_第5张图片

      

     现在我们转换成1.5版本,然后又标黄了,大家应该知道为什么了吧,因为没加泛型,不添加泛型系统不会报错.咱们就用1.5改一下下面的代码,一会的话我们也修改jdk为1.4来运行1.5支持的代码

      java1.4升级到java1.5 新特性_第6张图片

     

     以下是使用jdk1.5的新特性循环的增强 for-each

     java1.4升级到java1.5 新特性_第7张图片

     我们换做了1.4版本来运行for-each,我们可以看到,报错了,因为1.4不支持呀

     java1.4升级到java1.5 新特性_第8张图片

     

     我这里改会了1.5 然后添加了泛型,又改了改,我们可以看到最下面的输出,没问题吧,这就是for-each增强

     java1.4升级到java1.5 新特性_第9张图片

     

     下面是1.4版本使用平方根方法的使用方式,我们得把类也拿过来不是,然后我们看一下1.5是怎么用的

     java1.4升级到java1.5 新特性_第10张图片

     说说看,你看下面的代码,发现了什么我们不在使用Math.sqrt(int),而是直接把Math中的方法引入到了当前类中,这就是1.5的新特性 import static 静态引入方法

      

     我们可以看到引入的方法,但是什么方法可以这么用呢,那么我们就举几个例子来验证一下,我们在test215中添加了一个public 的a 方法,然后我们在315中引入下,看看能不能引入进来

     java1.4升级到java1.5 新特性_第11张图片

      

     我们可以看到,在315中是无法引入这个public方法的,即使是private,default或者是protected,都无法引入非静态的方法.

     

     

     那么我们就把a方法改成static方法

     

     

     然后我们可以看到315已经不再报错了,因为a方法是静态的,而且修饰符是public的,那么如果是其他类型的呢,我们试一下private,default或者是protected

     java1.4升级到java1.5 新特性_第12张图片

     

      privated修饰符

      

      

      在调用就报错了,原因是如果修饰符为private类型的,则无法访问import static方法,即使是static类型的方法,其他的default或者是protected在同包下没有此类问题,非同包也会有此类问题,只要大家对public,private,default或者是protected了解,就明白他们的调用方式了

     java1.4升级到java1.5 新特性_第13张图片

     

      我们在实际开发过程中,可能需要传递多个参数到另一方法,可能我们需要写一下的方法,我们要计算a+b,那就得传a和b,如果我们突然要计算在a+b+c,那么我们得整体修改方法,参数列表得修改,代码也得修改,如果我们使用可变长进行计算,这样我们就可以省去修改的部分

     java1.4升级到java1.5 新特性_第14张图片

     

下面是1.5版本支持可变长参数,不过可变长参数这个新特性并不是哪哪都好,在使用时,也需要注意下,例如

(1)重写方法不能缩小访问权限;

(2)参数列表必须与被重写方法相同(包括显示形式);

(3)返回类型必须与被重写方法的相同或是其子类;

(4)重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。

java1.4升级到java1.5 新特性_第15张图片

     以上大致是1.4升级到1.5的新特性,当然编写代码只为参考,没有按照代码规范走,请各位海涵,如果上面写的有问题或者纰漏的,希望各位能够纠正才是.




    

你可能感兴趣的:(java,JDK1.5,JDK1.4,JDK新特性,jdk1.4升级到1.5新特性)