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