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

Desktop desktop=Desktop.getDesktop();
//判断是否支持桌面
System.out.println(desktop.isDesktopSupported());
//打开一个网址
desktop.browse(new URI("http://www.baidu.com"));
//打开一个文件
desktop.open(new File("D:\\hello.txt"));
//编辑一个文件
desktop.edit(new File("D:\\ticket.txt"));
//发邮件
desktop.mail(new URI("mailto:10000@qq.com"));
//打印文件
desktop.print(new File("D:\\ticket.txt"));

SystemTray
表示桌面的系统托盘

SystemTray ad=SystemTray.getSystemTray();
//添加图标
ad.add(icon);
//添加菜单
PopupMenu menu=new PopupMenu();
MenuItem item=new MenuItem("苹果专区");
menu.add(item);
//添加分割线
menu.addSeparator();
//设置提示信息
TrayIcon icon=new TrayIcon(read);
icon.setToolTip("京东618");
icon.setPopupMenu(menu);
//添加鼠标事件
icon.addMouseListener(new MouseListener();

Console类
用来代替Scanner
一般是为了密码安全,让我们的输入更加安全

package com.oracle.core;
import java.io.Console;
import java.util.Scanner;public class Console_study {private static Scanner scanner=new Scanner(System.in);public static void main(String[] args) {Console console=System.console();System.out.println("请输入您的密码:");char[] readPassword = console.readPassword();System.out.println("您的密码是"+new String(readPassword));}
}

Console类不能在非命令环境下使用
运行方法:
在bin目录下按住shift,右键在控制台中打开
输入java com.oracle.core.Console_study就可以运行此java文件

Compiler API
动态编译

 private static Scanner scanner=new Scanner(System.in);public static void main(String[] args) throws IOException {System.out.println("请输入java代码");//输入一段文本String input=scanner.nextLine();//将你的文本保存为*.java的文件OutputStream out=new FileOutputStream(new File("d:\\classes\\Hello.java"));byte[] bytes = input.getBytes();out.write(bytes);out.close();JavaCompiler javac=ToolProvider.getSystemJavaCompiler();javac.run(null,null,null,"d:\classes\\Hello.java");}

执行后就会生成一个Hello.class文件
运行这个文件:

Class<?> forName = Class.forName("com.oracle.core.XstreamStudy");
System.out.println(forName);
File  file=new File("d:\\classes");URL[] urls=new URL[]{file.toURI().toURL()};//URLClassLoader 将这个类路径加入进来URLClassLoader  cl=new URLClassLoader(urls);Class clz=Class.forName("Hello",true, cl);Object hello=clz.newInstance();BeanInfo beanInfo = Introspector.getBeanInfo(clz);MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();for(MethodDescriptor methoddes:methodDescriptors){if(methoddes.getName().equals("main")){Method method = methoddes.getMethod();System.out.println(method.getName());     System.out.println(method.getReturnType());System.out.println(method.getParameterCount());Type[] genericParameterTypes = method.getGenericParameterTypes();for(Type t:genericParameterTypes){System.out.println(t.getTypeName());System.out.println(t.getClass());}method.invoke(hello,(Object)new String[]{"a", "b", "c"});}}

把一个类、对象、字符串变成class类的过程叫做反射
反射很像内省,内省是在反射的基础上去做的

//从一个类文件到Class的过程
Class clz= Refct.class;
//从一个对象到Class的过程
Refct r=new Refct();
Class  clz2 = r.getClass();

反射的目的是为了 获取该类的所有的信息
ClassLoader是类加载器,一旦程序运行,首先new的第一个对象是ClassLoader
由ClassLoader将类文件加载到内存中,ClassLoader自动从项目的bin目录开始找这个类

//从字符串到Class的过程
Class.forName("com.oracle.model.Person");

有的时候可能类路径不在这里

URL url1=new URL("file:/d:/classes/");
URL[]address=new URL[]{url1};
URLClassLoader ClassLoad=new URLClassLoader(address);
Class clz3=Class.forName("com.oracle.model.Person",true,ClassLoad);

先从bin目录去找,bin目录如果找不到,就从url里找

//1.获得类的名称
System.out.println(clz3.getName());
//剖析这个类
//2.获得这个类的接口Class[] interfaces = clz3.getInterfaces();for(Class iclz:interfaces){System.out.println(iclz.getName());}
//获得带泛型的接口Type[] genericInterfaces = clz3.getGenericInterfaces();for(Type t:genericInterfaces){ParameterizedType p=(ParameterizedType)t;System.out.println(p.getActualTypeArguments()[0]);}
//判断类是否继承了某个类  单继承Class superclass = clz3.getSuperclass(); //父类System.out.println(superclass);//获取类的父类的泛型对象Generic 直接System.out.println(clz3.getGenericSuperclass()); //父类+泛型Type[] actualTypeArguments = ((ParameterizedType)clz3.getGenericSuperclass()).getActualTypeArguments();System.out.println(actualTypeArguments[0]);//3.类的属性有哪些//getFields 获取我自己和父类所有的属性 非public 无法使用//getDeclaredFields 获取自己的属性 不管什么权限都可以使用Field[] fields = clz3.getFields(); //获取我所有的属性 包含从父类继承的Field[] gFields= clz3.getDeclaredFields(); //获取我自己的属性Object newInstance = clz3.newInstance();//实例化之后才能去设置值for(Field field:gFields){//field.setAccessible(false);//System.out.println(field.get(newInstance));field.setAccessible(true); //把他的私有权限放开 private没有用处System.out.println(field.getName());if(field.getName().equals("pid")){field.setInt(newInstance, 1);}else if(field.getName().equals("pname")){field.set(newInstance,"张三");}else if(field.getName().equals("sex")){field.setChar(newInstance,'男');}}System.out.println(newInstance);//4.类的方法有哪些Method[] methodss=clz3.getMethods(); //获取所有的方法  非public无法使用for(Method method:methodss){System.out.println(method.getName());}System.out.println("我自己的方法<><<><>");Method[]  methods=clz3.getDeclaredMethods();//获取我自己的方法 不管什么类型都可以使用for(Method method:methods){System.out.println(method.getName());//可以去执行该方法if(method.getName().contains("get")){//我没有参数Object invoke = method.invoke(newInstance,null);System.out.println(invoke);}}//反射的构造器Constructor[] constructors = clz3.getConstructors();System.out.println(constructors.length);for(Constructor cus:constructors){System.out.println(cus.newInstance(null));}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}

Http Server API
内置服务器
每一个服务器都会有一个默认的端口
tomcat:8080
iis:80
服务器端:

public class HttpServerStudy {public static void main(String[] args) {//设置端口InetSocketAddress socket=new InetSocketAddress(1997);try {HttpServer server=HttpServer.create(socket,10);server.createContext("/login",new LoginHandler());server.setExecutor(null);server.start();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
}
}

客户端:

public class LoginHandler implements HttpHandler {public void handle(HttpExchange ex) throws IOException {InetSocketAddress remoteAddress = ex.getRemoteAddress(); //对方的IP地址//请求头Headers requestHeaders = ex.getRequestHeaders();Set<Entry<String, List<String>>> entrySet = requestHeaders.entrySet();Iterator<Entry<String, List<String>>> iterator = entrySet.iterator(); while(iterator.hasNext()){Entry<String, List<String>> next = iterator.next();System.out.println(next.getKey());System.out.println(next.getValue());}//请求体InputStream requestBody = ex.getRequestBody();byte[] b=new byte[requestBody.available()];requestBody.read(b);InputStream in=new FileInputStream(new File("d:\\ticket.txt"));byte[] bs=new byte[in.available()];in.read(bs);ex.getResponseHeaders().add("Content-Type","text/plain");ex.sendResponseHeaders(200, 0);OutputStream os = ex.getResponseBody();// System.out.println(os);os.write(bs);os.close();}}

java jdk1.6的新特性 DeskTop SystemTray Console类 Compiler API Http Server API相关推荐

  1. JAVA JDK1.5-1.9新特性

    1.5 1.自动装箱与拆箱: 2.枚举(常用来设计单例模式) 3.静态导入 4.可变参数 5.内省 1.6 1.Web服务元数据 2.脚本语言支持 3.JTable的排序和过滤 4.更简单,更强大的J ...

  2. java for each 的源_Java JDK1.5的新特性之for-each循环的底层原理

    今天给大家分享一下for-each循环的底层原理,故事还得从字节码反汇编和反编译说起... 首先看一下Java JDK1.5的新特性 泛型: ... for-each. ... 自动拆箱和装箱功能 . ...

  3. JDK1.5 与 JDK1.6的新特性

    JDK1.5 与 JDK1.6的新特性 收藏  一.JDK1.5的新特性 了解Java语言的特色及相关术语 泛型:泛型.通配符.有限制通配符.泛型方法 加强循环 自动装箱/拆箱 枚举 可变参数 静态引 ...

  4. java 1.7的新特性_[Java]  JDK 1.7版本的 新特性

    在网上看到一些jdk1.7的新特性,现将我觉得比较实用的记录于下: (1)switch中可以使用字串了 String s = "test"; switch (s) { case & ...

  5. jdk1.7的新特性

    jdk1.7的新特性: 1,switch中可以使用字串 Java代码 String s = "test"; switch (s) { case "test" : ...

  6. JDK1.8的新特性

    JDK1.8的新特性 小飞棍儿来喽!(没来) 1. 前言 JDK1.8的特性已经不能称之为新特性了,毕竟很多厂都开始用17了,不会的赶快学起来. Jdk8这个版本包含语言.编译器.库.工具和JVM等方 ...

  7. 【JAVA拾遗】Java8新特性合辑

    [JAVA拾遗]Java8新特性合辑 文章目录 [JAVA拾遗]Java8新特性合辑 0. 逼逼 [--/--]126 Lambda Expressions & Virtual Extensi ...

  8. 详解Java 8十大新特性

    前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java ...

  9. Java系列 – 用Java8新特性进行Java开发太爽了(续)

    本人博客文章网址:https://www.peretang.com/using-java8s-new-features-to-coding-is-awesome-2/ 前言 上周, 我们谈论了关于Ja ...

最新文章

  1. InsightFace笔记
  2. CNZZ数据专家使用方法?
  3. 手机开启apache_微信否认“年终奖人均280万”;MySQL 8.0.14 稳定版发布;支付宝集五福昨开启,一天29万人集齐......
  4. WPF里面的常用笔刷
  5. gwt 嵌入html_GWT和HTML5画布演示
  6. 个人对于MySQL的理解_面试官:谈谈你对Mysql的MVCC的理解?
  7. 特斯拉中国公开统一维保价格
  8. linux常用命令(4)——系统管理2
  9. 通过命令管理Windows7桌面防火墙
  10. C++引用计数(reference counting)技术简介(3)
  11. 【Go】优雅的读取http请求或响应的数据-续
  12. html+css笔记1
  13. 业余草教你简单 4 步搞定 SpringBoot 整合 Shiro!
  14. python itchat教程_Python itchat.run方法代码示例
  15. 树莓派简单入门(基本小案例)
  16. mysql datesub interval_Mysql之INTERVAL与DATE_SUB与EXTRACT函数的使用
  17. (经典)tcp粘包分析
  18. 成都速领科技:店铺数据要看哪些
  19. 如何让电脑带双显示屏,显示不同的内容
  20. 脚手架(一)——脚手架开发入门

热门文章

  1. 华测测绘仪X5安装问题笔记
  2. x64+dbgview 中如何显示kdPrint的几种方法总结
  3. 常用好用的远程连接工具分享
  4. excel学习-数据透视表(自动分组+手动分组+制作动态数据源)
  5. mysql sql注入例子_SQL注入的实际案例
  6. 计算机视觉知识点整理(上) 基础篇(持续更新)
  7. 6.25恒指早盘思路|市场开始观望 恒指短期或高位整固
  8. 习题7-10 守卫棋盘(Guarding the Chessboard,UVa11214)
  9. 安卓移动应用开发考题_Android移动应用开发习题答案
  10. Win10没有以太网图标如何找回?以太网适配器不见了怎么恢复?