J2EE--反射
程序员文章站
2022-05-15 11:21:02
...
反射
1.定义:
反射是一种机制,可利用反射机制动态的实例化对象,
读写属性,调用方法以及构造函数。
2.获取类对象的三种方式:
注意:一切反射相关的代码都是从获取类对象开始的
1>类名.class
Class cla = Student.class;
2>对象名.getClass()
Student stu = new Student();
Class cla = stu.getClass();
3>Class.forName(全限定名/全路径名)
Class cla = Class.forName("com.zking.reflect.entity.Student");
Student stu = (Student)cla.newInstance();
3.根据类得到类名(全限定名/全路径名)
cName.getName()
cName.getSimpleNname()
cName.getPackage()
cNmae.getModifiers()
System.out.println("类的全限定名"+cla.getName());
System.out.println("类名:"+cla.getSimpleName());
System.out.println("获取包名:"+cla.getPackage());
System.out.println("类的访问修饰符:"+cla.getModifiers());
4.根据类名得到类的属性:
//1.获取类的属性(公共的,私有的,受保护的,最终的等等)
//1.1获取类的单个属性(公共的)
//Field field = cla.getField("age");
//1.2获取类的单个属性(公共的,私有的,受保护的,最终的等)
//Field field = cla.getDeclaredField("sname");
//System.out.println("属性名"+field.getName());
//System.out.println("属性的类型"+field.getType());
//System.out.println("属性的访问修饰符"+field.getModifiers());
//1.3 赋值和取值
//参数1:类的对象
//参数2:所要赋值的值
//注意设置访问权限
//field.setAccessible(true);
//field.set(stu, "张三");
//取值
//Object obj = field.get(stu);
//System.out.println("sname="+obj);
//1.4获取类中的所有属性
//Field[] fields = cla.getFields();
//Field[] fields = cla.getDeclaredFields();
//for (Field field : fields) {
//System.out.println("属性名"+field.getName());
//System.out.println("属性的类型"+field.getType());
//System.out.println("属性的访问修饰符"+field.getModifiers());
//System.out.println("--------------------------------------");
//}
5.根据类得到类的方法:
//2.获取类的方法
//方法的种类:无参无返回,无参有返回,有参无返回,有参有返回
//2.1获取类中的单个方法(公共的)
//参数1:方法名
//参数2:可变参数
Method method = cla.getMethod("setSid", String.class);
//执行方法,并得到方法的返回值
Object invoke = method.invoke(stu, "张三");
System.out.println(invoke);
//2.2获取类中的单个方法(公共的,私有的,受保护的,最终的)
Method method = cla.getDeclaredMethod("add", Integer.class,Integer.class);
//设置访问权限
method.setAccessible(true);
//执行方法
Object value = method.invoke(stu, 10,5);
System.out.println(value);
//2.3获取类中的所有方法
Method[] methods = cla.getMethods();
for (Method method : methods) {
System.out.println("方法名:"+method.getName());
System.out.println("方法的访问修饰符:"+method.getModifiers());
System.out.println("方法的返回值类型:"+method.getReturnType());
System.out.println("--------------------------");
}
6.根据类得到类中的构造方法:
//3.构造函数
//3.1获取类中的单个构造函数(公共的)
Constructor con = cla.getConstructor(String.class,String.class);
con.newInstance("p001","张三");
//3.2获取单个构造方法(包括私有、受保护、默认、公有)
Constructor con = cla.getDeclaredConstructor(Integer.class);
con.setAccessible(true);
con.newInstance(21);
//3.3获取所有的公有构造方法
Constructor[] const1 = cla.getConstructors();
for (Constructor con1 : const1) {
System.out.println(con1);
}
System.out.println("---------------------");
//3.4获取所有的构造方法(包括私有、受保护、默认、公有)
Constructor[] const2 = cla.getDeclaredConstructors();
for (Constructor con1 : const2) {
System.out.println(con1);
}
7.根据类得到类食物实现接口列表:
Class[] interfaces = cla.getInterfaces();
上一篇: 最常用JS方法整理