java反射机制:
    反射机制是java中底层的一个功能,就是通过这个机制可以进行对象的灵活调用和处理
    后期学习会用到反射相关的内容,但都是底层的理解,比如:文件的加载,Spring框架底层…..
    java中提供一个api-Class类

    1.image.png
    2.大class实例对应着加载到内存中的一个运行时类
    3.object object=clazz.newInstance();//创建运行时类的对象
    必须有空参构造器
    权限修饰符要够,通常设置为public
    4.
    image.png
    利用反射创建对象

    1. package com.reflection;
    2. import org.junit.Test;
    3. import java.sql.SQLOutput;
    4. /**
    5. * @author 黄锐
    6. * @create 2020-12-18 10:10
    7. * 当前案例用于演示利用反射机制获取属性
    8. */
    9. public class ReflectDemo {
    10. //新建对象的获取直接使用反射获取
    11. //单元测试
    12. @Test
    13. public void test1(){
    14. //已知明确的类型,获取Class对象
    15. Class<Student> clazz = Student.class;
    16. System.out.println(clazz);
    17. }
    18. @Test
    19. public void Test2(){
    20. //已知对象,获取class对象
    21. Student s = new Student();
    22. Class<? extends Student> clazz = s.getClass();
    23. System.out.println(clazz);
    24. }
    25. @Test
    26. public void test3() throws ClassNotFoundException {
    27. //完全限定名(包名.类名),获取class对象-比较常用-安全
    28. String s = "com.reflection.Student";
    29. //forname()返回这个地址所对应的类
    30. Class<?> clazz = Class.forName(s);
    31. System.out.println(clazz);
    32. }
    33. //测试结果:通过不同的反射获取的对象是不是同一个!
    34. @Test
    35. public void test4() throws ClassNotFoundException {
    36. Class<Student> clazz1 = Student.class;
    37. Student s1 = new Student();
    38. Class clazz2=s1.getClass();
    39. String ss= "com.reflection.Student";
    40. //forname()返回这个地址所对应的类
    41. Class<?> clazz3 = Class.forName(ss);
    42. System.out.println(clazz3);
    43. //比较
    44. System.out.println(clazz1 == clazz2);
    45. System.out.println(clazz1 == clazz3);
    46. System.out.println(clazz2 == clazz3);
    47. }
    48. }

    image.png