天天看点

第一次的面试题

问题一、 该方法的返回值,执行步骤:
public static String testString(){
    String value=""; ---------------------- 1
    try {
        value="test1";---------------------- 2
        return value;---------------------- 3
    } catch (Exception e) {
        e.printStackTrace();---------------------- 4
    }finally {
        value="test2";---------------------- 5
    }
    return  value;---------------------- 6
}
           

  答案:

    返回值: “test1”、 执行顺序为: 1,2,3,5。

      解析:

      毫无疑问finally是肯定会运行的,你想想释放资源不都是放在finally中的吗? 接下来就是运行finally的时机了, 那么他该是return之前运行呢?还是return之后运行呢?(思考几秒)

      答案都不是,他是在执行了return的中间运行。 当方法已经调用return方法将返回值压入方法内存了,但是程序没有返回 而是去执行finally。 并且finally调用完毕之后还会默认的调用 return ; 表示finally运行完毕,main方法可以执行其他方法了。

      所以返回值是 “test1”,但是如果finally方法中也有return XXX;的话,没毛病,返回值肯定是最后执行的return;

问题二、下面的程序是否有错
public class Problem {

	public Problem(){
    	//报递归错误。        在调用构造函数之前对象已经创建了,因为this指针。构造函数只是为了初始化值。
    	this();
	}

    String a="1234";
    char b[]={'a','b','c'};
    public static void main(String[] args) {
        Problem problem=new Problem();
        problem.show(problem.a,problem.b);
    }

    public void show(String a,char[] b){
        a="123456";
        b[0]='v';
        System.out.println("我被运行了。"+a+ Arrays.toString(b));
    }
   }
           

  答案:  main方法是Java程序的入口方法。所有方法的执行都必须在main方法内部。 那么也就是说当main方法运行的时候,也就是程序运行的时候了。那是不是调用main方法的类已经创建成功了呢?    程序都在运行了,类却没有创建成功是不是很扯淡。

  类都创建成功了,当然就可以创建对象,当然就可以调用对象方法了。

问题衍生: 为什么对象还没有创建好,就能在构造函数中使用this指针了?

  Java对象建立其实在构造函数之前,构造函数只是将对象的属性初始化。 他会在构造函数的第一行代码前,默认的执行 this() 。这不就创建对象了? 想想this指针是什么? this指针不就是当前对象的引用吗?

继续阅读