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 各种技术的一致性.


  • 相关阅读:
    了解 NoSQL 的必读资料
    关于什么时候用assert(断言)的思考
    这次见到了一些大侠
    NetBeans 时事通讯(刊号 # 87 Jan 12, 2010)
    动态链接库dll,静态链接库lib, 导入库lib
    新女性十得 写得了代码,查得出异常
    记录系统乱谈
    新女性十得 写得了代码,查得出异常
    fullpage.js禁止滚动
    RunningMapReduceExampleTFIDF hadoopclusternet This document describes how to run the TFIDF MapReduce example against ascii books. This project is for those who wants to experiment hadoop as a skunkworks in a small cluster (110 nodes) Google Pro
  • 原文地址:https://www.cnblogs.com/rcklos/p/12920299.html
Copyright © 2011-2022 走看看