Java中的反射

反射的官方定义:在运行状态中,对于任意一个类,都能知道这个类的所有的属性和方法;对于对于对象,都能够调用他的任意一个方法和属性;这种动态获去信息以及动态调用对象的方法的功能称为java语言的放射机制。
反射就是把Java类中的各种成分映射成java类。一个类的组成部分无非也就是:成员变量、方法、构造方法、包等。表示java的Class类显然要提供一系列的的方法,来获取其变量、方法、构造器、修饰符、包等信息,这些信息就是用相应的类的实例的对象来表示,他们分别是:Field、Method、Contructor、Package等等。一个类中的每个成员变量都可以用相应的反射API类的一个实例对象来表示,反射主要使用来开发:工具、架构、动态开发等工程。
放射机制能做什么:

  • 在运行时可以判断任意一个对象所属的类
  • 在运行时可以任意构造一个类的对象
  • 在运行时可以任意调用一个类的成员变量和方法
  • 在运行时任意调用一个对象方法
  • 可以生成动态代理

class类

描述一、在面向对象的世界里,万物皆对象,类是对象,类是java.lang.Class类的实例对象,联外是由java虚拟机才能new楚class对象。
描述二、Java程序中,所有的Java类都属于同一类事务,描述这一类事物的名称就是Class。
获取各个类字节码的方法有三种:
类名.class //直接用类.class获取
对象.getClass//通过对象调用器getClass()方法
Class.forName(“java.util.Date”)//a通过类的加载器获取

//获取类字节码Demo
public static void main(String[] args){
    //1、用类的加载器获取
    Class clazz1 =Class.forName("reflect.Person");
    //2、用类.class获取
    Class clazz2 =Person.class;
    //3、用对象.getCals获取
    Class clazz3 = new Person().getClass();
}
//反射构造方法
public class ReflectConstrustor(){
    //反射构造函数:public Person()
    @Test
    public void test1(){
        Class clazz = Class.forName("reflect.Person");
        Constructor constructor = clazz.getConstructor(null)
        Person p = (person)constructor.newInstance(null);       
    System.out.println(p.name);
    }
    //反射构造函数:public Person(String name)
    @Test2
    public void test2(){
        Class clazz= Class.forName("reflect.Person");
        Constructor constructor = clazz.getConstructor(String.class);
        Person p = constructtor.newInstance("lsh1");
        System.out.println(p.name);
    }
    //反射构造函数:public Person(String name,int password)
    @Test
    public void test3(){
    Class clazz  = Class.forName("reflect.Person");
    Constructor construct  = clazz.getConstructor(String.class,int.class);
    Person p =constructor.newInstance("lsh",123);
    System.out.println(p.name+"---"+p.password);
    }
}

反射的基本步骤

1、获取Class类对象,就是获取指定名称的字节码文件对象。–>2、获取类的成员变量对象、成员方法对象、构造方法对象。–>3、访问成员变量、调用方法、调用构造器函数创建实例对象。

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页