反射——通过反射获取方法并使用

通过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);
}
发布了89 篇原创文章 · 获赞 0 · 访问量 1538

猜你喜欢

转载自blog.csdn.net/ShiZaolin/article/details/104265247