问题一、 该方法的返回值,执行步骤:
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指针不就是当前对象的引用吗?