java jdk1.6的新特性 DeskTop SystemTray Console类 Compiler API Http Server API
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相关推荐
- JAVA JDK1.5-1.9新特性
1.5 1.自动装箱与拆箱: 2.枚举(常用来设计单例模式) 3.静态导入 4.可变参数 5.内省 1.6 1.Web服务元数据 2.脚本语言支持 3.JTable的排序和过滤 4.更简单,更强大的J ...
- java for each 的源_Java JDK1.5的新特性之for-each循环的底层原理
今天给大家分享一下for-each循环的底层原理,故事还得从字节码反汇编和反编译说起... 首先看一下Java JDK1.5的新特性 泛型: ... for-each. ... 自动拆箱和装箱功能 . ...
- JDK1.5 与 JDK1.6的新特性
JDK1.5 与 JDK1.6的新特性 收藏 一.JDK1.5的新特性 了解Java语言的特色及相关术语 泛型:泛型.通配符.有限制通配符.泛型方法 加强循环 自动装箱/拆箱 枚举 可变参数 静态引 ...
- java 1.7的新特性_[Java] JDK 1.7版本的 新特性
在网上看到一些jdk1.7的新特性,现将我觉得比较实用的记录于下: (1)switch中可以使用字串了 String s = "test"; switch (s) { case & ...
- jdk1.7的新特性
jdk1.7的新特性: 1,switch中可以使用字串 Java代码 String s = "test"; switch (s) { case "test" : ...
- JDK1.8的新特性
JDK1.8的新特性 小飞棍儿来喽!(没来) 1. 前言 JDK1.8的特性已经不能称之为新特性了,毕竟很多厂都开始用17了,不会的赶快学起来. Jdk8这个版本包含语言.编译器.库.工具和JVM等方 ...
- 【JAVA拾遗】Java8新特性合辑
[JAVA拾遗]Java8新特性合辑 文章目录 [JAVA拾遗]Java8新特性合辑 0. 逼逼 [--/--]126 Lambda Expressions & Virtual Extensi ...
- 详解Java 8十大新特性
前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java ...
- Java系列 – 用Java8新特性进行Java开发太爽了(续)
本人博客文章网址:https://www.peretang.com/using-java8s-new-features-to-coding-is-awesome-2/ 前言 上周, 我们谈论了关于Ja ...
最新文章
- InsightFace笔记
- CNZZ数据专家使用方法?
- 手机开启apache_微信否认“年终奖人均280万”;MySQL 8.0.14 稳定版发布;支付宝集五福昨开启,一天29万人集齐......
- WPF里面的常用笔刷
- gwt 嵌入html_GWT和HTML5画布演示
- 个人对于MySQL的理解_面试官:谈谈你对Mysql的MVCC的理解?
- 特斯拉中国公开统一维保价格
- linux常用命令(4)——系统管理2
- 通过命令管理Windows7桌面防火墙
- C++引用计数(reference counting)技术简介(3)
- 【Go】优雅的读取http请求或响应的数据-续
- html+css笔记1
- 业余草教你简单 4 步搞定 SpringBoot 整合 Shiro!
- python itchat教程_Python itchat.run方法代码示例
- 树莓派简单入门(基本小案例)
- mysql datesub interval_Mysql之INTERVAL与DATE_SUB与EXTRACT函数的使用
- (经典)tcp粘包分析
- 成都速领科技:店铺数据要看哪些
- 如何让电脑带双显示屏,显示不同的内容
- 脚手架(一)——脚手架开发入门
热门文章
- 华测测绘仪X5安装问题笔记
- x64+dbgview 中如何显示kdPrint的几种方法总结
- 常用好用的远程连接工具分享
- excel学习-数据透视表(自动分组+手动分组+制作动态数据源)
- mysql sql注入例子_SQL注入的实际案例
- 计算机视觉知识点整理(上) 基础篇(持续更新)
- 6.25恒指早盘思路|市场开始观望 恒指短期或高位整固
- 习题7-10 守卫棋盘(Guarding the Chessboard,UVa11214)
- 安卓移动应用开发考题_Android移动应用开发习题答案
- Win10没有以太网图标如何找回?以太网适配器不见了怎么恢复?