美文网首页
java 汇总

java 汇总

作者: young_dreamer | 来源:发表于2016-07-25 16:35 被阅读21次

    反射中,Class.forName和Classloader.loadclass的区别
    加载,链接,初始化
    forName可以选择初始化类static块和static变量,ClassLoader.loadClass(className)实际调用的是ClassLoader.loadClass(name, false),第二个参数指出Class是否被link。因此区别就是看程序是否依赖于Class是否被初始化,是就必须用Class.forName(name)了。典型例子就是jdbc的driver,需要在static块中注册到manager


    异常

    1. 举例说明异常的结构,运行时异常和非运行时异常
    1. try-catch-finally-return的执行顺序
    • return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)
    • finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的最后。可行的做法有四: (1)return语句只在函数最后出现一次。
      (2)return语句仅在try和catch里面都出现。
      (3)return语句仅在try和函数的最后都出现。
      (4)return语句仅在catch和函数的最后都出现。 注意,除此之外的其他做法都是不可行的,编译器会报错。
      转自:http://qing0991.blog.51cto.com/1640542/1387200

    JVM

    • GC问题
      1. 两个相互引用的对象,会不会不被GC
      • 由于现在jvm用的基本都是GC Roots 可达性算法分析对象的存货,因此不存在相互引用就不被回收的情形,只要可达就不GC,不可达就标记GC。
      • 可作为GC root的有:1. 虚拟机栈中的引用对象、2. 方法区中的类静态属性引用的对象、3. 方法区常量引用的对象和本地方法栈中JNI的引用的对象。
      • JAVA不建议使用finalize()(所谓的析构方法),就是因为如果此方法使用不当(大多数情况下确实如此)会影响GC的可达性判断,使得对象出现起死回生的现象而无法被回收(finalize中重新将对象与一个引用关联就可逃过GC)。

    相关文章

      网友评论

          本文标题:java 汇总

          本文链接:https://www.haomeiwen.com/subject/dnlwjttx.html