反射

一、反射的概述

反射机制允许java程序加载一个运行时才得知其名称的类,获悉其完整API信息,包括其修饰符、超类、实现的接口,也包括属性和方法的所有信息;

二、反射的作用

  能够分析类能力的程序成为反射(reflective)。反射的功能极其强大,可以用来:

  a、在运行时分析类的能力

  b、在运行时检查对象,例如,编写一个适用于所有类的toString方法。

  c、实现泛型数组操作代码

  d、生成动态代理

注:如果只对编写应用程序感兴趣,而不是要为其他java程序员构建工具,可以只做了解

三、Class类

每个类都有与之对应的一个Class类对象,哪怕它是基础数据类型,例如int,enum,或者注解,Class类对象是反射的入口,封装了当前对象所对应的类的信息

获取Class对象的三种方式

package com.entity;

/**
 * @author 26414
 */
public class Person {
  @Override
  public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
  }

  private String name;
  private Integer age;

  public String getName() {
    return name;
  }

  public Person() {
  }

  public Person(String name, Integer age) {
    this.name = name;
    this.age = age;
  }

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

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }
}

 

package com.demo;

import com.entity.Person;

/**
 * @author 26414
 */
public class Reflect {
  public static void main(String[] args) throws ClassNotFoundException {
    //1.通过类名获取,类名.class
    Class<Person> clz1 = Person.class;
    //2.通过对象获取 ,对象名.getClass()
    Person person = new Person();
    Class<? extends Person> clz2 = person.getClass();
    //3.通过全类名获取,Class.forName(全类名)
    Class<?> clz3 = Class.forName("com.entity.Person");
    System.out.println(clz1 == clz2);
    System.out.println(clz2 == clz3);
  }
}

四、常用的反射机制类

  

java.lang.Class; //
java.lang.reflect.Constructor;//构造方法 
java.lang.reflect.Field; //类的成员变量       
java.lang.reflect.Method;//类的方法
java.lang.reflect.Modifier;//访问权限

 

五、在什么地方用到了反射?

a、与注解结合的框架,例如Spring

b、JDBC的数据库的连接

六、常用方法

 

 

 API地址

七、反射的优缺点:

反射机制使人们可以在运行时查看字段和方法,从而能编写更具有通用性的程序。这种功能对于编写系统程序极其有用,但通常不适于编写应用程序。反射是很脆弱的,如果使用反射,编译器将无法查找编程错误,只有在运行时才会发现错误并导致异常,影响性能。

posted @ 2021-01-11 19:07  翻蹄亮掌一皮鞋  阅读(144)  评论(0)    收藏  举报