Java中Class的getDeclaredMethods和getMethods的区别

在实际中经常需要使用反射机制获取类的属性和方法等信息.
Class中有两个方法可以获取类的方法:getDeclaredMethods和getMethods
下面实例说明这两个的区别

创建person类
class person{

    private float height;
    private float weight;

    void  getPersonName() {

    }
    public void  getPersonHeight() {

    }

    private void  getPersonWeight() {

    }

    protected void getPersonColor() {

    }
}
创建person类的子类
class student extends person {

    private String name;
    private int age;

    public student() {
        super();
    }
    void  getStudentHeight() {

    }    
    public void  getStudentName() {

    }   
    private void  getStudentAge() {

    }
    protected void getStudentColor() {

    }   
}
测试
public class reflect {

     public static void main(String[] args) {  

         try {
            Class classzz  = Class.forName("student");
            System.out.println("classzz = " + classzz);
            //getMethods方法
            Method[]  methods =  classzz.getMethods();
            System.out.println(" ----getMethods: ");
            for(Method m : methods) {
                System.out.println(m);
            }
            //getDeclaredMethods 方法
            Method[]  declaredMethods =  classzz.getDeclaredMethods();
            System.out.println("\r\n ----declaredMethods: ");
            for(Method m : declaredMethods) {
                System.out.println(m);
            }           
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }     
     }
}
输出
classzz = class student
 ----getMethods: 
public void student.getStudentName()
public void person.getPersonHeight()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() 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()

 ----declaredMethods: 
void student.getStudentHeight()
public void student.getStudentName()
private void student.getStudentAge()
protected void student.getStudentColor()
总结
  • 从以上测试结果可以看出,declaredMethods只能获取当前类的方法(包访问权限+public + private + protcted).
  • getMethods可以获取本身类和其**所有父类的所有共有方法(public)**.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值