
反射的核心就是加载类,解剖出类的各个组成部分 例如:成员变量 、方法 、构造方法!
加载类的三种方法
/提取当前类的 Class 对象。
方法1 Class claszz1=Class.forName("com.rain.demo.Person"); 方法2 Class claszz2=Person.class; 方法3 Class claszz3=new Hero().getClass();
解剖类的常用方法
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。 public Constructor<T> getConstructor(Class<?>... parameterTypes) 返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法 public Method getMethod(String name, Class<?>... parameterTypes) //返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 public Field getField(String name) //私有 public Field getDeclaredField(String name) //私有 public Method getDeclaredMethod(String name, Class<?>... parameterTypes) //返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定私有构造方法。 public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
反射功能实际作用是用来开发框架如:spring
实例
Person.java
package com.rain.demo; public class Person { public String name="123"; public Person(){ System.out.println("person"); } public Person(String name){ System.out.println("person name"); } public Person(String name,int password){ System.out.println("person name password"); } public void getString(){ System.out.println(name); } }
Demo1.java
package com.rain.demo;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class Demo1 {
//反射新建类的对象
@Test
public void test1() throws NoSuchMethodException, SecurityException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Class claszzClass = Class.forName("com.rain.demo.Person");
Constructor c = claszzClass.getConstructor(null);
Person p = (Person)c.newInstance(null);
System.out.println(p.name);
}
@Test
public void test2() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException{
//提取当前类的 Class 对象。
Class claszzClass1=Class.forName("com.rain.demo.Person");
//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
Constructor c =claszzClass1.getConstructor(String.class);
//使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,
Person p = (Person)c.newInstance("xxxx");
System.out.println("test2");
System.out.println(p.name);
}
@Test
public void test3() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
Person p = new Person();
Class claszzClass3=Class.forName("com.rain.demo.Person");
//
Method method = claszzClass3.getMethod("getString", null); //方法名 参数
method.invoke(p, null);
}
}




赶紧抢沙发哟!