DATA(053)2019-03-20反射的定义-作用-Class类实例化
1:反射是Java进行自我管理 类、对象的一种机制
-
怎么进行管理,管理的是什么?
-
之前是不知道类里边有什么的,并不知道他里边的方法、属性等
-
但是一旦通过反射 那么就知道了
-
2:作用:通过反射机制发现对象的类型,如方法、属性、构造器等
-
并且通过对象访问方法和属性等
-
3:calss加载,就是把类文件加载到内存中,成为一个对象(实例化),class类的实例化
-
基本数据类型
-
引用数据类型
public static void main(String[] args) {
// 基本数据类型
Class cla01=int.class;
//把整型的生成一个class文件
System.out.println(cla01); // 就是一个整型, 这就是它在实例化里加载的一个对象
System.out.println("********************************");
//引用数据类型 以下两种方法都是一样的,一个是直接调用class,一个调用class的方法
Class cla02=String.class;
System.out.println(cla02);
System.out.println("************************************");
try {
//forName是一个类加载器
Class cla03=Class.forName("java.lang.String");
System.out.println(cla03);
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
//通过对象调用的这个方法加载进来的
System.out.println("************************************");
String string=new String("dddddd");
Class cla04=string.getClass();
System.out.println(cla04);
}
}
运行效果:
int
********************************
class java.lang.String
************************************
class java.lang.String
************************************
class java.lang.String
通过反射提取class类对象的属性
//Class的实例化 把student这个文件放到内存里了
Class<?> studentClass=Class.forName("com.neuedu.entity.Student");
//提取出来的是多个文件,field[]
Field[] fields = studentClass.getDeclaredFields(); //提取全部字段
//getFields()此方法只显示公共的字段
for (Field f:fields) {
System.out.println(Modifier.toString(f.getModifiers())+" "+f.getType()+" "+f.getName()); // 字段全都提取到了
//getModifiers Field对象表示的对象 Java语言修饰符
}
运行效果:
private int id
class java.lang.String name
protected int age
public class java.lang.String address
通过反射实现方法的调用
// 1:实例化
Class<?> studentclass=Class.forName("com.neuedu.entity.Student");
// 2:提取方法
/**
* 第一个参数 方法名:
* 从第二个开始的参数,也可能后面有第三个,第四个,第五个
* 后面写你参数的那个class类
*/
Method method= studentclass.getMethod("setName",String.class);
// 3:执行方法
/**
* 执行通过invoke()这个方法
* 第一个参数:Student的对象
* 从第二个开始的参数:实际值
*/
//这个对象怎么来呢?通过studentclass.newInstance();
Object obj=studentclass.newInstance();
method.invoke(obj,"tom");
//以上为赋值,现在我得取出来用吧
/**
* 第一个参数 方法名:
* 从第二个开始的参数的class类对象,无参的时候不用添加
*/
Method methodget= studentclass.getMethod("getName");
/**
* 第一个参数:Student的对象
* 从第二个开始的参数:实际值 不用添加
*/
Object getReturn=methodget.invoke(obj);
网友评论