前几天和一位腾讯的技术大牛聊天,聊到关于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的新特性,当然编写代码只为参考,没有按照代码规范走,请各位海涵,如果上面写的有问题或者纰漏的,希望各位能够纠正才是.
更多JAVA教程,可访问:http://www.ijson.com/