您的位置:首页 > 其它

try catch finally的执行顺序即结果

2017-11-19 20:53 351 查看
在java中数据的传递分为两种,一种是 值传递、另外一种是应用传递。值传递主要针对8中基本类型以及String类型。而应用传递则针对对象(包括8中基本类型的封装对象)。

下面对于这两种数据的传递分别用程序来测试下;

public class Test {
public static void main(String[] aStrings){
int x = 3;
String string ="zsq";
User user = new User();
user.setName("zsq");
change(x,string,user);
System.out.println("x="+x+",string="+string+",userName="+user.getName());
//输出结果为:x=3,string=zsq,userName=zhaosq
//结果说明基本类型和string作为参数传递时只是传递的具体的值,而对象传递时传递的是引用。
}

static void change(int x,String s,User user){
x++;
s = "zhaosq";
user.setName("zhaosq");
}

static class User{

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
}
上面讲的是作为参数传递那么作为返回值时,基本类型和对象也是一样的。下面集合try catch finally具体讨论下

public class Test {
public static void main(String[] aStrings){
System.out.println(change());//输出结果: 1
}

static int change(){
int x ;
try{
x = 1;
return x;//如果不发生异常将返回 1 注意不是返回3 即使finally语句块中改变了x的值,但是在执行finally语句块之前,程序已经将x的值(此时值为1)标记为了返回值。当然如果在finally语句块中写了另外的return 语句结果就不一样了。
}catch(Exception e){
x = 2;//如果发生了异常,并且异常为捕获的异常及其子类的话将会返回 2
return x;
}finally {
x = 3;
}
}
}
public class Test {
public static void main(String[] aStrings){
System.out.println(change().getName()); //输出结果: zsq
}

static User change(){
User user = new User();
try{
user.setName("zsq");
return user;//如果不发生异常将返回 "zhaosq" 注意不是返回"zsq" 因为在finally语句块中改变了 user对象的name属性
}catch(Exception e){
user.setName("zsq2");//如果发生了异常,并且异常为捕获的异常及其子类的话将会返回  “zsq2”
return user;
}finally {
user.setName("zhaosq");
}
}

static class User{

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: