Java反射之基础概念

0.实例准备

package com.blueStarWei.invoke;

public class Student {
    private String name;
    
    public Student() { }

    public Student(String name) {
        super();
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + "]";
    }
}

 

 

1. 什么是反射

  反射是在运行时(非编译时)动态获取类型的信息(比如:接口信息、成员信息、方法信息等),然后根据这些获取的信息创建对象、访问修改成员、调用方法。

 

2. 获取Class类的方式(3种):

//方式一:Class.forName("包名.类名")
Class stu1 = Class.forName("com.blueStarWei.invoke.Student");
//方式二:类名.class
Class stu2 = Student.class;
//方式三:实例.getClass()
Class stu3 = new Student().getClass();

 

3. 创建实例对象

    3.1 通过无参构造的方式创建实例

Student student = (Student) stu.newInstance();

备注:1)New一个对象的时候,类可以没有被加载;使用newInstance()方法的时候,必须保证这个类已经加载且已经连接【通过Class.forName()实现】。

Class clazz = Class.forName("com.blueStarWei.invoke.Student");
Student student1 = (Student) clazz.newInstance();
//等价于
Student student2 = new Student();

     3.2 通过有参构造的方式创建实例

Class clazz = Class.forName("com.blueStarWei.invoke.Student");
Constructor<?> constructor = stu.getConstructor(String.class);
Student winn = (Student) constructor.newInstance("Winn");

 

4. 反射的作用

  4.1 判断任意一个对象所属的类;

  4.2 判断任意一个类所具有的成员变量和方法;

  4.3 调用任意对象的方法;

  4.4 构造任意一个类的对象;

  4.5 生成动态代理操作。

posted @ 2018-07-15 14:45  blue星空  阅读(308)  评论(0编辑  收藏  举报