• 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调用,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步往往很有效率。

  • 相关阅读:
    python学习笔记(unittest)
    python学习笔记(session)
    python学习笔记(requests)
    jmeter的学习(配置环境)
    Codeforces 576D. Flights for Regular Customers 题解
    Codeforces 1316F. Battalion Strength 题解
    2020年第十一届蓝桥杯省赛J-网络分析(带权并查集)
    第十一届蓝桥杯b组省赛 C.合并检测(内附详细的样例)
    蓝桥杯2020.7月真题走方格(到达终点的不同方案数)(记忆化搜索+DP)
    Codeforces Global Round 11 A. Avoiding Zero(思维构造)
  • 原文地址:https://www.cnblogs.com/4everlove/p/3680387.html
Copyright © 2020-2023  润新知