java中反射与底层框架的编写

反射

是一种底层技术,通常用于底层框架的编写

类对象

  1. 类的对象: 是类实例化的结果,可以存在多个
  2. 类对象: 是类加载的产物, 通常只有一个, 内部存放类的所有信息(包,属性,方法,构造,父类信息,接口信息等)
获取类对象-Class
  1. 类名.class

    Class<类名> 对象名=类名.class
    
  2. 对象名.getClass()

    Class 对象名=对象名.getClass();
    
  3. Class.forName

    Class 对象名=Class.forName("类的全限定名");
    
public static void main(String[] args) throws Exception{
        Class<Student> c1 = Student.class;

        Student stu = new Student();
        Class c2 = stu.getClass();

        Class c3 = Class.forName("com.by.entity.Student");

    }
常用方法
  1. newInstance(): 利用类对象中的无参构造构建一个类的实例对象
  2. Constructor<类名> getDeclaredConstructor(参数列表的类对象1,参数列表的类对象2,…): 获取指定参数列表的有参构造器对象
    • newInstance(实参列表): 利用指定有参构造器对象构建类的实例对象
public static void main(String[] args) throws Exception{
        Class<Student> c1 = Student.class;
        Student stu1 = c1.newInstance();

        Class c3 = Class.forName("com.by.entity.Student");
        //获取的对像默认为Object类型,需要进行类型强转
        Student stu2 = (Student) c3.newInstance();


        stu1.setName("张三");
        stu2.setName("李四");
        System.out.println(stu1);
        System.out.println(stu2);
        
        //获取全属性的有参构造器对象
        //Constructor con = c1.getDeclaredConstructor(String.class, int.class, double.class);
        Constructor<Student> con = c3.getDeclaredConstructor(String.class, int.class, double.class);
        //利用有参构造器对象构建类的实例
        Student stu3 = con.newInstance("张三", 20, 99.5);
        System.out.println(stu3);
    }

反射的优缺点

优点
  1. 打破封装
  2. 提升代码扩展性
缺点
  1. 打破封装
  2. 降低对象属性的安全性

反射掌握重点

  1. 类对象和类的对象的区别
  2. 获取类对象的三种方式
  3. 通过反射构建类的对象的两种方式

你可能感兴趣的:(java,python,开发语言)