JDK 1.5-1.8特性

JDK各个版本的特性

1.JDK 1.5

  • 1) 自动装箱和拆箱
  • 2) 枚举
  • 3) 静态导入
  • 4 可变参数Varargs
    语法格式是:
methodName([argumentList], dataType...argumentName);
  • 5) 内省 Introspector
  • 6) 泛型 Generic
  • 7) For-Each循环

2.JDK 1.6

  • 1) Desktop和SystemTray类

前者可以用来打开系统默认浏览器浏览指定的URL
打开系统默认邮件客户端给指定的邮箱发邮件
用默认应用程序打开或编辑文件(比如,用记事本打开以txt为后缀名的文件)
用系统默认的打印机打印文档;

后者可以用来在系统托盘区创建一个托盘程序

  • 2) 使用JAXB2来实现对象与XML之间的映射

Java Architecture for XML Binding
使用注解实现

  • 3) stAX

除了DOM和SAX之外的又一种处理XML文档的API
一种利用拉模式解析(pull-parsing)XML文档的API
通过提供一种基于事件迭代器(Iterator)的API让 程序员去控制xml文档解析过程,程序遍历这个事件迭代器去处理每一个解析事件,解析事件可以看做是程序拉出来的,也就是程序促使解析器产生一个解析事件 然后处理该事件,之后又促使解析器产生下一个解析事件,如此循环直到碰到文档结束符;

  • 4) 使用Compiler API

动态编译Java源文件 跨平台
手动修改JSP后 可以使用Compiler API动态编译

  • 5) 轻量级Http Server API

可以构建自己的嵌入式Http Server
它支持Http和Https协议,提供了HTTP1.1的部分实现

  • 6) 插入式注解处理API

把method, package, constructor, type, variable, enum, annotation等Java语言元素映射为Types和Elements
Java语言的语义映射成为对象
javax.lang.model包下面可以看到这些类
在编译时而不是运行时处理Annotation

  • 7) 用Console开发控制台程序

java.io.Console 类专用来访问基于字符的控制台设备
如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实 例.

  • 8) 对脚本语言的支持:ruby, groovy, javascript

  • 9) Common Annotations

  • 10) 支持最新的windows vista系统的Windows Aero视窗效果

3.JDK 1.7

  • 1) switch()可以使用字符串

  • 2) <> 菱形运算符可以自动推断出泛型的类型

  • 3) 自定义自动关闭类
    实现AutoCloseable接口并且实现close()方法

  • 4) 新增取环境信息的工具方法

    File System.getJavaIoTempDir() // IO临时文件夹
    File System.getJavaHomeDir() // JRE的安装目录
    File System.getUserHomeDir() // 当前用户目录
    File System.getUserDir() // 启动java进程时所在的目录

  • 5) Boolean类型反转 空指针安全 参与位运算

Boolean Booleans.negate(Boolean booleanObj)

  • 6) 两个char间的equals

boolean Character.equalsIgnoreCase(char ch1, char ch2)

  • 7) 安全的加减乘除

  • 8) 对集合的增强

采用[]、{}的形式存入对象
采用[]的形式按照索引、键值来获取集合中的对象

List<String> list=["item"]; //向List集合中添加元素
String item=list[0]; //从List集合中获取元素
Set<String> set={"item"}; //向Set集合对象中添加元素
Map<String,Integer> map={"key":1}; //向Map集合中添加对象
int value=map["key"]; //从Map集合中获取对象
  • 9) 在Switch中可用String 本质还是整型 但是使用的是字符串的hashcode

  • 10) 数值可加下划线

int one_million = 1_000_000;
  • 11) 支持二进制文字
    int binary = 0b1001_1001;
  • 12) 简化了可变参数方法的调用
    当程序员试图使用一个不可具体化的可变参数并调用一个varargs (可变)方法时,编辑器会生成一个“非安全操作”的警告。

  • 13) 在try catch异常扑捉中,一个catch可以写多个异常类型,用”|”隔开

  • 14) 可以不必要写finally语句来关闭资源,只要你在try()的括号内部定义要使用的资源

4. JDK 1.8

  • 1) 接口的默认方法
    允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法
interface Formula {
    double calculate(int a);
    default double sqrt(int a) {
        return Math.sqrt(a);
    }
}
  • 2) Lambda 表达式

  • 3) 函数式接口 @FunctionalInterface

“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。

  • 4) 方法与构造函数引用

允许你使用 :: 关键字来传递方法或者构造函数引用

Converter<String, Integer> converter = Integer::valueOf;
Integer converted = converter.convert("123");
System.out.println(converted);   // 123

converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted);    // "J"
  • 6) Lambda 作用域

可以直接访问标记了final的外层局部变量,或者实例的字段以及静态变量。

  • 7) 访问局部变量
final int num = 1;
Converter<Integer, String> stringConverter =
        (from) -> String.valueOf(from + num);
stringConverter.convert(2);     // 3

num可以不用声明为final 但是必须不可被后面的代码改变

  • 8) 访问对象字段与静态变量

  • 9) 访问接口的默认方法
    lamada表达式无法访问到默认方法

  • 10) Date API
    java.time下包含了一组全新的时间日期API

    • 1.Instant类也可以用来创建老的java.util.Date对象。
    • 2.Timezones 时区
      在新API中时区使用ZoneId来表示.
      时区可以很方便的使用静态方法of来获取到.
      时区定义了到UTS时间的时间差,在Instant时间点对象到本地日期对象之间转换的时候是极其重要的。
    • 3.LocalDate 本地日期
  • 11) Annotation 注解
    支持多重注解
    例 1: 使用包装类当容器来存多个注解(老方法

@interface Hints {
    Hint[] value();
}
@Repeatable(Hints.class)
@interface Hint {
    String value();
}

@Hints({@Hint("hint1"), @Hint("hint2")})
class Person {}

例 2:使用多重注解(新方法)
复制代码 代码如下:

@Hint("hint1")
@Hint("hint2")
class Person {}
Hint hint = Person.class.getAnnotation(Hint.class);
System.out.println(hint);             
Hints hints1 = Person.class.getAnnotation(Hints.class);
System.out.println(hints1.value().length);  

Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class);
System.out.println(hints2.length);   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值