目录
reflect反射机制
反射是一种动态机制,允许我们在代码运行期间来决定实例化对象,调用方法,操作属性等。
反射可以提高代码的灵活度,但是会降低执行效率。
反射应当在程序中起到“画龙点睛”的作用,而不应当过度依赖反射。
Class类
Class类 称为:类的对象
Class类的每一个实例是用于描述JVM已经加载的一个类的,并且JVM内部每个加载的类都有且只有一个Class实例与之对应。
我们通过类对象可以获取其表示的类的一切信息(类名,有哪些方法,属性等)。
因此反射离不开这个类。使用反射的第一步就是获取一个类的类对象,而获取方式有三种:
1.类名.class
每个类都可以以这种方式获取类对象,此种写法简单明了,但缺点是不灵活,例如:
Class cls = String.class; 获取String的类对象
Class cls = int.class; 获取int的类对象
Class cls = Object.class;
2.Class.forName(String name)
Class提供了一个静态方法forName,可以传入要加载的类的完全限定名(包名.类名)来获取该类的类对象
Class cls = Class.forName("java.lang.String")
3.类加载器ClassLoader形式
package reflect;
import java.lang.reflect.Method;
public class ReflectDemo1 {
public static void main(String[] args) throws ClassNotFoundException{
//获取Person类的类对象
// Class cls = Person.class;不常用
Class cls = Class.forName("reflect.Person");
// 获取类名
String name = cls.getName();
System.out.println(name);
//获取该类的所有方法,包括超类Object继承下来的方法
// Method[] methods = cls.getMethods();
//获取该类自己定义的所有方法
Method[] methods = cls.getD