1. 程式人生 > >Java中Class的getDeclaredMethods和getMethods的區別

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)**.