1、反射机制概述
1.反射机制背景概述
1) Reflection也就是反射, 是Java被视为动态(或准动态)语言的一个关键性质
2)反射机制指的是程序在运行时能够获取任何类的内部所有信息
2.反射机制实现功能概述
1)只要给定类的全路径(类的全限定名),即可通过反射获取类的所有信息
2)反射可以在程序运行时获取任意一个对象所属的类对象
3)在运行时可以获取到类中所有属性对象,并对其操作(包括私有属性)
4)在运行时可以获取到类中、父类中所有方法,并调用
5)目前主流的应用框架如Struts2, Hibernate, Spring, SpringMVC等框架的核心全部是利用Java的反
射机制来实现的。
2、Class对象概述
1. Class (java.lang.Class) 是什么?
Person 人类
Student学生类
Class 类斑
1) 在Java中,任何事物都有类型,而Class指的是一 个类,他用来概述所有对象的类型;
2)通过Class类的对象, 可以知道他所描述的类的信息;
3)如String类型、 Integer类型、 Object类型, 那么String、 Integer和Object类型就是它们的类对象的Class;
4) Class不是所有类的父类(是Object) ;
2. Class对象的常用方法介绍
方法名 | 释义 |
getName() | 获得类的完整名称 |
getDeclaredFields() | 获得类中的所有属性,而getFields()只能获取到公有属性 |
getDeclaredMethods() | 获得类中的所有方法,而getMethods()只能获取到公有方法 |
getConstructors() | 获得类的构造方法 |
newInstance() | 实例化对象,调用这个方法要求该类必须具有无参构造方法 |
getMethod(String name,parameterTyeca.... ) | 根据方法名,获得方法对象,同getDeclaredMethods() (方法名,参数类1.class,参数类2.class....) |
//Field 是指 Java 反射 API 中的一个类,表示一个类或接口的字段(也称为属性)。 //Field 类提供了用于访问、检索和操作类或接口中定义的字段的方法。 //例如,您可以使用 Field 类获取字段的名称、类型和值,并对字段设置值。 try { Class c3 = Class. forName("first. Student"); System. out. printIn(c3. getName()); Field[] fields = c3. getDeclaredFields(); //Field f2 = c3.getDeclaredField("agea"); Method[] ms=c3.getDeclaredMethods();//获取所有方法 for(Field f : fields) { System. out. println(f. getType()); System. out. printIn(f. getName()); } Object obj=c3.newInstance();//相当于new一个对象 Field f2 = c3.getDeclaredField("agea"); f2.set(obj,18);//需要锁定哪个对象,才能设值 //私有属性也可以设值 Field nameField = c3. getDeclaredField ("name"); nameField. setAccessible(true) ;//开关,放开权限 nameField.set(obj, "张三"); Method m = c3. getDeclaredMethod("setName", String.class); m. invoke(obj, "李四");// stu. setName("李四"); } catch (Exception e) { e. printStackTrace(); }
3.获取Class对象
//方法一:通过类的全限定名 Class c = Class. forName("w6.Car"); //Class类的静态方法forName(“完整的包名+类名”) //方法二:通过对象,调用Object类中的getClass方法 Book book = new Book(); Class C = book. getClass(); //方法三:通过类.Calss Class C = Book.class; //通过类对象获得实例对象 Book book = (Book) C. newInstance()