1.什么是反射,我这里用自己的话来理解,
我们在运行期,通过类的名字可以直接获得类的方法和属性,就叫做反射机制。
下面我们来写一个普通的Dog类,这里分别模拟一下私有,公共,默认属性和方法,然后一一用反射机制来测试
代码如下
public class Dog {
private int id;//私用变量
String age;//默认变量
public String name;//公共变量
//私用方法
private void eat(){
System.out.println("吃掉陈厚德");
}
int aa =5;//局部变量
//默认方法
void sleep(){
System.out.println("睡");
}
//公共方法
public void jiao(){
System.out.println("叫");
}
}
然后我们再写一个创建一个类新建一个main方法,机构图如下,两个类即可
下图是反射机制的三种常用方式,我们先创建一个Dog对象
三种方式都可以获得类的属性和方法。
代码也放在下面了
System.out.println(c2.getPackage().getName());//包名
System.out.println(c2.getSimpleName());//包名
System.out.println(c2.getName());//包名
Method[] methods= c2.getMethods();//获取所有方法名字 但不包括私有和默认的
Method[] methods1=c2.getDeclaredMethods();
for ( Method m: methods ) {
System.out.println(m.getName());
}
System.out.println(">>>>>>>>");
//获取本类自己定义的方法 包括私用 被包括
for ( Method m: methods1 ) {
System.out.println(m.getName());
}
输出结果如下
可以清楚的看到他们之间的区别,
getDeclaredMethods可以获取自己定义的类的所有方法名,而
getMethods()则会获得所有的方法,但是不包括私用和默认,只获得所有公共方法