4.JAVA基础面试题:重要知识

四.JAVA基础面试题:重要知识

1.为什么JAVA只有值传递

2.JAVA获取运行时类的四种方式

3.动态代理和静态代理的对比

4.unsafe是什么

5.泛型擦除机制出现的问题?

四.JAVA基础面试题:重要知识

1.为什么JAVA只有值传递

  • 实参:传递给形参的实际参数。
    形参:接受实参的参数。
  • 值传递:方法接受实参并且形参生成拷贝。
    引用传递:方法接受实参且形参是实参变量的地址,不生成拷贝,相当于是给实参的引用变量起别名
  • JAVA只有值传递
    引用类型传过去也为地址值,生成副本。
    基本类型传过去为字面量,生成副本。

2.JAVA获取运行时类的四种方式

  • 类.class
  • class.ForName
  • 实例.getClass
  • 类加载器.loadClass

3.动态代理和静态代理的对比

  • ①静态代理
    定义接口,定义实现接口的被代理类,定义实现接口的代理类(内置被代理类)
  • ②动态代理
    • jdk动态代理(代理实现了接口的类)
      Proxy.newProxyInstance(loader,interfaces,invocationhandler)
      invocationhandler要重写invoke方法,参数proxy为代理类,method为被代理类的原生方法,args为传入的参数。动态代理调用方法实际调用invoke方法。

    • CGLIB动态代理(JDK只能代理实现接口的类,其可以通过继承实现代理,被代理类类不需要实现接口)

  • ③对比静态代理和动态代理。
    动态代理更加灵活,不需要写死代码。
    动态代理是在运行时动态生成字节码文件并加载到JVM中,而静态代理编译时就将代理类编译为字节码文件。

4.unsafe是什么

  • unsafe是不安全操作的方法
    可以直接访问内存资源,自主管理内存资源等。
    依赖本地方法(native)。

5.泛型擦除机制出现的问题?

  • 泛型无法用在重载方法的参数中(擦除后参数会相同)
  • 泛型无法用在catch中的异常中(擦除后两个异常会相同)
  • 泛型类中存在静态变量(不同泛型参数公用一份静态变量)

未更新

你可能感兴趣的:(面试题,java,jvm,面试)