【Java利器】JDK5-9新特性解析+代码 - JDK6
2018-01-30 22:00
441 查看
本文主要介绍JDK6的新特性。
2.使用JAXB2来实现对象与XML之间的映射
3.StAX
4.使用Complier API
5.轻量级的Http Server API
6.插入式注解处理API(Pluggable Annotation Processing API)
7.用Console开发控制台程序
8.对脚本语言的支持
9.Common Annotations
后者可用来在系统托盘区创建一个托盘程序。
运行该程序,我们会得到一个person.xml的文件,如下:
控制台会输出:
StAX是The Streaming API for XML的缩写。由于JDK6.0中的JAXB2和JAX-WS 2.0都会用到StAX,所以Sun决定把StAX加入到JAXP家族当中来,并将JAXP的版本升级到1.4.
JDK6里面JAXP的版本就是1.4。JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口。
博客地址
这个特性对于某些需要用到动态编译的应用程序相当有用, 比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件。
博客地址
博客地址
博客地址
博客地址
博客地址
博客地址
本篇文章到此就结束了,下一篇是JDK7的新特性总结,有问题请大神留言,欢迎交流!
扫描下面二维码,关注我的公众号哦!!!
目录
1.DestTop类和SystemTray类2.使用JAXB2来实现对象与XML之间的映射
3.StAX
4.使用Complier API
5.轻量级的Http Server API
6.插入式注解处理API(Pluggable Annotation Processing API)
7.用Console开发控制台程序
8.对脚本语言的支持
9.Common Annotations
1.DestTop类和SystemTray类
前者用于调度操作系统中的一些功能,例如:· 可以打开系统默认浏览器指定的URL地址; · 打开系统默认邮件客户端给指定的邮箱发信息; · 用默认程序打开或编辑文件; · 用系统默认的打印机打印文档。
后者可用来在系统托盘区创建一个托盘程序。
package com.example.demo.jdk; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; /** * Desktop类和SystemTray类 * * @author yclimb * @date 2018/1/30 */ public class DesktopTray { private static Desktop desktop; private static PopupMenu pm; /** * 主方法 * @param args v */ public static void main(String[] args) { // 判断当前平台是否支持Desktop类 if (Desktop.isDesktopSupported()) { desktop = Desktop.getDesktop(); } // 判断当前平台是否支持系统托盘 if (SystemTray.isSupported()) { SystemTray st = SystemTray.getSystemTray(); // 定义托盘图标的图片 Image image = Toolkit.getDefaultToolkit().getImage("test.png"); createPopupMenu(); TrayIcon ti = new TrayIcon(image, "Desktop Demo Tray", pm); try { st.add(ti); } catch (AWTException ex) { ex.printStackTrace(); } } } /** * 打开系统默认邮件客户端给指定的邮箱发邮件 * @param mail 邮件地址 */ private static void sendMail(String mail) { if (desktop != null && desktop.isSupported(Desktop.Action.MAIL)) { try { desktop.mail(new URI(mail)); } catch (IOException | URISyntaxException ex) { ex.printStackTrace(); } } } /** * 打开系统默认浏览器浏览指定的URL * @param url 地址 */ private static void openBrowser(String url) { if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { try { desktop.browse(new URI(url)); } catch (IOException | URISyntaxException ex) { ex.printStackTrace(); } } } /** * 编辑文件 * @param filePath 文件路径 */ private static void edit(String filePath) { if (desktop != null && desktop.isSupported(Desktop.Action.EDIT)) { try { File txtFile = new File(filePath); if (!txtFile.exists()) { txtFile.createNewFile(); } desktop.edit(txtFile); } catch (IOException ex) { ex.printStackTrace(); } } } /** * 创建弹出菜单 */ private static void createPopupMenu() { pm = new PopupMenu(); MenuItem openBrowser = new MenuItem("Open My Blog"); openBrowser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openBrowser("http://blog.csdn.net/yclimb"); } }); MenuItem sendMail = new MenuItem("Send Mail to me"); sendMail.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sendMail("mailto:yclimb@qq.com"); } }); MenuItem edit = new MenuItem("Edit Text File"); sendMail.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { edit("test.txt"); } }); MenuItem exitMenu = new MenuItem("&Exit"); exitMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); pm.add(openBrowser); pm.add(sendMail); pm.add(edit); pm.addSeparator(); pm.add(exitMenu); } }
2.使用JAXB2来实现对象与XML之间的映射
JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping). 原来JAXB是Java EE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个JAXB版本是2.0, 比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJB和Web Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。public class JAXB2Tester { public static void main(String[] args) throws JAXBException,IOException { JAXBContext context = JAXBContext.newInstance(Person.class); //下面代码演示将对象转变为xml Marshaller m = context.createMarshaller(); Address address = new Address("China","Beijing","Beijing","ShangDi West","100080"); Person p = new Person(Calendar.getInstance(),"JAXB2",address,Gender.MALE,"SW"); FileWriter fw = new FileWriter("person.xml"); m.marshal(p,fw); //下面代码演示将上面生成的xml转换为对象 FileReader fr = new FileReader("person.xml"); Unmarshaller um = context.createUnmarshaller(); Person p2 = (Person)um.unmarshal(fr); System.out.println("Country:"+p2.getAddress().getCountry()); } } @XmlRootElement//表示person是一个根元素 class Person { @XmlElement Calendar birthDay; //birthday将作为person的子元素 @XmlAttribute String name; //name将作为person的的一个属性 public Address getAddress() { return address; } @XmlElement Address address; //address将作为person的子元素 @XmlElement Gender gender; //gender将作为person的子元素 @XmlElement String job; //job将作为person的子元素 public Person(){ } public Person(Calendar birthDay, String name, Address address, Gender gender, String job) { this.birthDay = birthDay; this.name = name; this.address = address; this.gender = gender; this.job = job; } } enum Gender{ MALE(true), FEMALE (false); private boolean value; Gender(boolean _value){ value = _value; } } class Address { @XmlAttribute String country; @XmlElement String state; @XmlElement String city; @XmlElement String street; String zipcode; //由于没有添加@XmlElement,所以该元素不会出现在输出的xml中 public Address() { } public Address(String country, String state, String city, String street, String zipcode) { this.country = country; this.state = state; this.city = city; this.street = street; this.zipcode = zipcode; } public String getCountry() { return country; } }
运行该程序,我们会得到一个person.xml的文件,如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <person name="JAXB2"> <birthDay>2018-01-28T08:49:27.203+00:00</birthDay> <address country="China"> <state>Beijing</state> <city>Beijing</city> <street>ShangDi West</street> </address> <gender>MALE</gender> <job>SW</job> </person>
控制台会输出:
Country:China
3.StAX
StAX是JDK1.6中除了DOM和SAX之外的又一种处理XML文档的API。StAX是The Streaming API for XML的缩写。由于JDK6.0中的JAXB2和JAX-WS 2.0都会用到StAX,所以Sun决定把StAX加入到JAXP家族当中来,并将JAXP的版本升级到1.4.
JDK6里面JAXP的版本就是1.4。JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口。
博客地址
4.使用Complier API
现在我们可以用JDK1.6 的Compiler API动态编译Java源文件,Compiler API结合反射功能就可以实现动态的产生Java代码并编译执行这些代码,有点动态语言的特征。这个特性对于某些需要用到动态编译的应用程序相当有用, 比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件。
博客地址
5.轻量级的Http Server API
JDK6 提供了一个简单的Http Server API,据此我们可以构建自己的嵌入式Http Server,它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过扩展已有的Http Server API来实现。博客地址
6.插入式注解处理API(Pluggable Annotation Processing API)
JSR (JSR是Java Specification Requests的缩写,意思是Java 规范请求)用Annotation Processor在编译期间而不是运行期间处理Annotation, Annotation Processor相当于编译器的一个插件,所以称为插入式注解处理。博客地址
7.用Console开发控制台程序
JDK6中提供了java.io.Console 类专用来访问基于字符的控制台设备. 你的程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳。博客地址
8.对脚本语言的支持
如: ruby, groovy, javascript博客地址
9.Common Annotations
Common annotations原本是Java EE 5.0规范的一部分,现在SUN把它的一部分放到了Java SE 6.0中. 随着Annotation元数据功能加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数,保证Java SE和Java EE 各种技术的一致性.。博客地址
本篇文章到此就结束了,下一篇是JDK7的新特性总结,有问题请大神留言,欢迎交流!
扫描下面二维码,关注我的公众号哦!!!
相关文章推荐
- 【Java利器】JDK5-9新特性解析+代码 - JDK9
- 【Java利器】JDK5-9新特性解析+代码 - JDK8
- 【Java利器】JDK5-9新特性解析+代码 - JDK7
- 【Java利器】JDK5-9新特性解析+代码 - JDK5
- java基础(1)-比较jdk5,jdk6,jdk7的新特性
- 深入解析Java的新特性assertion
- [备份]java中XML解析利器-dom4j的使用简介
- 学习java日期、日期格式、日期的解析和日期的计算[代码]
- JDK6新特性,JAVA获得机器MAC地址的方法
- [备份]java中XML解析利器-dom4j的使用简介
- Java代码生成和解析xls文件
- wojilu系统的ORM代码解析-[源代码结构分析,用特性和反射来感知属性-特性介绍篇]
- Java一些特性的示例代码
- Java 7新I/O特性解析
- 测试java三大特性之一(继承)的代码
- 深入解析Java的新特性assertion
- Java的基本特征(附:代码解析)
- java中时间类代码解析
- 深入解析Java的新特性assertion
- Java 7:最新特性、代码示例及性能测试