Java核心逻辑第12章JDK新特性课件

上传人:re****.1 文档编号:587223962 上传时间:2024-09-05 格式:PPT 页数:41 大小:359.50KB
返回 下载 相关 举报
Java核心逻辑第12章JDK新特性课件_第1页
第1页 / 共41页
Java核心逻辑第12章JDK新特性课件_第2页
第2页 / 共41页
Java核心逻辑第12章JDK新特性课件_第3页
第3页 / 共41页
Java核心逻辑第12章JDK新特性课件_第4页
第4页 / 共41页
Java核心逻辑第12章JDK新特性课件_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《Java核心逻辑第12章JDK新特性课件》由会员分享,可在线阅读,更多相关《Java核心逻辑第12章JDK新特性课件(41页珍藏版)》请在金锄头文库上搜索。

1、第第12章章 JDK新特性新特性 回顾回顾l class对象对象l 获取类对象的方式获取类对象的方式l 反射包反射包(java.lang.reflect)l 反射的作用反射的作用 本章目标本章目标l静态导入静态导入l可变长参数可变长参数l格式化输入输出格式化输入输出l枚举枚举l注解注解lJDK6/JDK7新特性新特性 本章结构本章结构JDK新特性新特性JDK6新特性新特性JDK7新特性新特性二进制字面值二进制字面值脚本支持脚本支持JDK5新特性新特性访问访问javac的的api可变长参数可变长参数格式化输入格式化输入/输出输出枚举枚举注解注解静态导入静态导入 静态导入静态导入l通过静态导入可以

2、在使用一个类型静态成员的时候,不通过静态导入可以在使用一个类型静态成员的时候,不 用书写类名,直接使用静态成员即可用书写类名,直接使用静态成员即可l以前统一声明常量时,很多人选择在一个接口中声明许多以前统一声明常量时,很多人选择在一个接口中声明许多静态常量,接口的用途是约定实现类有什么功能,用来声静态常量,接口的用途是约定实现类有什么功能,用来声明常量显然不合理,现在可以统一在一个类中声明静态常明常量显然不合理,现在可以统一在一个类中声明静态常量,并且在需要的地方使用静态导入量,并且在需要的地方使用静态导入l注意:注意:静态导入会降低程序的可读性,不要过多使用!静态导入会降低程序的可读性,不要

3、过多使用! System.out.println(Math.PI);System.out.println(Math.abs(-1); 静态导入静态导入import static java.lang.Math.*;import static java.lang.System.*;public class TestStatic public static void main(String args) System.out.println(PI);System.out.println(abs(-1);out.println(PI); 可变长参数可变长参数l 可以使方法的参数个数可变可以使方法的参数个

4、数可变public static void print(String s) System.out.println(s);public static void main(String args) print();print(tom);print(tom,cat);public static void print(String. s) for (String string : s) System.out.println(string); 可变长参数可变长参数l 可变长参数其本质实际上就是数组,但比定义数组更加灵可变长参数其本质实际上就是数组,但比定义数组更加灵 活活public static vo

5、id print1(String s) public static void print(String. s) for (String ss : s) System.out.println(ss); 可变长参数可变长参数l 可以把可以把main函数改写成可变长参数函数改写成可变长参数 l 一个方法中最多有一个可变长参数一个方法中最多有一个可变长参数 l 可变长参数必须作为方法的最后一个参数可变长参数必须作为方法的最后一个参数public static void main(String. args) print();print(tom);print(tom, cat); 格式化的输入格式化的输入

6、输出输出l JDK5.0提供了新的输入输出语句提供了新的输入输出语句格式化输出语句格式化输出语句 System.out.printf()String的静态方法:的静态方法:static String format(String format, Object. args)可以用来生成一个字符串,这个方法的用法和可以用来生成一个字符串,这个方法的用法和printf一模一样,一模一样,printf显然在程序中毫无用途,显然在程序中毫无用途,String.format方方法才是非常实用的,尤其在拼装字符串时法才是非常实用的,尤其在拼装字符串时String name = 张三;int age = 20;

7、System.out.printf(有个学生叫%s,他的年龄是%d。n, name, age);/ 创建格式化字符串String msg = String.format(有个学生叫%s,他的年龄是%d。, name, age);System.out.println(msg); 格式化的输入格式化的输入输出输出l 提供了更为简单的从命令行获取输入的工具类提供了更为简单的从命令行获取输入的工具类java.util.Scanner 不要关闭不要关闭Scanner,如关闭了,则,如关闭了,则System.in也关闭了也关闭了当调用当调用nextInt()等方法时如果抛出异常等方法时如果抛出异常(Inp

8、utMismatchException),则这个),则这个Scanner对象不可以再继对象不可以再继续使用,必须重新创建一个。续使用,必须重新创建一个。Scanner input = new Scanner(System.in);int i = input.nextInt(); 枚举类型枚举类型l 一个类所创建的对象个数是固定的一个类所创建的对象个数是固定的l 枚举本质上还是类枚举本质上还是类l enum关键字关键字enum Season SPRING, SUMMER, AUTUMN, WINTERpublic class TestEnum public static void main(St

9、ring args) Season season = Season.SPRING; 枚举类型枚举类型l 在没有枚举类型前在没有枚举类型前 ,可以通过如下代码模拟枚举类型,可以通过如下代码模拟枚举类型public class TestSeason public static void main(String args) Season season = Season.SPRING;class Season public static final Season SPRING = new Season();public static final Season SUMMER = new Season()

10、;public static final Season AUTUMN = new Season();public static final Season WINTER = new Season();private Season() 枚举特点枚举特点l 枚举类型的父类枚举类型的父类 java.lang.Enum name()ordinal()public class TestEnum1 public static void main(String args) Season s = Season.SPRING;System.out.printl();/ SPRINGSystem.out.print

11、ln(s.ordinal();/ 0enum Season SPRING, SUMMER, AUTUMN, WINTER 枚举特点枚举特点l 枚举类型的父类枚举类型的父类 java.lang.Enum static T extends Enum T valueOf(Class enumType, String name) 极重要的一个静态方法,极重要的一个静态方法,valueOf,可以用字符串来找到对应枚举,可以用字符串来找到对应枚举对象。对象。public class TestEnum2 public static void main(String args) Season season =

12、 Enum.valueOf(Season.class, SPRING);System.out.printl(); 枚举特点枚举特点 values()public class TestEnum3 public static void main(String args) Season seasons = Season.values();for (Season season : seasons) System.out.println(name is + () + ,ordinal + season.ordinal(); 枚举特点枚举特点l 枚举类型可以定义属性,并提供相应的方法枚举类型可以定义属性,

13、并提供相应的方法enum Season SPRING, SUMMER, AUTUMN, WINTER;private String name;public String getName() return name;public void setName(String name) = name; 枚举特点枚举特点public class TestEnum public static void main(String args) Season s = Season.SPRING;s.setName(tomcat);System.out.println(s.getName(); 枚举特点枚举特点l

14、枚举类型有构造方法枚举类型有构造方法 但只能是私有的但只能是私有的 l 枚举类型可以显示提供构造方法枚举类型可以显示提供构造方法enum Season SPRING, SUMMER, AUTUMN, WINTER 枚举特点枚举特点enum Season SPRING(春天), SUMMER(夏天), AUTUMN(秋天), WINTER(冬天);private String name;Season(String name) = name;public String getName() return name;public void setName(String name) = name; 枚举

15、特点枚举特点l 枚举不能够继承枚举不能够继承l 枚举类型默认是枚举类型默认是final修饰符修饰,也是不能被别的类继承修饰符修饰,也是不能被别的类继承l 枚举可以提供抽象方法枚举可以提供抽象方法l枚举支持枚举支持switch case语句(语句(java7中字符串也支持)中字符串也支持)l枚举是枚举是绝对的单例绝对的单例,绝不会出现多个实例,即使反序列化,绝不会出现多个实例,即使反序列化都无法创建多个实例,用枚举来做单例非常简单直接且好都无法创建多个实例,用枚举来做单例非常简单直接且好用。用。 枚举特点枚举特点enum Operator ADD public double calculate(

16、double a, double b) return a+b; , SUBSTRACT public double calculate(double a, double b) return a-b; , MULTIPLY public double calculate(double a, double b) return a*b; , DIVIED/省略代码; public abstract double calculate(double a,double b); 枚举特点枚举特点public class TestEnum public static void main(String args

17、) Operator o = Operator.ADD;System.out.printllculate(1, 2); 注解注解(Annotation)l 注解的概念注解的概念 给程序员看的是注释(单行注释、多行注释、给程序员看的是注释(单行注释、多行注释、doc注释)注释) l 注解名注解名l JDK中提供的注解中提供的注解OverrideDeprecatedSupperessWarnings 注解注解l 覆盖覆盖toString()方法方法public class Worker private String name;public void m1() public String toStr

18、ing() return name; 注解注解l 使用注解后,编译器可以检查覆盖方法是否正确使用注解后,编译器可以检查覆盖方法是否正确public class Worker private String name;public void m1() Overridepublic String toStirng() return name; 注解注解l 注解的分类注解的分类标记注解标记注解单值注解单值注解多值多值/普通注解普通注解l 注解的父类注解的父类 java.lang.annotation.Annotationl 自定义注解自定义注解public interface 注解名注解名 publi

19、c interface Test 注解注解l 元注解元注解Target限定注解的使用目标enum ElementType TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE 注解注解l 元注解元注解Retention指明注解信息的保存时间指明注解信息的保存时间enum RetentionPolicySOURCE:注解信息只保存在源程序中,在类文件中不保存:注解信息只保存在源程序中,在类文件中不保存CLASS (Default):注解信息保存在类文件中,程序运行时:注解信息保存

20、在类文件中,程序运行时不能通过反射找到不能通过反射找到RUNTIME:注解保存在类文件中,程序运行时通过反射:注解保存在类文件中,程序运行时通过反射API可以找到可以找到 注解注解l 完整的注解定义完整的注解定义Target(value = ElementType.TYPE )Retention(value = RetentionPolicy.RUNTIME)interface First Firstpublic class TestAnnotation private String name;public void m1() 注解注解l 注解属性注解属性Target(value = Elem

21、entType.TYPE )Retention(value = RetentionPolicy.RUNTIME)interface First String value();First(test)public class TestAnnotation private String name;public void m1() 注解注解l 注解属性的类型共有注解属性的类型共有24种种基本类型基本类型, String, Class, enums, annotations, 以及它们的数组以及它们的数组 注解案例注解案例l 通过注解设计一个自动测试的工具通过注解设计一个自动测试的工具public cl

22、ass TestMethod Test(parameter = corejava)public void m1(String s1) System.out.println(method m1 + s1);public void m2(String s2) System.out.println(method m2 + s2); 注解案例注解案例l Test注解的设计注解的设计Target( ElementType.METHOD )Retention(RetentionPolicy.RUNTIME)public interface Test String parameter(); 注解案例注解案例

23、l 自动测试工具类的设计自动测试工具类的设计如何得知这个类拥有如何得知这个类拥有Test注解?注解?如何获得如何获得Test注解中的参数?注解中的参数?如何运行拥有注解的方法?如何运行拥有注解的方法? 注解案例注解案例public class TestAnnotation public static void main(String args) throws Exception / 获得反射需要的类对象Class c = TestMethod.class;TestMethod t = (TestMethod) c.newInstance();/ 获得所有的方法Method m = c.getD

24、eclaredMethods();for (Method mm : m) / 判断哪个方法拥有Test标注if (mm.isAnnotationPresent(Test.class) / 获得Test标注Test tt = mm.getAnnotation(Test.class);/ 获得Parameter属性的值String name = tt.parameter();mm.invoke(t, name); Java SE 6: 脚本支持脚本支持l为开发者提供了在同一应用中使用不同语言的能力为开发者提供了在同一应用中使用不同语言的能力l使用使用Java库扩展脚本语言库扩展脚本语言lSun的的

25、SDK中提供了中提供了JavaScript引擎引擎Mozila Rhino引擎引擎l引擎在中引擎在中l示例:示例:/ 创建脚本引擎管理器ScriptEngineManager engineManager = new ScriptEngineManager();/ 获得脚本引擎ScriptEngine engine = engineManager.getEngineByName(js);/ 执行脚本try / 注意,这是JavaScript的语法,字符串可以用单引号包围/ 数值型的字符串可以当作数值来运算engine.eval(println(123 * 2); catch (ScriptExc

26、eption e) e.printStackTrace(); Java SE 6: 访问编译器访问编译器l提供对编译器提供对编译器javac的访问,用于动态生成代码的访问,用于动态生成代码lJava工具或框架的开发者经常使用该功能工具或框架的开发者经常使用该功能 Java SE 7: 更好的整型字面值更好的整型字面值l二进制字面值二进制字面值int mask = 0b101001;long l = 0b11L;l数值的千分符表示数值的千分符表示long creditCardNumber = 1234_5678_9012_3456L;long socialSecurityNumber = 999_99_9999L;float pi = 3.14_15F;long hexBytes = 0xFF_EC_DE_5E;long hexWords = 0xCAFE_BABE;long maxLong = 0x7fff_ffff_ffff_ffffL;byte nybbles = 0b0010_0101;long bytes = 0b11010010_01101001_10010100_10010010; 概述概述l 在本章讨论了在本章讨论了:静态导入静态导入可变长参数可变长参数格式化输入输出格式化输入输出枚举枚举注解注解JDK6/JDK7新特性新特性

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号