• java获取反射机制的三种方式


    背景

    今天面试,面试官问了我一个问题,“java中的反射机制是什么,实现反射机制主要有哪几种方式?”,因为做项目的时候没怎么接触过反射机制,所有也没答上来,事后查阅资料后才有一定的了解。

    反射机制

    Java反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任何一个对象,也都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    java获取反射机制的三种方式

    建立一个学生类:

    public class Student{
        private int id;
        String name;
        protected boolean sex;
        public float score;
    }
    
    通过new对象实现反射机制
    public class Get{
        public static void main(String[] args) throws ClassNotFoundException {
            //方式一:通过建立对象(即通过对象实例获取)
            Student stu = new Student();
            Class classobj1 = stu.getclass();
            System.out.println(classobj1.getName());
        }
    }
    
    通过路径实现反射机制
    public class Get{
        public static void main(String[] args) throws ClassNotFoundException {
            //方式二:通过路径实现反射机制
            Class classobj2 = Class.forName("fanshe.Student"); //fanshe.Student表示类的路径
            System.out.println(classobj2.getName());
        }
    }
    
    通过类名实现反射机制
    public class Get{
        public static void main(String[] args) throws ClassNotFoundException {
            //方式三:通过类名实现反射机制
            Class classobj3 = Student.class;
            System.out.println(classobj3.getName());
        }
    }
    

    静态编译和动态编译

    • 静态编译:在编译时确定类型,绑定对象
    • 动态编译:运行时确定类型,绑定对象
    反射机制的优缺点
    • 优点:运行期类型的判断,动态加载类,提高代码灵活度
    • 缺点:运行时确定类型,绑定对象
    反射的应用场景

    反射是框架设计的灵魂。
    虽然在平时的项目开发中可能很少会使用到反射机制,但这不能说明反射机制没有用,事实上很多设计和开发都与反射机制有关,如模块化的开发,会通过反射去调用对应的字节码;动态代理设计模式也采用了反射机制。还有一些场景如下:

    • 在使用JDBC连接数据库时,会使用Class.forName()通过反射来加载数据库的驱动程序;
    • Spring框架的IOC(动态加载管理Bean)创建对象以及AOP(动态代理)功能都和反射机制有关系;
    • 动态配置实例的属性;
    • ...
  • 相关阅读:
    python闭包&深浅拷贝&垃圾回收&with语句
    Python基本数据类型
    面向对象
    四则运算2
    周总结01
    软件工程个人作业01
    java web中乱码的种类和一些解决方式
    java web 增加信息课堂测试00
    课程00作业
    动手动脑07
  • 原文地址:https://www.cnblogs.com/xiaozhengtongxue/p/13754485.html
Copyright © 2020-2023  润新知