1.枚举类
public enum Size{
SMALL,MEDIUM,LARGE,EXTRA_LARGE
};
定义一个类,其中有4个实例
2.在枚举类中添加 构造器、方法、域
public enum Size{
SMALL(1),MEDIUM(2),LARGE(3),EXTRA_LARGE(4)
private int a;
private Size(int input){
a=input;
}
public void geta(){System.out.print(a)}
}
Size.SMALL.geta()显示1
Size.SMALL.toString()显示SMALL
Size s = Enum.valueOf(Size,class , ” SMALL ” )
Size[] values = Size.values()
3.能够分析类能力的程序称为反(reflective)
4.获取class方法
Fuck fuck;
Class c1=fuck.getClass()
forName获得类名对应的Class对象
Class c2= Class.forName(“Fuck”) ;
Class c3= Fuck.class;
5.java.lang.reflect包中有三个类
Field Method Constructor
分别用于描述
类的域 方法 构造器
6.
Class c;
获得类中 公有 的域、方法、构造体
Field[] f=c.getFields();
Method[] m=c.getMethods();
Constructor[] c=c.getConstructors();
获得类中 全部 的域、方法、构造体
Field[] f=c.getDeclaredFields();
Method[] m=c.getDeclaredMethods();
Constructor[] c=c.getConstructors();
获得类中 指定名字 的域、方法、构造体
Field f=c.getDeclaredField(“fuck”);
Method m=c.getDeclaredMethod(“Fuck_you”);
Constructor c=c.getConstructor(“Fuck”);
7.反射机制的默认行为受限于 Java 的访问控制 。
设置f.setAccessible(true);可访问私有域
提取对象F中变量为fuck的(域),并输出
Field f=c.getDeclaredField(“fuck”);
Object v=f.get(F);
System.out.println(v);
8.Arrays.copyOf() 扩展数组时,自动返回Object类型
若要变为自己合适的类型
用Object newArray = Array.newlnstance ( componentType , newLength ) ;
System.arraycopy(a,0,newArray,0Math.min(length,newLength ) );拷贝
9.
得到c类中Fuck_you的方法
Method m=c.getDeclaredMethod(“Fuck_you”);
在对象p中进行Fuck_you方法
m.invoke(p);