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(动态代理)功能都和反射机制有关系;
- 动态配置实例的属性;
- ...
以上是 java获取反射机制的三种方式 的全部内容, 来源链接: utcz.com/z/390908.html