zoukankan      html  css  js  c++  java
  • 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 各种技术的一致性.


  • 相关阅读:
    JVM调优总结(转载)
    项目应该如何分层(转载)
    SpringCloud Feign 配置(基于Consul)
    yml配置文件嵌套
    SpringCloud Zuul基于Consul配置及详解
    springBoot聚合项目打包
    SpringCloud Config 配置(基于Consul)
    hibernate的三种状态
    IOS 图片全屏预览
    IOS 下拉菜单
  • 原文地址:https://www.cnblogs.com/rcklos/p/12920299.html
Copyright © 2011-2022 走看看