重温反射

1.根据名称反射出对象的方式
2.通过反射创建对象
3.通过反射获取属性
4.通过反射更改属性(private和其他)


5.通过反射获取方法

6.通过反射调用方法

1三种方式根据名称获得对象

main(){

String classname="com.aa.User";   //代表着类名字的字符串

//1.

Class clazz=Class.forName(classname);   //通过forname获取对象

//2

Class clazz=User.class(); //直接通过类名获取类对象

//3

User u=new User();

Class clazz=u.getClass(); //通过对象获取类对象

}


2.通过反射创建对象

无论通过哪种方式获得类对象,我们都可可以通过这个类对象,获取类的实例对象

main(){

Class clazz=Class.forName(classname);   

Object o=clazz.newInstance();

User u=(User)o;

system.out.println(u); //newInstance方法 将Class对象得到实例对象

}


3.通过反射获取属性

main(){

Class clazz=Class.forName(classname);   

Field[] d = clazz.getDeclaredFields();//属性
Field[] d1 = clazz.getFields();

for(Field f :d){

system.out.println(f);

}

}

上面两种方式 获取属性,其中第一种方法获取到全部属性,包括private 的,第二种方式获取到的不包含private的


4.通过反射更改属性(private和其他)

main(){

Class clazz=Class.forName(classname);   

Object o=clazz.newInstance(); //创建出对象

User u=(User)o;

Field[] d = clazz.getDeclaredFields();//属性
Field[] d1 = clazz.getFields();

for(Field f :d){

if(f.getname.equals("Id")){ //遍历查找名字叫 id的属性

f.set(u,158); //将对象:U 的f属性,也就是id属性设置成 158

}

}

system.out.println(u); //打印出u ,这时候的id 就被改变了

}

其实很好理解,我们是想改变 User 这个类的一个实例对象 u的一个属性的值,

首先我们遍历User的所有属性,查找到那个属性,然后我们调用属性的set方法,将实例对象和值传递过去,这样就帮我们更改了


5.通过反射获取方法

main(){

Class clazz=Class.forName(classname);   

Method method[] clazz.getMethods();

for(Method m:method){

system.out.print(m);

}

}

和获取属性类似


6.通过反射调用方法

和设置属性相似 首先我们上面获取到全部的方法,首先 我们遍历方法的列表,调用getname方法,找到指定的属性


main(){

Class clazz=Class.forName(classname);   

Object o=clazz.newInstance(); //创建出对象

User u=(User)o;

Method method[] clazz.getMethods();

for(Method m:method){

if(mgetname.equals("setId")){ //遍历查找名字叫 setid的方法

m.invoke(u,160); //将160作为u的setid参数传递过去调用


}

}

system.out.println(u); //打印出u ,这时候的id 就被改变了

}


和设置属性差不多,invoke调用方法



猜你喜欢

转载自blog.csdn.net/woaiqianzhige/article/details/78863713
今日推荐