##java面试题大全

详细面试题-持续更新中-点击跳转

点赞、收藏、加关注
·
·


java基础面试题

  • ##java面试题大全
  • 1、什么是反射
  • 2、Java 反射创建对象效率高还是通过 new 创建对象的效率高
  • 3、实现 Java 反射的类(反射 API)
  • 4、反射机制的优缺点
  • 5、怎么利用反射动态创建对象实例


1、什么是反射

反射:
反射是通过获取类的 class 对象,然后动态的获取到这个类的内部结构,动态的去操作类的属性和方法

应用场景:
要操作权限不够的类属性和方法时、实现自定义注解时、动态加载第三方 jar 包时、按需加载类,节省编译和初始化时间

获取Class对象的方法:
Class.forName(类路径),类.class(),对象.getClass()

2、Java 反射创建对象效率高还是通过 new 创建对象的效率高

通过 new 创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低

3、实现 Java 反射的类(反射 API)

  • Class:表示正在运行的 Java 应用程序中的类和接口,可以获取类的属性,方法等信息
  • Field:提供有关类和接口的属性信息,以及对它的动态访问权限
  • Constructor:提供关于类的单个构造方法的信息以及它的访问权限
  • Method:提供类或接口中某个方法的信息

4、反射机制的优缺点

优点:

  1. 能够运行时动态获取类的实例,提高灵活性
  2. 可以与动态编译结合

缺点:

  1. 使用反射性能较低
  2. 相对不安全,破坏了封装性(因为通过反射可以获得私有方法和属性)

解决方案:

  1. 通过 setAccessible(true) 关闭JDK的安全检查来提升反射速度
  2. 多次创建一个类的实例时,有缓存会快很多
  3. ReflflectASM 工具类,通过字节码生成的方式加快反射速度

5、怎么利用反射动态创建对象实例

使用 Class 对象的 newInstance() 方法:
使用 Class 对象的 newInstance() 方法来创建该 Class 对象对应类的实例,但是这种方法要求该 Class 对象对应的类有默认的空构造器

使用 Constructor 对象的 newInstance() 方法:
先使用 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 newInstance() 方法来创建 Class 对象对应类的实例,通过这种方法可以选定构造方法创建实例,可以通过构造方法给对象赋初始值