• Java宝典(二)


    --String s = "a" + "b" + "c" + "d"; 一共创建了多少个对象?

    --对于如下代码:

    String s1 = "a";
    String s2 = s1 + "b";
    String s3 = "a" + "b";
    System.out.println(s2 == "ab");       // false
    System.out.println(s3 == "ab");       // true

    说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。

    对于String s = "a" + "b" + "c" + "d"; 相当于只创建了一个String对象。

    String s = "a" + "b" + "c" + "d"; 
    System.out.println( s == "abcd");     //true

    --下面的程序输出的结果是什么?

    public class Demo {
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Demo d = new Demo();
            int a = d.get();
            System.out.println(a);
        }
        public int get(){
            try{
                return 1;
            }
            finally{
                return 2;
            }
        }
        
    }

    --返回结果是2.

    可以通过下面一个例子程序来帮助解释这个问题。

    public class Demo {
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println(new Demo().test());        
        }
     
        int test(){
            try{
                return func1();
            }
            finally{
                return func2();
            }
        }
        
        int func1(){
            System.out.println("func1");
            return 1;
        }
        
        int func2(){
            System.out.println("func2");
            return 2;
        }
    }
     
     
    执行结果:
    func1
    func2
    2

    可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return func1()语句先执行,finally语句后执行,所以,返回的结果是2。return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时语句并不是马上返回,他要执行finally语句后才真正的开始返回。

    结论:finally中的代码在return和break语句后执行。

    --finalfinallyfinalize的区别。

    --final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类如果要访问局部变量,局部变量必须要定义成final类型。

    finally是异常处理语句结构的一部分,表示总是执行。

    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

    --同步和异步有何不同,在什么情况下分别使用他们?

    --如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

      当应用程序在对象上调用了一个需要花费很长时间来执行的方法,或者IO调用,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步往往很有效率。

  • 相关阅读:
    gcvt(),ecvt(),fcvt()的区别
    SQLITE3 使用总结
    C++的类型转换浅析
    JAVA Class21
    JAVA Class20
    JAVA Class19
    JAVA Class18
    JAVA Class17
    JAVA Class16
    关于hover失效问题(!important)
  • 原文地址:https://www.cnblogs.com/4everlove/p/3680387.html
Copyright © 2020-2023  润新知