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

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

回到顶部