try/catch/finally知识点
trycatch是java中处理异常很常用的语句,在不知道程序什么情况下会出现违例(Exception)的情况下,使用trycatch机制大大增加的程序的安全性,程序执行顺畅出现异常及时处理保证程序继续执行的机制,这也是Java语言
健壮性,安全性的体现之一。
对于try/catch/finally中try中有return的情况下,finally是否会执行?答案是会执行,这就好比当调用一个方法时必须要先执行完方法里面的程序一样(单线程情况下程序自下行而下执行)那么finaly意思是不管你是否执行了try中的语句finally(最终都要执行)举个例子你要用我的杯子里面放酒但我的杯子里面还有水我是不是要先把水喝完?我不喝完水你不能倒酒.不过执行的结果要也分两种情况,try中纯在return的情况下要分两种情况返回值类型,和返回引用类型
int num=100;
test(num);
System.out.println(num);
String str2="zhaoqi0";
test3(str2);
System.out.println(str2);
String str="lisi";
str=test1(str);
System.out.println(str);
Person person = new Person("lisi",5);
person=test2(person);
System.out.println(person.getName());
1,
finally语句一定会执行除非程序退出,或者出现Errors;
2,当try中有return那么,返回值类型数据与返回引用类型数据有区别
3,try中return代码返回时,会先停顿一下,等待finally中代码执行完成后返回值
package Try_catch_finally;
public class TryCatchTest {
public static void main(String[] args) {
}
//值类型你是是我是我,数据存于方发栈中,且没有对象概念,找的是字面值
public static void test(int num){
try{
num=200;
}catch(Exception e){
e.printStackTrace();
}
finally{
num=300;
}
}
//String是特殊的引用类型(final修饰的,中存储char[]value值)数据存于常量池,在传址时和基本类型无区别可以怎么理解所以上面输出zhaoqio;
public static String test3(String str){
try{
str="zhangsan";
return str;
}catch(Exception e){
e.printStackTrace();
}
finally{
str="wangwu";
}
return str;
}
//返回String类型引用(所谓的引用就是地址和句柄相当于c中的指针)上面输出wangwu
zhangsan,可以看出finally的输出先与main方法中的输出
public static String test1(String str){
try{
str="zhangsan";
return str;
}catch(Exception e){
e.printStackTrace();
}
finally{
str="wangwu";
System.out.println(str);
}
return str;
}
//输出wangwu
public static Person test2(Person per){
try{
per.setName("zhangsan");
return per;
}catch(Exception e){
e.printStackTrace();
}
finally{
per.setName("wangwu");
}
return per;
}
}