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);  
 
 
 
 |