Java基础加强一JDK1.5新特性

时间:2022-05-06 19:41:05
Java基础加强一  一、JDK1.5新特性

1.      静态导入:

1)       import语句可以导入一个类或者某个包中的所有类

2)       import static语句导入一个类中的某个静态方法或者所有静态方法

2.      可变参数:一个方法接受的参数个数不固定

1)  只能出现在参数列表的最后

2)  位于变量类型和变量名,前后有无空格都可以

3)  调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体重以数组的形式访问可变参数

3.      增强for循环

1)  语法:for(type 变量名 : 集合变量名){…}

2)  注意事项:

                                     i.             迭代变量必须在()中定义

                                   ii.             集合变量可以是数组或实现了Iterable接口的集合类

4.      基本数据类型的自动拆箱与装箱

1)  自动装箱:Integer num1 = 12;

2)  自动拆箱:System.out.println(num1 + 12);

3)  基本数据类型的对象缓存:在-128~127之间的都相等,会产生缓存,不在创建对象,大于127的不会产生缓存

4)  享元模式:有很多个小的对象,它们有很多的属性相同,那么就把它们变成一个对象,那些不同的属性变成方法的参数,称之为外部状态,相同的属性称为内部状态。

5.      枚举

1)  理解:枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标

2)  总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象

3)  应用:

                                     i.             枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法

                                   ii.             枚举元素必须位于枚举体中的最开始部分,枚举元素列表后要有分号与其他成员分割,把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误

4)  带构造方法的枚举:

                                     i.             构造方法必须定义成私有化

                                   ii.             如果有多个构造方法,根据传入的参数确定使用哪个构造方法

                                 iii.             枚举元素MONMON()的效果一样,都是调用默认的构造方法

6.      注解:(见下文)

7.      泛型:(见下文)

二、反射

1)  Class类:

                                     i.             Class类代表Java类,对应各个类在内存中的字节码

                                   ii.             字节码:一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可以分别用一个个的对象表示

                                 iii.             获取字节码对应的实例对象:

类名.class

对象.getClass()

Class.forName(“类名”)

                                  iv.             九个预定义Class实例对象:boolean.classchar.classbyte.classshort.classint.classlong.classfloat.classdouble.classvoid.class

2)  反射:

                                     i.             理解:反射就是把Java类中的各种成分映射成相应的java

                                   ii.             一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,变量(Field)、方法(Method)、构造方法(Constructor)、包(Package

3)  Constructor类:

                                     i.             Constructor类代表某个类中的一个构造方法

                                   ii.             得到某个类所有的构造方法:Constructor[] constructors = Class.forName(“java.lang.String”).getConstrutors();

                                 iii.             得到某一个构造方法:Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);

                                  iv.             创建实例对象:

通常方法:String str = new String(new StringBuffer(“abc”));

反射方法:String str = (String)constructor.newInstance(new StringBuffer(“abc”));

                                    v.             Class.newInstance()方法:该方法内部先得到默认的构造方法,然后,用该构造方法创建实例对象

4)  Field类:

                                     i.             Field类代表某个类中的一个成员变量

                                   ii.             得到的Field对象对应到类上面的成员变量

5)  Method类:

                                     i.             Method类代表某个类中的一个成员方法

                                   ii.             得到类中的某一个方法:Method charAt = Class.forName(“java.lang.String”).getMethod(“charAt”,int.class);

                                 iii.             调用方法:

通常方式:System.out.println(str.charAt(1));

反射方式:System.out.println(charAt.invoke(str,1));(如果传递给Method对象的invoke()方法的第一个参数为null,说明该Method对象对应的是一个静态方法)

6)  数组的反射:

                                     i.             具有相同维数和元素数据类型的数组属于同一个类型,即具有相同的Class实例对象

                                   ii.             代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class

                                 iii.             基本类型的一维数组可以被当做Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组,既可以当作Object类型使用,又可以当作Object[]类型使用

7)  反射的作用:实现框架功能

                                     i.             框架与工具类的区别:工具类被用户的类调用,框架则是调用用户提供的类