Java SE 6特性 Sun Microsystems.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

1 Java 语言程序设计 计算机系 鲍金玲. 2 引子 甲骨文 甲骨文是全球最大的信息管理软件及服务供应商,成立于 1977 年,公司总部 设在美国加利福尼亚州的红木城( Redwood Shores ),全球员工达 名, 包括 名开发人员、 7500 多名技术支持人员和.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
第一章 Java 程序设计技术 概述  什么是 Java 语言  一个简单的 Java 程序  程序的编译和运行  常见错误  使用 Java 核心 API 文档.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
Java 程序设计(第二版) 普通高等教育 “ 十一五 ” 国家级规划教材 辛运帷等 编著 徐小平 主讲.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《 Java开发环境配置》 主讲人:耿力.
Java程序设计教程 第一讲 Java概述.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
面向对象的程序设计(一).
北京科技大学天津学院 信息工程系 面 向 对 象 程 序 设 计 第1讲 Java初探 主讲:于静.
MVC Servlet与MVC设计模式.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
程設一.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
第 13 章 套件 (Packages).
第1章 java简介及环境搭建 第1章 Java简介及开发环境搭建.
JAVA程序设计 (03) JAVA Programming
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
Ch08 巢狀類別 物件導向程式設計(II).
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
J2EE 培训课程.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
例外處理(Exception Handling)
Java语言程序设计 第七部分 多线程.
Java基础 JavaSE异常.
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
Classes Lecturer: 曾學文.
2018/11/23 面向对象与多线程综合实验-数据库操作 教师:段鹏飞.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
Java语言程序设计 第五部分 Java异常处理.
Java程序设计 第9章 继承和多态.
2018/12/7 Java语言程序设计 教师:段鹏飞.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
開發Java程式語言的工具 JDK.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 基于CORBA的分布式平台 苗启广 计算机学院.
Interfaces and Packages
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
Java程序设计 第17章 异常和断言.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

Java SE 6特性 Sun Microsystems

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

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

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

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;

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;

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

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

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

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

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

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

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

例程——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')"); }

例程——从文件运行脚本 // 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”));

例程——脚本变量 // 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())”);

例程——调用脚本方法 // 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!!"} );

例程——脚本实现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();

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); }

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); }

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

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

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);

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

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

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();

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

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

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

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

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]

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>

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

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

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

访问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"));

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); }

资源和链接 http://jdk.dev.java.net http://jcp.org http://java.sun.com/

Java SE 6特性 Sun Microsystems