开门见山
例A
User.java
package com.saictest.demo.controller;
public class User {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
SystemUser.java
package com.saictest.demo.controller;
public class SystemUser extends User {
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
private void getxx(){
}
}
测试类
package com.saictest.demo.controller;
import java.lang.reflect.Method;
public class DeclaredTest {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> cls = Class.forName("com.saictest.demo.controller.SystemUser");
Method[] methods = cls.getMethods();
for (Method m : methods) {
System.out.println(m.getName());
}
}
}
输出结果
getPassword
setPassword
getName
setName
getAge
setAge
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
小荷才露尖尖角
上面一个简单的例子可以感受下反射的简单用法,下面我们从最常用的写法入手逐步深入了解,我觉得学一个东西,熟能生巧,只有熟练的使用后才能更好的理解。
- getDeclaredMethods和getMethods的区别
getDeclaredMethods:获取自身所有的方法,包括public,private,private
getMethods:获取的是类的所有公有方法,包括从父类、接口继承来的 public方法
从例A上可以看到getMethods 打印出父类和Obejct的所有公共方法,上面的例子稍微修改下
....
Class<?> cls = Class.forName("com.saictest.demo.controller.SystemUser");
Method[] methods = cls.getDeclaredMethods();
for (Method m : methods) {
System.out.println(m.getName());
}
....
打印的结果如下
getPassword
setPassword
getxx
同理getDeclaredMethod和getMethod也和上面一样
-
getDeclaredMethod和getMethod
我在User.java中添加下面一个方法
public void doSomething(String str) {
System.out.println(str +"!!!");
}
再修改下DeclaredTest.java
Class<?> cls = Class.forName("com.saictest.demo.controller.SystemUser");
Method method=cls.getMethod("doSomething",new Class[]{String.class});
method.invoke(cls.newInstance(),new Object[]{"你好啊"});
打印结果
你好啊!!!
网友评论