Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java SE 6特性 Sun Microsystems.

Similar presentations


Presentation on theme: "Java SE 6特性 Sun Microsystems."— Presentation transcript:

1 Java SE 6特性 Sun Microsystems

2 升级到Java SE 6的十大理由 简单的Web Service开发 脚本语言的集成 JDBC 4.0和内嵌Java DB
新的桌面开发API JMX扩展和一系列管理监控工具 访问Javac编译器的编程接口 Annotation处理器插件接口 新的安装下载界面,更好的Native Look&Feel支持

3 升级到Java SE 6的十大理由(续) 提供PKI, Java GSS, Kerberos, LDAP服务 支持 更好的性能和稳定性

4 Web Service开发 JAX-WS 2.0 JAXB 2.0 SAAJ 3.0

5 Web Service开发 package hello; import javax.jws.WebService; @WebService
public class CircleFunctions { public double getArea(double radius) { return java.lang.Math.PI * (r * r); } public double getCircumference(double radius) { return 2 * java.lang.Math.PI * r;

6 Web Service开发 package hello; import javax.jws.WebService; @WebService
public class CircleFunctions { public double getArea(double radius) { return java.lang.Math.PI * (r * r); } public double getCircumference(double radius) { return 2 * java.lang.Math.PI * r;

7 Web Service开发 生成相关Stub等文件 wsgen工具 部署创建的Web Service
import javax.xml.ws.Endpoint; public static void main(String[] args) { Endpoint.publish( " new CircleFunctions()); }

8 脚本语言的集成 Java不仅是一种语言,同时是一个平台 VM 核心Java类库 对其它语言的支持JSR-223 插件式的脚本语言引擎
javax.script包

9 脚本集成API 脚本引擎 ScriptContext, Bindings ScriptEngineFactory
ScriptEngineManager

10 脚本引擎 ScriptEngine接口(必须) 运行脚本文件eval()方法 将Java对象映射到脚本变量(put()方法)
Invocable接口(可选) 调用脚本方法/函数 通过脚本方法实现Java接口 Compilable接口(可选) 把脚本编译成为中间结果,多次执行

11 ScriptContext, Bindings
Binding是Map<String, Object>的子类型 引擎范围的Binding 脚本变量=>宿主程序对象 全局Binding 在多个引擎间共享

12 ScriptEngineFactory 与ScriptEngine一一对应 Factory方法:getScriptEngine() 其它方法
脚本文件扩展名 脚本引擎版本 ......

13 ScriptEngineManager 实体类 脚本引擎查找 Jar文件的META-INF/services机制 文件后缀名 脚本语言名称
指定类型装载器的查找 绑定全局Binding

14 例程——HelloWorld import javax.script.*; public class Main {
public static void main(String[] args) throws ScriptException { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager(); // create JavaScript engine ScriptEngine engine=factory.getEngineByName("JavaScript"); // evaluate JavaScript code from String engine.eval("print('hello world')"); }

15 例程——从文件运行脚本 // create script engine manager
ScriptEngineManager manager = new ScriptEngineManager(); // create JavaScript engine ScriptEngine engine = manager.getEngineByName(“JavaScript”); // evaluate a file (or any java.io.Reader) engine.eval(new FileReader(“test.js”));

16 例程——脚本变量 // create script engine manager
ScriptEngineManager manager = new ScriptEngineManager(); // create JavaScript engine ScriptEngine engine = manager.getEngineByName(“JavaScript”); File f = new File(“test.txt”); // expose File object as variable to script engine.put(“file”, f); // evaluate a script string // script accesses “file” variable and calls method on it engine.eval(“print(file.getAbsolutePath())”);

17 例程——调用脚本方法 // JavaScript code in a String
String script = "function hello(name) { print('Hello, ' + name); }"; // evaluate script engine.eval(script); // JavaScript engine implements Invocable interface Invocable inv = (Invocable) engine; // invoke a global function called “hello” inv.invoke("hello", new Object[] {"Scripting!!"} );

18 例程——脚本实现Java接口 // JavaScript code in a String
String script = "function run() { print('run called\n'); }"; // evaluate script engine.eval(script); // JavaScript engine implements Invocable interface Invocable inv = (Invocable) engine; Runnable r = inv.getInterface(Runnable.class); r.run();

19 JDBC 4.0和内嵌JavaDB private Connection connect(String user, String passwd) throws SQLException { String url = "jdbc:mysql://javadb.sfbay/jplan"; String driver = "com.mysql.jdbc.Driver"; try { Class.forName(driver); return DriverManager.getConnection(url, user, passwd); } catch (ClassNotFoundException x) { throw new SQLException("Can't load Driver " + x); }

20 JDBC 4.0和内嵌JavaDB private Connection connect(String user, String passwd) throws SQLException { String url = "jdbc:mysql://javadb.sfbay/jplan"; String driver = "com.mysql.jdbc.Driver"; try { Class.forName(driver); return DriverManager.getConnection(url, user, passwd); } catch (ClassNotFoundException x) { throw new SQLException("Can't load Driver " + x); }

21 新的桌面API Splash屏幕 JTable排序过滤 SwingWorker Desktop API

22 Splash屏幕 命令行参数 Java -splash:hello.png HelloWorld Jar文件中参数设置
SplashScreen-Image: MyImage.png 在程序中通过SplashScreen类访问图形上下 文 SplashScreen.getSplashScreen() Graphics2D createGraphics()

23 JTable排序过滤 根据TableModel创建Sorter,然后将Sorter设置 到Table中 //create JTable
JTable table = new Jtable(model); //create RowSorter RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); //set Sorter table.setRowSorter(sorter);

24 JTable排序过滤 通过向TableRowSorter设置RowFilter来实现对 于JTable和JList的过滤 andFilter
orFilter dateFilter notFilter numberFilter regexFilter

25 SwingWorker Swing的事件分派线程负责所有事件的调度 和响应 费时的工作应该放在子线程中完成而不阻塞 事件分派
doInBackground():后台处理函数,负责 处理较为复杂的计算 FirePropertyChange():通知监听的线程 状态变化 execute():从Worker线程上启动任务

26 SwingWorker final JLabel label;
class MeaningOfLifeFinder extends SwingWorker<String, Object> { @Override public String doInBackground() { return findTheMeaningOfLife(); } protected void done() { try { label.setText(get()); } catch (Exception ignore) { (new MeaningOfLifeFinder()).execute();

27 Desktop API 在java程序中启动系统本地的应用程序 浏览器,Email客户端,打印 //get Desktop instance
Desktop desktop = Desktop.getDesktop(); //launch system browser with URI desktop.browse(new URI(" //launch mail client with an address filled //in desktop.mail(new

28 为应用程序创建TrayIcon TrayIcon创建时的三个参数 TrayIcon icon = new TrayIcon(img, "My App", popmenu); 图标 ToolTip显示 弹出菜单 创建一个ActionListener icon.addActionListener(myListener); 将创建的TrayIcon加入到系统的Tray中 SystemTray tray = SystemTray.getSystemTray(); tray.add(icon);

29 JMX扩展和检测管理工具 MXBean CompositeData对于复杂属性的自动包装 Descriptors 关于得到各属性的附加信息
各种工具用于监测管理JVM和应用程序的运 行状况 基于JMX: Jconsole 基于JVMTI: jmp,hotspot provider

30 JConsole 通用的JMX客户端 连接本地和远程的JVM实例 监视和管理系统信息 内存使用情况 线程运行情况,死锁检测 类的装载和卸载
系统中各种MBean和MXBean提供的属性和 操作

31 Jps, Jinfo, Jstat JPS:列出所有Java进程和ID $jps -l | -m $jps -v | -V
Jinfo: 得到或改变某一个Java进程运行参 数和系统属性(在Windows上功能有限) $jps -flags [jid] $jps -sysprops [jid] Jstat: 统计JVM运行过程中的各种信息 $jstat -gcutil [jid]

32 HPROF – Heap Profiler 作为JVMTI的一个演示程序,源代码在 <JAVA_HOME>/demo/jvmti/hprof下 观测Heap内存分配 $java -agentlib:hprof=heap=sites <Program> $java -agentlib:hprof=heap=dump <Program> 观测CPU时间 $java -agentlib:hprof=cpu=samples <Program> $java -agentlib:hprof=cpu=times <Program>

33 Jmap 从运行的JVM进程,或者Core文件中提取内 存使用的统计信息 $jmap -heap <jid>
$jmap -histo <jid> $jmap -permstat <jid> $jmap -dump:format=b,file=filename <jid>

34 Jhat & OQL 将heap中的对象通过Web的形式表现出来并 且提供各种查询手段 对于Heap上各个对象实例的统计显示
显示活动对象实例到root对象的路径 现实Pending Finalization对象 OQL(Object Query Language) 定制查询条件 语法类似于JavaScript

35 Dtrace hotspot Provider提供各种观测JVM运行的 探针 Vm生命周期 线程生命周期 类装载 垃圾回收 方法编译
hotspot_jni Provider提供观测JNI代码的 探针

36 访问Javac编译器的编程接口 import javax.compiler.*;
Compiler c = Compiler.newInstance(); c.setOutputDirectory(new File("build/classes")); c.setSourcePath(new File("src"), new File("gensrc")); c.setOption("Xlint", "all"); c.run(new File("src/Main.java"));

37 Annotation处理器接口 public class ToDoProcessor
implements AnnotationProcessor { ... public void process() { AnnotationTypeDeclaration toDoDecl = atds.iterator().next(); for(Declaration decl : env.getDeclarationsAnnotatedWith(toDoDecl)) { System.out.format("%-16s %s%n", decl.toString(); decl.getAnnotation(ToDo.Class); }

38 资源和链接

39 Java SE 6特性 Sun Microsystems


Download ppt "Java SE 6特性 Sun Microsystems."

Similar presentations


Ads by Google