0.实例准备ide
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. 什么是反射this
反射是在运行时(非编译时)动态获取类型的信息(好比:接口信息、成员信息、方法信息等),而后根据这些获取的信息建立对象、访问修改为员、调用方法。spa
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. 建立实例对象code
Student student = (Student) stu.newInstance();
备注:1)该方法经过无参构造的方式建立实例对象
2)New一个对象的时候,类能够没有被加载;使用newInstance()方法的时候,必须保证这个类已经加载且已经链接【经过Class.forName()实现】。blog
Class clazz = Class.forName("com.blueStarWei.invoke.Student"); Student student1 = (Student) clazz.newInstance(); //等价于 Student student2 = new Student();
4. 反射的做用接口
4.1 判断任意一个对象所属的类;get
4.2 判断任意一个类所具备的成员变量和方法;编译
4.3 调用任意对象的方法;
4.4 构造任意一个类的对象;
4.5 生成动态代理操做。