学习笔记NO.5

第十六章 反射

1,Class类与Java反射

  1. Dome dome=new Dome();
    Class domec=dome.getClass();
    这个方法可以用来返回dome的类,Class类的对象domec,可以用来返回该对象的dome对象的描述信息
1,访问

setAccessible()方法可以获取对私有成员的使用权限

  1. 可以利用以下方法访问构造方法,会返回Constructor类型的对象挥着数组,每个对象代表一个构造方法,利用Constructor对象可以操纵相应的构造方法。
    getConstructors();返回公共得到构造方法
    getConstructor(参数,参数……);返回指定的公用方法
    geDeclaredConstructors();返回所有的
    geDeclaredConstructor(参数,参数……);返回指定
    注意是访问所有还是仅仅公共,把我坑惨了
    java.lang.reflext.Modifier类可以解析出getModifier();方法返回的修饰符信息,p。290页。
  2. 下面的几个方法可以返回Field类型的对象和数组。利用它可以操作相应的成员变量。
    getFileds();
    getField(String name);
    getDeclaredFields();
    getDeclaredFields(String name);
    如果访问的是指定的成员变量,可以利用他的名字进行访问,
  3. 访问方法
    访问方法时候会返回Method类型的数组或者对象,每个对象仅仅代表一个方法,利用它可任意操作相应的方法
    getMethods();
    getMethod(方法名,入口参数);
    getDeclaredMethods();
    getDeclaredMethods(方法名,入口参数);
    要是访问指定方法可以根据你这个方法的名字和入口参顺进行,有两个例子
    objectClass.getDeclaredMethods(“print”,String.class,int.class);
    objectClass.getDeclaredMethods(“print”,new Class[]{String.class,int.class});
    在反射中执行具有可变数量的参数的构造方法时候,要将入口参数定义为二维数组。

2,使用Annotation功能

1.定义Annotation类型
  1. 定义注解用@interface关键字修饰,可以用元注解注释他的修饰权限和使用权限,元注解是注解注解的注解,注解的元素可以定义默认值,要是没有默认值的话就得每次使用的时候从新定义一下。
    元注解@Target可以用枚举类ElementType中的枚举常量修饰注解所用于的程序元素。
    元注解@Retention可以用枚举类的RetentionPolicy中的枚举常量来设置Annotation的有效范围其中SOURCE的范围最小,不编译到Annotation文件中,CLASS编译到他中,但不加载到java虚拟机中,RUNTIME范围最大,全都占了。
2,访问Annotation信息(反射)
  1. 如果Annotation定义时候设置他的范围是RUNTIME,那么他的范围最大,运行时通工反射就可以得到相关信息,比如获取构造方法,字段和方法等。
  2. 类Constructor,Field和Method军继承了AccessiblePresent类,这个类中提供了三个关于注解的方法
    isAnnotationPresent(ClassannotationClass);
    用来查看是否添加了指定的Annotation方法,有就返回true,不然就返回false
    getAnnotation(Class< T >annotationClass);
    用来获取指定类型的Annotation,如果存在就返回指定对象,否则返回null
    getAnnotations();
    获取所有的Annotation,返回一个数组。
System.arraycopy(digest, index1, frame, index2, digest.length);
// 把digest中的内容从第index1个开始复制到frame中去,从frame的第index2开始,总共要复制的长度为 digest.length

第十七章 枚举与泛型

1.枚举类型

1.使用枚举常量
public enum Constants{
Constants_A,
Constants_B,
Constants_C

访问方法是 Constants.Constants_A;

2.操作枚举类型成员
values() 将枚举成员类型以数组形式返回
ValusOf 将普通字符串转换为枚举实例
compare To() 比较两个枚举对象定义时候的顺序c.compare To(b),c在a后面就是正,c在a前面就是负,不然就是0
ordinal() 得到枚举对象的索引位置

可以在枚举类型中直接添加构造方法,但这个构造方法必须为private类型。就是可以让枚举成员也包含信息,注意构造方法的参数类型影响枚举成员所包含的数据
出去以上的方法还可以先定义接口,方法放在接口里面,然后枚举成员实现这个接口。

2.泛型

1.定义泛型类
类名<T>

T代表一个类型的名称
使用方法就是先定义泛型,然后可以在类中定义一个泛型类型的数据,然后实例化的时候可以给定泛型的数据类型,之后进行操作。

可以定义多个泛型,定义多个之后要是实例化的时候没有声明泛型类型就当Object类,不然就要好好的定义。
可以用泛型定义数组,但是不能实例化数组。

常被泛型化的集合类由
ArrayList< E>
HashMap
HashSet< E>
Vector < E>

j继承泛型的四种情况
学习笔记NO.5_第1张图片限制泛型的可用类型
class 类名称< T extends anyclass >然后T就只能是这个继承的类的子类了。

类型通配符
使用类型通配符所声明的对象只可以获取和删除,不可以添加,类型通配符在声明对象时候使用。
extends制定了类型通配符的上界,super制定了下界。

学习笔记NO.5_第2张图片

你可能感兴趣的:(java)