博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK1.5(jdk5.0)新特性
阅读量:4290 次
发布时间:2019-05-27

本文共 3948 字,大约阅读时间需要 13 分钟。

JDK1.5新特性:

1.自动装箱与拆箱:
自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中。
自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取出来,没必要再去调用intValue()和doubleValue()方法。
自动装箱,只需将该值赋给一个类型包装器引用,java会自动创建一个对象。
自动拆箱,只需将该对象值赋给一个基本类型即可。
java——类的包装器
类型包装器有:Double,Float,Long,Integer,Short,Character和Boolean

Integer iObj = 3;System.out.println(iObj + 12);Integer i1 = 137(-128--127范围时,为true);Integer i2 = 137(-128--127范围时,为true);System.out.println(i1 == i2); //false,但是括号中时却返回ture,原因是Integer采用的是享元模式Integer i3 = Integer.valueOf(213);Integer i4 = Integer.valueOf(213);System.out.println(i3==i4);//同上,另一种包装形式


2.枚举(常用来设计单例模式)
把集合里的对象元素一个一个提取出来。枚举类型使代码更具可读性,理解清晰,易于维护。枚举类型是强类型的,从而保证了系统安全性。而以类的静态字段实现的类似替代模型,不具有枚举的简单性和类型安全性。
简单的用法:JavaEnum简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。
复杂用法:Java为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象。

public class EnumTest {/*** @param args*/public static void main(String[] args) {WeekDay1 weekDay = WeekDay1.MON;System.out.println(weekDay.nextDay());WeekDay weekDay2 = WeekDay.FRI;System.out.println(weekDay2);System.out.println(weekDay2.name());System.out.println(weekDay2.ordinal()); System.out.println(WeekDay.valueOf("SUN").toString());System.out.println(WeekDay.values().length);new Date(300){};}public enum WeekDay{SUN(1),MON(),TUE,WED,THI,FRI,SAT;private WeekDay(){System.out.println("first");}private WeekDay(int day){System.out.println("second");}}public enum TrafficLamp{RED(30){public TrafficLamp nextLamp(){return GREEN;}},GREEN(45){public TrafficLamp nextLamp(){return YELLOW;} },YELLOW(5){public TrafficLamp nextLamp(){return RED;} };public abstract TrafficLamp nextLamp();private int time;private TrafficLamp(int time){this.time = time;}}}

3.静态导入
通过使用 import static,就可以不用指定 Constants 类名而直接使用静态成员,包括静态方法。
import xxxx 和 import static xxxx的区别是前者一般导入的是类文件如import java.util.Scanner;后者一般是导入静态的方法,import static java.lang.System.out。

import static java.lang.Math.*;public class StaticImport {public static void main(String[] args){int x = 1;try {x++;} finally {System.out.println("template");}System.out.println(x);System.out.println(max(3, 6));System.out.println(abs(3 - 6));}}

4.可变参数
可变参数的简单语法格式为:
methodName([argumentList], dataType...argumentName);

public class VarableParameter {/*** @param args*/public static void main(String[] args) {System.out.println(add(2,3));System.out.println(add(2,3,5)); }public static int add(int x,int... args){int sum = x;/* for(int i=0;i

5.内省
是 Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新 的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter /setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中。
一 般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器 (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来 调用这些方法。

ReflectPoint pt1 = new ReflectPoint(3,5);BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();Object retVal = null;for(PropertyDescriptor pd : pds){Method methodGetX = pd.getReadMethod();retVal = methodGetX.invoke(pt1);}
6.泛型(Generic) 
 
C++ 通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也 不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。
类型参数通配符? 
由“Generic类和子类”节知,Collection<Object>不是存放其它类型对象的Collection(例如Collection<String>)的基类(抽象),那么如何表示任一种参数化的Collection的呢?使用 Collection<?>。?即代表任一类型参数值。例如,我们可以很容易写出下面的通用函数printCollection(): 
 
7.For-Each循环 
 
For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。
8.线程池
Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。
有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类,熟悉这部分API特征是一项艰难的学习过程。目前有关这方面的资料和书籍都少之又少,大所属介绍线程方面书籍还停留在java5之前的知识层面上。
当然新特征对做多线程程序没有必须的关系,在java5之前通用可以写出很优秀的多线程程序。只是代价不一样而已。
线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。
在Java5之前,要实现一个线程池是相当有难度的,现在Java5为我们做好了一切,我们只需要按照提供的API来使用,即可享受线程池带来的极大便利。
Java5的线程池分好多种:固定尺寸的线程池、可变尺寸连接池、。

转载地址:http://ufegi.baihongyu.com/

你可能感兴趣的文章
centos6系列和7系列如何对外开放80,3306端口号或者其他端口号
查看>>
为什么您宁愿吃生活的苦,也不愿吃学习的苦?为什么你不愿意去学习呢
查看>>
解决elasticsearch7.3版本安装过程中遇到的包括内存不够、线程不够等问题
查看>>
日常项目测试用例检查点(来自一线测试人员的吐血总结)
查看>>
网站建设之域名注册和域名备案
查看>>
解决bootstrap时间输入框总被浏览器记住的记录遮挡住的问题
查看>>
git将一个分支完全覆盖另外一个分支如:dev分支代码完全覆盖某一个开发分支
查看>>
elasticsearch7.3版本环境搭建(二)可视化管理后台kibana的安装和配置
查看>>
elasticsearch7.3版本环境搭建(三)可视化管理后台kibana的汉化(设置中文界面)
查看>>
记录一次DDos攻击实战
查看>>
分享一首小诗--《致程序员》
查看>>
为什么百度只抓取了首页而不抓取我的网站的内页的原因分析
查看>>
年薪170万的阿里P8级员工征婚有感--话说阿里真有钱,这员工要求的条件真多
查看>>
又是一年桂花飘香时,祝我们伟大的祖国70年华诞更加繁荣昌盛,祝大家国庆节快乐
查看>>
谷歌浏览器chrome即将在2020年底停止支持flash,我们程序员该怎么办
查看>>
如何将数据采集到 Elasticsearch 服务
查看>>
面试官:mysql表设计要注意什么?
查看>>
一些精致小众网站收集录
查看>>
计算机科学探秘之linux发展史
查看>>
程序员每天早上早来10分钟的好处
查看>>