【Java基础】反射机制

  1. 反射

    反射可以使我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码链接。反射允许我们在编写和执行时,使我们的代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。

  2. 反射机制作用

    1. 反编译:.class -> .java
    2. 通过反射机制访问Java对象的属性,方法,构造方法
  3. 反射的使用

    1. 反射机制获取类的三种方式
    Class c1 = Class.forName("com.webb.basis.reflect.Demo"); // 一般采用这种方式
    Class c2 = Demo.class;
    Class c3 = new Demo().getClass();
    
    1. 创建对象:获取类之后我们来创建它的对象,利用newInstance()
    c1.newInstance(); // 调用了Demo的无参构造方法
    
    1. 获取属性
    // 获取所有属性
    Field[] fields = c1.getDeclaredFields();
    
    StringBuffer stringBuffer = new StringBuffer();
    
    stringBuffer.append(Modifier.toString(c1.getModifiers()) + " class " + c1.getSimpleName() + "{\n");
    
    for (Field field : fields) {
        stringBuffer.append("\t");
        stringBuffer.append(Modifier.toString(field.getModifiers()) + " ");
        stringBuffer.append(field.getType().getSimpleName() + " ");
        stringBuffer.append(field.getName() + ";\n");
    }
    
    stringBuffer.append("}");
    
    System.out.println(stringBuffer);
    
    // 获取指定的属性
    Field field = c1.getDeclaredField("name"); // 不存在的话会报错    
    
    1. 获取方法和构造方法
    方法关键字
    getDeclaredMethods()
    getReturnType()
    getParameterTypes()
    getDeclaredMethod()
    
    构造方法关键字
    getDeclaredConstructors()
    getDeclaredConstructor()
    
    1. setAccessible(true);

    对属性设置访问权限,当类中的变量为private时,必须设置此项。

posted @ 2017-03-01 16:30  土豆蛋炒饭  阅读(279)  评论(1编辑  收藏  举报