try{
……
return;
}catch(Exception e){ e.printStackTrce; }finally{ ……
}
上述程序块中,在try中没有发现异常的话,finally块中的语句是否会执行?
……
return;
}catch(Exception e){ e.printStackTrce; }finally{ ……
}
上述程序块中,在try中没有发现异常的话,finally块中的语句是否会执行?
解决方案 »
- java properties文件读取
- 老师说这有错,我看不出来哪错了,帮帮我啊
- 跪求一个愿意帮助j2ee新手的qq群
- 关于criteria.between的问题?高手求救!
- No action instance for path /register could be created
- 用dom4j解析XML文件的问题!急!!!
- j2ee用@Resource注解报空指针错
- Apache日志问题.....急
- 关于struts的问题?
- ■■■ 在线等,求一个java的课程设计下载(航空公司定票系统)■■■
- hibernate 1对1 From 主表 会产生很多查询子表sql
- 3 Finger项目开发团队招募志愿者
public class Test { public static void main(String[] args) throws Exception {
foo();
} static int foo() throws Exception {
try {
System.out.println("1");
System.exit(1);
System.out.println("2");
return 2;
} finally {
System.out.println("3");
}
}
}
建议你写一个测试类体会体会
所以finally一般用来做一些清尾工作,如:释放连接,等等.
除非你在catch里关了JVM .
程序会先执行finally中的代码然后执行return
例如
try{
int a=10;
int b=0;
a=a/b;
System.out.println("能执行后面的语句吗?")
}
catch(Exception e)
{
....
}
finally
{
System.out.println("这一句是会执行的哦!");}
运行程序后,你会发现System.out.println("能执行后面的语句吗?")没有打印出来
System.out.println("这一句是会执行的哦!");这一句打印出来了
foo();
} static int foo() throws Exception {
try {
System.out.println("1");
//你在这里加入一段异常代码,能帮你更好的理解
System.out.println(5/0);//被零除
System.exit(1);
//System.exit(0);//不管是否是正常退出或异常退出
System.out.println("2");
return 2;
} finally {
System.out.println("3");
}
}
}
结果:
1
3
Exception in thread "main" java.lang.ArithmeticException: / by zero
这个问题以前scjp考过
大家猜猜return的是哪一个?
:)
发生异常与否,finally里的语句都会在return之前执行。
发生异常与否,finally里的语句都会在return之前执行。呵呵 灌水哦
那它永远不执行finally.O(∩_∩)O哈哈~
你可以写个小例子,设上断点试试看!
除强制退出外System.exit()
都执行
当没有发现异常的话finally里的语句会在return之前执行
System.exit(0);就不会执行了。
如果有Exception 同样会执行 finally 中的语句。
public String toString(){
return "A very important exception!";
}
}
class TrivialException extends Exception{
public String toString(){
return "A trivial exception!";
}
}
public class Test {
void f() throws VeryImportantException{
throw new VeryImportantException();
};
void dispose() throws TrivialException{
throw new TrivialException();
}
public static void main(String[] args) {
try {
Test t = new Test();
try {
t.f();
} finally {
t.dispose();
}
} catch (Exception e) {
System.out.println(e);
}
}
}重要的异常被无关紧要的异常给替换掉了
public static void main(String[] args) {
int a=1;
try {
a=a/0;
}catch(Exception e) {
System.out.println("catch");
return;//当return时,finally中的语句会执行。
//System.exit(0);
//若用上这句,finally中的语句不会执行。直接返回,退出程序。
} finally
//当没有System.exit(0);时,无论是否发生异常它都会执行。{
System.out.println("finally");
}
}
}
除了system.exit()外,都会执行.
编程时应该先考虑用try-catch,而不是throws
捕获异常的格式:
try{
//可能发生异常的代码....
}catch(xxException e){
//异常发生以后处理的代码
}finally{
//不管发生不发生异常一定要执行的代码
}
finally可以出现1到N次,如果catch不出现就必须出现finally,catch出现了finally随便出现不出现
try只能出现一次,catch出现0-1次
它的运行顺序:
1,如果不发生异常时候执行try-finally
2,发生异常,try必定冲断,到catch
3,发生异常,try冲断到finally
4,发生异常,try冲断catch到finally继续运行下去,因为捕获了异常
try{
1
2
3
}catch(){
4
}
finally{
5
}
6
2若发生异常,则程序执行了1,2,4,5,6执行完毕
方法终结的3种,1,代码执行完了;2,执行到return ;3,有未捕获异常抛出
int a = foo();
System.out.print(a);
} static int foo() throws Exception {
try {
System.out.println("1");
//System.exit(1);
System.out.println("2");
return 2;
} catch(Exception e){
e.printStackTrace();
}finally {
System.out.println("3");
return 8;
}
}}
理解一下这个
还是System.exit(0);
这个什么区别啊!
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = test();
System.out.println("a = " + a);
System.out.println("i = " + i);
} static int test() { try {
++i;
return i;
} catch (Exception e) { } finally {
System.out.println(i);
i=5;
}
return 100;
}
}