首页 > 编程语言 > 详细

Java 反射

时间:2019-11-08 20:36:24      阅读:89      评论:0      收藏:0      [点我收藏+]

反射 Reflection

将类的各个组成部分封装为其他对象, 称为反射机制

反射是框架设计的灵魂

优点: 

  1. 可以在程序运行过程中, 操作这些对象 (例如对某个实例一无所知的情况下, 尝试调用其方法)
  2. 可以解耦, 提高程序的可扩展性

 

Class 类

每加载一种 class,JVM就为其创建一个 Class 类型的实例,并关联起来。注意:这里的 Class 类型是一个名叫 Class 的 class。它长这样:

public final class Class {
    private Class() {}
}

  

获取一个 class 的 反射对象(Class 实例), 有三种方法:

1) Class.forName(全类名): 将字节码文件(.class) 加载进内存, 返回 Class 对象

  • 多用于配置文件, 读取文件, 加载类

2) 类名.Class: 通过类的静态属性 class 获取

  • 多用于参数的传递

3) 对象.getClass(): 在 Object 类中定义

  • 多用于对象的获取字节码的方式

 

同一个字节码文件(.class) 在程序里只被加载一次, 不论通过哪一种方式获取都是同一个

demo:

package com.company;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException {
        // forName()
        Class cls1 = Class.forName("com.company.Person");
        System.out.println(cls1);

        // .class
        System.out.println(Person.class);

        // .getClass()
        System.out.println(new Person().getClass());
    }
}

class Person {
    private String name;

    public void Person(String naem) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

反射对象的功能

获取的功能:

  1. 获取成员变量

    • Field[] getFields(): 获取所有 public 修饰的成员变量

    • Field getField(String name)

       

    • Field[] getDeclaredFields(): 获取所有的成员变量 (不考虑修饰符)

    • Field getDeclaredField(String name)

  2. 获取构造方法

    • Constructor<?>[] getConstructors()

    • Constructor<T> getConstructor(Class<?>... parameterTypes)

       

    • Constructor<?>[] getDeclaredConstructor()

    • Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)

  3. 获取成员方法

    • Method[] getMethods()

    • Method getMethod(String name, Class<T>... parameterTypes)

       

    • Method[] getDeclaredMethods()

    • Method[] getDeclaredMethods(String name, Class<T>... parameterTypes)

  4. 获取类名, 方法名

    • String getName()

 

获取 / 设置字段(Field)的值

Field[] getFields(): 获取所有 public 修饰的成员变量

Field getField(String name)

 

Field[] getDeclaredFields(): 获取所有的成员变量 (不考虑修饰符)

Field getDeclaredField(String name)

 

Field 对象操作成员变量:

 

 

 

 

 

 

 

 

 

 

 

ending ~ 

 

 

 

 

Java 反射

原文:https://www.cnblogs.com/kaichenkai/p/11822207.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!