java反射的相关方法示例

用java反射的动机就是在运行时获取类的相关信息,希望在扩网络的远程平台上创建和运行对象的能力。 利用远端传来的.class字节文件,可以运行时生成相关的对象。
1.生成相关对象示例(比如说本地就传来了一个UserFeild.class文件)

Class clazz = Class.forName("cn.wzy.test.UserField");
UserField userField = (UserField) clazz.newInstance();

2.利用Class对象获取该类的字段或者方法、构造器信息

public  class  UserField {
 
     private  int  id;
     private  String name;
 
     public  void  setId( int  id) {
         this .id = id;
     }
}
2.1 输出类的方法
Class clazz = Class.forName("cn.wzy.test.UserField");
Method[] methods = clazz.getMethods();
for (Method m: methods) {
    System.out.println(m);
}

输出信息如下:(第一个为该类自己的方法,其他的为基类Object的方法)

getMethods()返回的是所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。

getDeclaredMethods()返回的是所有包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。

public void cn.wzy.test.UserField.setId(int)
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
2.2 输出类的所有字段:
Field[] fields = clazz.getDeclaredFields();
for (Field field: fields) {
    System.out.println(field);
}
getDeclaredFields()和getFields()的区别跟获取方法的两个形式一样,输出如下:
private int cn.wzy.test.UserField.id
private java.lang.String cn.wzy.test.UserField.name


猜你喜欢

转载自blog.csdn.net/qq_38089964/article/details/80803682