JAVA JDK(2)—— jdk6特性

今日一言:
有些人浅薄,
有些人金玉其外而败絮其中,
有天你会遇到一个彩虹般绚丽的人,
当你遇到这个人后,会觉得其他人知识浮云而已。
—— 《怦然心动》
  

JAVA JDK(2)—— jdk6特性

这是一篇很水的文章。
jdk6很多特性都不了解,也不想了解- -!


参考资料:

目录:

  • jdk5
  • jdk6
  • jdk7
  • jdk8

JDK 6

1. Desktop类和SystemTray类

DeskTop类:允许一个Java应用程序启动本地的另一个应用程序去处理URI或文件请求

SystemTray类:代表一个系统托盘桌面。在微软的Windows上,它被称为“任务栏”状态区域,在Gnome上,它被称为“通知”在KDE上,它被称为“系统托盘”。该系统托盘由在桌面上运行的所有应用程序共享。

几乎没用到过,跳过,如有用到会有记录。


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

Java SE可以操作XML,使其与Java对象和XML相互转换。

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

    Person person = new Person(0,"小鱼",0,0);
    JAXBContext context = JAXBContext.newInstance(Person.class);

    // xml 写入文件
    Marshaller marshaller = context.createMarshaller();
    FileWriter fileWriter = new FileWriter("D:\\java.txt",false);
    marshaller.marshal(person,fileWriter);

    // 从文件读取xml并转Person对象
    FileReader fileReader = new FileReader("D:\\java.txt");
    Unmarshaller unmarshaller = context.createUnmarshaller();
    Person person1 = (Person)unmarshaller.unmarshal(fileReader);
    out.println(person1.toString());

}

Person类:

@XmlRootElement(name = "Person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {

    @XmlElement(name = "id",required = true)
    protected long id;

    @XmlAttribute(name = "name", required = true)
    private String name;

    @XmlElement(name = "gender",required = true)
    private int gender;

    @XmlElement(name = "age",required = true)
    private int age;

    ...
}

java.txt内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Person name="小鱼">
    <id>0</id>
    <gender>0</gender>
    <age>0</age>
</Person>

3. StAX

(跳过)StAX:The Streaming API for XML的缩写,一种利用拉模式解析(pull-parsing)XML文档的API.StAX通过提供一种基于事件迭代器(Iterator)的API让 程序员去控制xml文档解析过程,程序遍历这个事件迭代器去处理每一个解析事件,解析事件可以看做是程序拉出来的,也就是程序促使解析器产生一个解析事件 然后处理该事件,之后又促使解析器产生下一个解析事件,如此循环直到碰到文档结束符;
SAX也是基于事件处理xml文档,但却 是用推模式解析,解析器解析完整个xml文档后,才产生解析事件,然后推给程序去处理这些事件;DOM 采用的方式是将整个xml文档映射到一颗内存树,这样就可以很容易地得到父节点和子结点以及兄弟节点的数据,但如果文档很大,将会严重影响性能。

几乎没用到过,跳过,如有用到会有记录。


4. Compiler API

动态编译Java源文件

这 个特性对于某些需要用到动态编译的应用程序相当有用, 比如JSP Web Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件,当然,现在的JSP Web Server也是支持JSP热部署的,现在的JSP Web Server通过在运行期间通过Runtime.exec或ProcessBuilder来调用javac来编译代码,这种方式需要我们产生另一个进程去 做编译工作,不够优雅而且容易使代码依赖与特定的操作系统;Compiler API通过一套易用的标准的API提供了更加丰富的方式去做动态编译,而且是跨平台的。


5. 轻量级Http Server API

Java:

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

    // 8080是监听端口
    // 0为设置TCP并发数为默认值,若值大于零则设置为参数值
    HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080),0);

    // "/"监听所有URI请求
    httpServer.createContext("/"new HttpHandler() {
        @Override
        public void handle(HttpExchange httpExchange) throws IOException {
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append("<p><h1 style=\"position: absolute;top:50%;left:50%;\">Pretend it's a web page</h1></p>");
            httpExchange.sendResponseHeaders(200,stringBuffer.toString().getBytes().length);
            httpExchange.getResponseBody().write(stringBuffer.toString().getBytes());
            httpExchange.close();
        }
    });
    httpServer.start();
}

网页效果
网页效果

6. 插入式注解处理器

给JVM说的注释,可自定义,没有自定义过处理器,不会,跳过。


7. 用Console开发控制台程序

JDK6 中提供了java.io.Console 类专用来访问基于字符的控制台设备. 你的程序如果要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳. 但我们不总是能得到可用的Console, 一个JVM是否有可用的Console依赖于底层平台和JVM如何被调用. 如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例.


8. 对脚本语言的支持如:ruby, groovy, javascript.


9. .Common Annotations

Common annotations原本是Java EE 5.0(JSR 244)规范的一部分,现在SUN把它的一部分放到了Java SE 6.0中.
随 着Annotation元数据功能(JSR 175)加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数(或者说是支持声明式编程,如EJB的声明式事务), 如果这些技术为通用目的都单独定义了自己的Annotations,显然有点重复建设, 所以,为其他相关的Java技术定义一套公共的Annotation是有价值的,可以避免重复建设的同时,也保证Java SE和Java EE 各种技术的一致性.


猜你喜欢

转载自www.cnblogs.com/rcklos/p/12920299.html