java 程序求教

youxirenjia90 2016-08-06 12:04:00
class FinallyTest  
{
public static void main(String[] args) {

System.out.println(FinallyTest.test());;//一个语句后边可以跟多个分号,只有分号的语句就是空语句,所以不影响编译和运行。
//System.out.println(new FinallyTest().test());;
}

static int test()
{
int x = 1;
try
{

x++;
return x;
}
finally
{
++x;
}
//System.out.println("----------------");
//return ++x;
}
}

这个程序如果try里边的return x 去掉,那么能够执行到finally后边的程序,如果try里边的return加上,那么就会提示错误:Systeem执行不到。而另外一个程序如下:
class test {

public static void main(String[] args) {
new FinallyTest().test(0);
System.out.println("------------------");
new FinallyTest().test(1);
}

}

class FinallyTest {
public void test(int a) {
try {
int i = 0 / a;
return ;
} catch (Exception ex) {
System.err.println("程序异常了!");
} finally {
System.out.println("执行finally!");
}
System.out.println("执行finally后面的语句!");
}
}

此程序当a 赋值为1时不会提示System.out.println("执行finally后面的语句!");执行不到的错误
...全文
235 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_08_06_02 2016-08-20
  • 打赏
  • 举报
回复
get it
HerveyHall 2016-08-08
  • 打赏
  • 举报
回复
finally语句会在return之前执行
小灰狼 2016-08-08
  • 打赏
  • 举报
回复
程序执行很正常啊 第一个程序返回2,这个可能有点让人犯迷糊,其实就相当于是
class FinallyTest  
{
    public static void main(String[] args) {
          
        System.out.println(FinallyTest.test());;//一个语句后边可以跟多个分号,只有分号的语句就是空语句,所以不影响编译和运行。
        //System.out.println(new FinallyTest().test());;
    }
 
    static int test()
    {
        int x = 1;
        try
        {
             
            x++;
            int result = x;
            return result;
        }
        finally
        {
            ++x;
        }
        //System.out.println("----------------");
        //return ++x;
    }
} 
第二个程序,开始传入0,会出现异常,然后进入catch 块,打印错误,最后执行最后的打印语言 然后传入1,不会出异常,所以不进入异常打印语言,但是在 try 里执行返回语句,所以后面的打印语言不再执行
soton_dolphin 2016-08-06
  • 打赏
  • 举报
回复
finally 块一定会执行,除非: 1, 在try块里明确执行了system.exit() 2. jvm在finally 块之前就崩溃了
soton_dolphin 2016-08-06
  • 打赏
  • 举报
回复

static int test()
    {
        int x = 1;
        try
        {
             
            x++;
            return x;
        }
        finally
        {
            ++x;
        }
        //System.out.println("----------------");
        //return ++x;
    }
这个程序不管有没有异常在finally块执行完以后都会返回,所以最后面的System.out.println是不会执行到的。

class FinallyTest {
    public void test(int a) {
        try {
            int i = 0 / a;
            return ;
        } catch (Exception ex) {
            System.err.println("程序异常了!");
        } finally {
            System.out.println("执行finally!");
        }
        System.out.println("执行finally后面的语句!");
    }
} 
这个程序如果没有异常,在执行完finally块之后就结束了,不会执行最后面System.out.println.
如果有异常,在执行return语句之前就会跳到catch块,之后执行finally块,最后执行System.out.println("执行finally后面的语句!");
nikyotensai 2016-08-06
  • 打赏
  • 举报
回复
这个问题不是一般的奇葩,我只想说a是变量。凭什么判断执行不到。 就好比一个清官的不能收别人的贿赂,你塞钱给他判断不要,但你表示友好送了一包看不到里面的辣条给他,他又不介意吃辣条。但里面塞了100w的支票,他不能收,但不打开他不知道。他会把他当普通辣条收下。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧