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调用方法