JDK 的前世今生:细数 Java5 - 15 的那些经典特性

本文详细介绍了JDK从Java5到Java15的主要新特性,包括注解、静态导入、线程并发库、Desktop类和SystemTray类、JAXB2、HttpServer API、插入式注解处理API、STAX、Common Annotations、Compiler API、对脚本语言的支持等。进一步,文章涵盖了Java7的switch支持String、try-with-resources、二进制表示、泛型类型自动推断、多异常捕获、NIO2.0和Fork/Join框架。Java8的亮点在于Lambada表达式、函数式接口、方法引用、默认方法、Stream API、Optional和Date Time API。Java 9引入了模块系统、不可变集合工厂方法、接口私有方法、钻石操作符升级、Optional改进等。Java 10的局部变量类型推断和不可变集合的改进也被提及。
摘要由CSDN通过智能技术生成

可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.SOURCE)

public @interface Override {

}

7.静态导入

通过 import static 类,就可以使用类里的静态变量或方法。看一下例子哈~

import static java.lang.System.out; //静态导入 System 类的静态变量 out

public class Test {

public static void main(String[] args) throws Exception {

String str1 = 

System.out.println(str1); //常规写法

out.println(str1); //静态导入,可以直接使用 out 输出

}

}

8. 线程并发库(JUC)

JDK5 丰富了线程处理功能,java.util.concurrent 包提供了以下的类、接口:

?

  • 线程池:ExecutorService 接口

  • 线程护斥:Lock 类

  • 线程通信:Condition 接口

  • 同步队列:ArrayBlockingQueue 类

  • 同步集合:ConcurrentHashMap 类

?

Java 6 新特性

1.Desktop 类和 SystemTray 类

JDK 6 在 java.awt 包下,新增了两个类:Desktop 类和 SystemTray 类

?

  • 「Desktop 类」: 用来打开系统默认浏览器浏览指定的 URL,打开系统默认邮件客户端发邮件等

  • 「SystemTray 类」:用来在系统托盘区创建一个托盘程序,如果在微软的 Windows 上,它被称为“任务栏”状态区域。

?

 Desktop 实例

Desktop desktop = Desktop.getDesktop();

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

JAXB,即 Java Architecture for XML Binding,可以实现对象与 XML 之间的映射,常用注解如下:

?

  • @XmlRootElement:注解在类上面,对应 xml 的跟元素,使用 name 属性定义根节点的名称。

  • @XmlElement:指定一个字段或 get/set 方法映射到 xml 的节点,使用 name 属性定义这个根节点的名称。

  • @XmlAttribute:将 JavaBean 对象的属性映射为 xml 的属性,使用 name 属性为生成的 xml 属性指定别名。

  • @XmlAccessorType:定义映射这个类中的何种类型都需要映射到 xml。

  • @XmlSchema: 将包映射到 XML 名称空间

?

「看个例子吧~」

public class JAXB2XmlTest {



public static void main(String[] args) throws JAXBException, IOException {



List<Singer> list = new ArrayList<>();



list.add(new Singer("jay", 8));



list.add(new Singer("eason", 10));



SingerList singerList = new SingerList();



singerList.setSingers(list);



String str = JAXB2XmlTest.beanToXml(singerList, SingerList.class);



String path = "C:\jay.txt";



BufferedWriter bfw = new BufferedWriter(new FileWriter(new File(path)));



bfw.write(str);



bfw.close();



}



private static String beanToXml(Object obj, Class<?> load) throws JAXBException {



JAXBContext context = JAXBContext.newInstance(load);



Marshaller marshaller = context.createMarshaller();



marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);



marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");



StringWriter writer = new StringWriter();



marshaller.marshal(obj,writer);



return writer.toString();



}



}



public class Singer {



private String name;



private int age;



public Singer(String name, int age) {



this.name = name;



this.age = age;



}



@XmlAttribute(name="name")



public String getName() {



return name;



}



public void setName(String name) {



this.name = name;



}



@XmlAttribute(name="age")



public int getAge() {



return age;



}



public void setAge(int age) {



this.age = age;



}



}



@XmlRootElement(name="list")



public class SingerList {



private List<Singer> singers;



@XmlElement(name="singer")



public List<Singer> getSingers() {



return singers;



}



public void setSingers(List<Singer> singers) {



this.singers = singers;



}



}



「运行效果:」



<?xml version="1.0" encoding="GBK" standalone="yes"?>



<list>



<singer age="8" name="jay"/>



<singer age="10" name="eason"/>



</list>

3.轻量级 Http Server API

JDK 6 中提供了简单的 Http Server API,可以构建嵌入式 Http 服务器,同时支持 Http 和 Https 协议。HttpServer 会调用 HttpHandler 实现类的回调方法来处理客户端请求,这里用户只需实现 HttpHandler 接口就可以了。

/**



根据 Java 提供的 API 实现 Http 服务器



*/



public class MyHttpServer {



/**



@param args

@throws IOException



*/



public static void main(String[] args) throws IOException {



//创建 HttpServer 服务器



HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), 10);



//将 /jay 请求交给 MyHandler 处理器处理



httpServer.createContext("/", new MyHandler());



httpServer.start();



}



}



public class MyHandler implements HttpHandler {



public void handle(HttpExchange httpExchange) throws IOException {



//请求头



Headers headers = httpExchange.getRequestHeaders();



Set<Map.Entry<String, List<String>>> entries = headers.entrySet();



StringBuffer response = new StringBuffer();



for (Map.Entry<String, List<String>> entry : entries){



response.append(entry.toString() + "\n");



}



//设置响应头属性及响应信息的长度



httpExchange.sendResponseHeaders(200, respon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值