Java反射

Java反射

最近开始上Java企业实训课,虽然自己不走Java方向,但是框架中的思想还是需要学一下的,Java中的反射特性正是框架学习必须知道的

Java反射是一个强大的机制,允许在运行时检查或修改程序的行为。这个功能是通过java.lang.reflect包提供的。通过反射,你可以在运行时动态地创建对象、调用方法、访问字段,即使你在编写代码时不知道类名或它们的属性。这在需要动态性和灵活性的场景(如框架开发)中非常有用。

以下是Java反射的一些关键特性及其使用:

  1. 获取Class对象:Class对象是反射的入口点。你可以通过多种方式获取Class对象,例如使用Class.forName("完全限定类名")对象.getClass()类名.class

    Class<?> clazz = Class.forName("java.lang.String");
    
  2. 创建实例:通过Class对象,你可以使用newInstance()方法创建类的实例。这要求类有一个无参构造函数。

    Object obj = clazz.newInstance();
    
  3. 访问字段:你可以访问类中的字段(包括私有字段)。通过Class对象的getField()getDeclaredField()方法可以获取字段,然后通过setAccessible(true)来访问私有字段。

    Field field = clazz.getDeclaredField("fieldName");
    field.setAccessible(true);
    Object value = field.get(obj);
    
  4. 调用方法:类似地,你可以调用类中的方法。使用Class对象的getMethod()getDeclaredMethod()来获取方法,然后使用invoke()来调用它。

    Method method = clazz.getDeclaredMethod("methodName", 参数类型...);
    method.setAccessible(true);
    method.invoke(obj, 实参列表...);
    
  5. 访问构造函数:你可以通过Class对象的getConstructor()getDeclaredConstructor()方法获取构造函数,并通过它们创建类的实例。

    Constructor<?> constructor = clazz.getDeclaredConstructor(参数类型...);
    constructor.setAccessible(true);
    Object obj = constructor.newInstance(实参列表...);
    

反射机制虽然功能强大,但也有一些缺点,例如性能开销较大,可能破坏封装性,且在使用时容易出错(如类型转换错误)。因此,建议在确实需要动态性时才使用反射。

你可能感兴趣的:(Java,java,开发语言)