JavaSE加强

上传人:lcm****801 文档编号:89280618 上传时间:2019-05-22 格式:PDF 页数:32 大小:181.73KB
返回 下载 相关 举报
JavaSE加强_第1页
第1页 / 共32页
JavaSE加强_第2页
第2页 / 共32页
JavaSE加强_第3页
第3页 / 共32页
JavaSE加强_第4页
第4页 / 共32页
JavaSE加强_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《JavaSE加强》由会员分享,可在线阅读,更多相关《JavaSE加强(32页珍藏版)》请在金锄头文库上搜索。

1、Java SE加强Java SE加强 赖家才 Eclipse的使用 ?工作空间(workspace)、工程(project) ?在eclipse下Java程序的编写和运行,及java运行环境 的配置。 ?快捷键的配置,常用快捷键: 内容提示:Alt + / 快速修复:Ctrl + 1 导包:Ctrl + shift + O 向前向后:Alt + 方向键 添加注释 Ctrl+Shift+/ 除去注释 Ctrl+Shift+ ?程序的调试和运行 F5(跳入) F6(跳过) F7(跳出) JDK 5.0 新特性 ?JDK5中新增了很多新的java特性,利用这些 新语法可以帮助开发人员编写出更加高

2、效、清 晰、安全的代码。 静态导入 自动装箱/拆箱 增强for循环 可变参数 枚举 泛型 标注 Annotation 静态导入静态导入 ?JDK 1.5 增加的静态导入语法用于导入类的某 个静态属性或方法。使用静态导入可以简化程 序对类静态属性和方法的调用。 ?语法: Import static 包名.类名.静态属性|静态方法|* ?例如: import static java.lang.System.out; import static java.lang.Math.*; 自动装箱/拆箱 auto-inbox auto- outbox 自动装箱/拆箱 auto-inbox auto- o

3、utbox ?两种类型: ?Primitive type: int,float,boolean,double,byte ?Reference type:Integer,Float,Double,String ?JDK5.0的语法允许开发人员把一个基本数据类型直接赋给对应 的包装类对象, 或者赋给 Object 类型的变量,这个过程称之为自 动装箱。 Integer i=100; auto-inbox: translate a primitive type into its corresponding wrapper ?自动拆箱与自动装箱与之相反,即把包装类对象直接赋给一个对 应的基本类型变量。

4、 ?典型应用: List list = new ArrayList(); list.add(1); int j = (Integer)list.get(0); 拆箱的前提是包装类型转变为基本类型。 增强for循环 ?引入增强for循环的原因:在JDK5以前的版本中,遍 历数组或集合中的元素,需先获得数组的长度或集合 的迭代器(Iterator),比较麻烦! ?因此JDK5中定义了一种新的语法增强for循环, 以简化此类操作。增强for循环只能用在数组数组或实现实现 Iterator接口接口的集合类上 ?语法格式: for(元素类型 变量:需迭代的数组或集合) 不对需要迭代数组或集合进行为空(

5、null)判断 增强for循环 ?使用增强for循环的几个注意事项(以下程序的输出结果?) int arr = new int5; for(int num : arr) num = 1; System.out.println(arr0); List list = new ArrayList(); list.add(“xxx“); for(String str : list) str = “yyy“; System.out.println(list.get(0); 取Map数据方法: Map map = new HashMap(); for(Object e : map.entrySet()

6、 Map.Entry me = (Map.Entry)e; System.out.println(me.getKey() + “:“ + me.getValue(); Map.Entry是Map中的内部声明的接口 ?使用增强for循环注意的问题,增强for循环 只适合取数据,不要用它赋值 长度可变的参数 ?问题:有一个用户名数组(字符串数组),需要增加一个用户名到数组中。 Arrays.asList array-list List.toArray list-array ?测试JDK中具有可变参数的类Arrays.asList()方法。分别传多个参、传数组,传数组 又传参的情况。 注意:传入基

7、本数据类型数组的问题。 ?从JDK 5开始, Java 允许为方法定义长度可变的参数。语法: public void foo(int args) ?意义:减少了重载方法个数 ?注意事项: 调用可变参数的方法时, 编译器编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法 体中以数组数组的形式访问可变参数 可变参数只能处于参数列表的最后 一个方法最多只能有一个长度可变的参数 可以操作length属性 匹配过程:精确-模糊 枚举类 ?为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意不能是任意的, 而必须是某些可能的取值,比如性别,学历,月份, 此类问题在JDK5以前

8、采用自定义带有枚举功能的类 解决,Java5以后可以直接使用枚举予以解决。 (从方法的开发者角度) 防止用户使用非法的值(只能从给定值选择) (从用户的角度) ?JDK 5新增的 enum 关键字用于定义一个枚举类。 枚举类 ?枚举类具有如下特性: 枚举类也是一种特殊形式的Java类。 Java所有的枚举都是java.lang.Enum子类 枚举类中声明的每一个枚举值代表枚举类的一个实例对象枚举类中声明的每一个枚举值代表枚举类的一个实例对象。 instanceof 枚举值使用,隔开,枚举与方法使用;隔开。 枚举值的声明实际上是在调用构造方法。 与java中的普通类一样,在声明枚举类时,也可以

9、声明属性、方法和构造函 数,枚举值必须放在前面 可以重载构造方法,但枚举类的构造函数必须为私有必须为私有的,构造方法在声明枚举 值时使用,外部不能调用。 枚举类可以实现接口。 JDK5中扩展了switch语句,它除了可以接收int, byte, char, short外,还可以接 收一个枚举枚举类型。 使用swtich时,case 中的值不能带上枚举的类名,因为case就是该枚举类型的 实例枚举 若枚举类只有一个枚举值,则可以当作单态(singleton)设计模式使用。 ?可在枚举对象中单独定义方法,一般都是 覆盖枚举类型中的方法 ?每一个枚举值都有实例化的过程,调用枚 举类型的私有构造方法

10、 Male gender1 gender2 枚举类 ?Java中声明的枚举类,均是java.lang.Enum类的子 类,它继承了Enum类的所有方法。常用方法: name():返回枚举常量的名字 ordinal():返回枚举常量声明时的下标(从0开始) valueof(Class enumClass, String name) values() 此方法虽然在JDK文档中查找不到,但每个枚举类 都具有该方法,它遍历枚举类的所有枚举值非常方便。 for(Gender gender:Gender.values() String name = gender.name(); int ordinal

11、 = gender.ordinal(); System.out.println(name+“ “+ordinal); 如何判别某个类型是否为枚举类型?Class.isEnum ?练习:请编写一个关于星期几的枚举WeekDay,要求: 枚举值:Mon、Tue 、Wed 、Thu 、 Fri 、Sat 、Sun 该枚举要有一个方法,调用该方法返回中文格式的 星期。 反射什么Class类反射什么Class类 ?Class类用于表示.class文件,画图演示一个对象的创建过程。Class 对象代表运行中java程序的类和接口,包括类、接口、enum、数组 、基本类型、void。由虚拟机加载时构建。

12、 ?如何得到某个class文件对应的Class对象。 类名.class class看做是运算 对象.getClass() 从基类Object继承 Class.forName(“类全名”) Class.forName(“com.javaabc.Person”); 查找或者加载对应的字节码。 这三种方式,JVM都会把相应class文件装载到一个class对象中(只装载一次) 创建类的实例:Class.newInstance方法 ?数组类型的Class实例对象 Class.isArray() ?总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int, void 反射反射 ?反

13、射就是把Java类中的各种成分映射成一个一个的java对象。例 如,一个类有:成员变量Field,普通方法Method,构造方法 Constructor,包Package等等信息,利用反射技术可以对一个类 进行解剖,把各个组成部分映射成一个个对象。 ?掌握反射技术的要点在于: 如何从一个class中反射出各个组成部分。 如何使用反射出来的对象。 Constructor类Constructor类 ?Constructor类类代表某个类中的一个构造方法 ?找到构造方法-调用构造方法 ?得到某个类所有的构造方法: 例子:Constructor constructors= Class.forName

14、(“java.lang.String“).getConstructors(); ?得到某一个构造方法: 例子:Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class); /获得方法时要用到类型 得到指定的构造方法:使用参数列表。 ?创建实例对象(调用构造方法): 通常方式:String str = new String(new StringBuffer(“abc“); 反射方式: String str = (String)constructor.newInstan

15、ce(new StringBuffer(“abc“); ?Class.newInstance()方法: 例子:String obj = (String)Class.forName(“java.lang.String“).newInstance(); 该方法内部先得到默认的无参构造方法,然后用该构造方法创建实例对象。 内省beanutils工具包 ?Apache组织开发了一套用于操作JavaBean的API ,这套API考虑到了很多实际开发中的应用场景, 因此在实际开发中很多程序员使用这套API操作 JavaBean,以简化程序代码的编写。 ?Beanutils工具包的常用类: BeanUtils PropertyUtils ConvertUtils.regsiter(Converter convert, Class clazz) 自定义转换器 泛型(Generic)泛形的作用 ?JDK5以前,对象保存到集合中,取出时通常

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

最新文档


当前位置:首页 > 大杂烩/其它

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