反射——通過反射獲取方法並使用

通過Class的getMethod方法可以獲取一個公共方法
通過getDeclaredMethod方法可以獲取一個私有方法
如果要調用私有方法,需要設置訪問權限setAccessible

方法是公共的

//創建Tercher模型
public class Tercher{
public String name;
private String homntown;
private double height;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String getHometown(){
return homntown;
}
public void setHomntown(String homntown){
this.homntown=homntown;
}
public Teacher(){}
public Teacher(String name,String homntown){
super();
this.name=name;
this.homntown=homntown;
}
public Teacher(String name,double height){
super();
this.name=name;
this.height=height;
}
public String toString(){
return "Teacher[name="+"name"+",homntown="+homntown+",height="+height+"]";
}
public void say1(){
System.out.println("你是一隻大黃鴨");
}
public void say2(String name){
System.out.println("你是一隻"+name);
}
public void say3(String name,ing age){
System.out.println("你是一隻"+name+"今年"+age);
}
}

//主方法
public static void main(String[] args){
//獲取字節碼對象
Calss cls=Teacher.class;

Teacher teacher=new Teacher();
// 通過反射獲取方法,無參
Method s1=cls.Method("say1");
//通過反射獲取一個參數的構造方法
Method s2=cls.Method("say2",String.class);
//通過反射獲取兩個參數的構造方法
Method s3=cls.Method("say3",String.class,int.class);
//調用方法
s1.invoke(teacher);
s2.invoke(teacher,"小黃");
s3.invoke(teacher,"小黃",3);
}

方法是私有的

//創建Tercher模型
public class Tercher{
public String name;
private String homntown;
private double height;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String getHometown(){
return homntown;
}
public void setHomntown(String homntown){
this.homntown=homntown;
}
public Teacher(){}
public Teacher(String name,String homntown){
super();
this.name=name;
this.homntown=homntown;
}
public Teacher(String name,double height){
super();
this.name=name;
this.height=height;
}
public String toString(){
return "Teacher[name="+"name"+",homntown="+homntown+",height="+height+"]";
}
private void say1(){
System.out.println("你是一隻大黃鴨");
}
private void say2(String name){
System.out.println("你是一隻"+name);
}
private void say3(String name,ing age){
System.out.println("你是一隻"+name+"今年"+age);
}
}

//主方法
public static void main(String[] args){
//獲取字節碼對象
Calss cls=Teacher.class;

Teacher teacher=new Teacher();
// 通過反射獲取方法,無參
Method s1=cls.getDeclaredMethod("say1");
//通過反射獲取一個參數的構造方法
Method s2=cls.getDeclaredMethod("say2",String.class);
//通過反射獲取兩個參數的構造方法
Method s3=cls.DeclaredMethod("say3",String.class,int.class);
//設置私有方法訪問權限
s1.setAccessible(true);
s2.setAccessible(true);
s3.setAccessible(true);
//調用方法
s1.invoke(teacher);
s2.invoke(teacher,"小黃");
s3.invoke(teacher,"小黃",3);
}
發佈了92 篇原創文章 · 獲贊 0 · 訪問量 1605
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章