java反射机制:
反射机制是java中底层的一个功能,就是通过这个机制可以进行对象的灵活调用和处理
后期学习会用到反射相关的内容,但都是底层的理解,比如:文件的加载,Spring框架底层…..
java中提供一个api-Class类
1.
2.大class实例对应着加载到内存中的一个运行时类
3.object object=clazz.newInstance();//创建运行时类的对象
必须有空参构造器
权限修饰符要够,通常设置为public
4.
利用反射创建对象
package com.reflection;
import org.junit.Test;
import java.sql.SQLOutput;
/**
* @author 黄锐
* @create 2020-12-18 10:10
* 当前案例用于演示利用反射机制获取属性
*/
public class ReflectDemo {
//新建对象的获取直接使用反射获取
//单元测试
@Test
public void test1(){
//已知明确的类型,获取Class对象
Class<Student> clazz = Student.class;
System.out.println(clazz);
}
@Test
public void Test2(){
//已知对象,获取class对象
Student s = new Student();
Class<? extends Student> clazz = s.getClass();
System.out.println(clazz);
}
@Test
public void test3() throws ClassNotFoundException {
//完全限定名(包名.类名),获取class对象-比较常用-安全
String s = "com.reflection.Student";
//forname()返回这个地址所对应的类
Class<?> clazz = Class.forName(s);
System.out.println(clazz);
}
//测试结果:通过不同的反射获取的对象是不是同一个!
@Test
public void test4() throws ClassNotFoundException {
Class<Student> clazz1 = Student.class;
Student s1 = new Student();
Class clazz2=s1.getClass();
String ss= "com.reflection.Student";
//forname()返回这个地址所对应的类
Class<?> clazz3 = Class.forName(ss);
System.out.println(clazz3);
//比较
System.out.println(clazz1 == clazz2);
System.out.println(clazz1 == clazz3);
System.out.println(clazz2 == clazz3);
}
}