Class c = Class.forName(“类文件名带包名”); ——获得该类的字节码文件。
Object obj = c.newInstance() ——创建一个空参数类的对象。
如果要获得带参数的对象,就要用到Constructor对象的方法
任何数据类型都可以被字节码文件描述
字节码文件的 constructor()获取方法:
只获得本类中所有的构造函数,包括私有?
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
Constructor<?>[] getDeclaredConstructors()
本类和父类 公有的构造函数。
Constructor<T> getConstructor(Class<?>... parameterTypes)
Constructor<?>[] getConstructors()
———— string类型所属的字节码文件对应的类是String.class,int也一样。
———— 通过构造器对象的newInstance方法将对象初始化
Class c = Class.forName(“类文件名带包名”);
Constructor constructor = c.getConstructor(String.class,int.class)
Object obj = constructor.newInstance(“小明”, 89);
字节码文件的 字段 获取方法:
Field getDeclaredField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[] getDeclaredFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Field getField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field[] getFields()
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
Class c = Class.forName(“类文件名带包名”);
Constructor constructor = c.getConstructor(String.class, int.class);
Object obj = constructor.newInstance(“xiaoming”,23);
Field filed = c.getDeclaredFied(“age”);
field.setAccessible(true) 对私有字段取消权限检查(暴力访问)setAccessible(true)
field.set(obj, 89);
Object o = field.get(obj) // 获取obj对象的age的值。
sop(o) — 89.
字节码文件的 方法 获取方法:
只获得本类中所有的方法,包括私有
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
Method[] getDeclaredMethods()
Method getMethod(String name, Class<?>... parameterTypes)
Method[] getMethods()
Class c = Class.forName(“类文件名带包名”);
Constructor constructor = c.getConstructor(String.class, int.class);
Object obj = constructor.newInstance(“xiaoming”,23);
相较于构造函数就在method方法中多了一个方法名
无参方法
Method m = c.getMethod(“方法名”, null)
有参数的方法
Method m = c.getMethod(“方法名”, 参数类型.class)
c.getMethod(“show”,String.class,int.class)
运行方法:
Method类中的invoke()方法:
非静态方法:
无参数:
m.invoke(所属对象,null) // m.invoke(obj,null);
有参数:
m.invoke(所述对象,参数) // m.invoke(obj,”小红”, 21);
静态方法 不需要用到对象
无参数
m.invoke(null,null)
有参数
m.invoke(null,参数) // m.invoke(null,”小红”, 21);
|