Java退出语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java退出语句相关的知识,希望对你有一定的参考价值。

public void quit()

int option = JOptionPane.showConfirmDialog(frame, "您是否确定要退出?", "退出", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION)

System.exit(0);


这段程序我知道是终止结束的 但int 和 if 语句里的就有点看不懂了。。。麻烦高手指点一下

return语句和其他控制结束语句的区别
Java中结束语句主要有四类:return,break,continue以及goto。但是goto不常用,所有此文不对此讨论。
(1)return语句:是指结束该方法,继续执行方法后的语句。
(2)break语句:是指在循环中直接退出循环语句(for,while,do-while,foreach),break之后的循环体里面的语句也执行。
(3)continue语句:是指在循环中中断该次循环语句(for,while,do-while,foreach),本次循环体中的continue之后语句不执行,直接跳到下次循环。

return在try-catch-finally语句中的使用
若在 try或catch语句里面有return语句,finally语句和return语句的执行顺序问题:
若有finally语句,则无论如何,都会执行该语句,在try或catch中的return语句会将它的返回值压入栈内,然后执行finally语句,当finally执行完成后,若finally语句里有return语句,则执行return语句并结束。若finally没有return语句,则返回被保存的栈里的return语句,再执行。然而,在压栈时候,要注意压入栈内的是什么东西,是值本身还是引用,若是引用则引用的值会改变,若是变量值,则不会改变。
下面是一位大牛分析的,很给力,大家一定要仔细看下:finally小特性。

return语句在try-catch-finally中使用情形:
(1)若try执行成功后返回,在try和catch里面都执行return语句,这样情况与4相同,但该方法更佳,因为,可以立刻查看出异常的抛出情况。
(2)若只需要在try和catch都执行后还需继续执行相关语句,则在try-catch所有语句后执行return语句;
(3)若catch执行后返回,则在catch和所有语句后执行return语句;
(4)若try执行成功后返回,则在try和全部语句后使用return语句;
参考技术A 加上注释就更明白了。

public void quit()
/*
* 在屏幕上显示对话框,对话框内询问用户“您是否确定要退出?”,并在
* 对话中显示“Yes”和“No”两个按钮。如果用户选择“Yes”按钮,则
* 对话框返回JOptionPane.YES_OPTION常量,该常量被赋值给option变量。
* 如果用户选择“No”按钮,option变量最终会被赋值为

*
“JOptionPane.YES_OPTION”常量。
*/
int option = JOptionPane.showConfirmDialog(frame,

"您是否确定要退出?", "退出",

JOptionPane.YES_NO_OPTION);
/*
* 如果option的值为 JOptionPane.YES_OPTION,则说明在上面对话框中用户
* 选择的是“Yes”按钮,如果符合这个条件,整个程序正常退出。
*/
if (option == JOptionPane.YES_OPTION)

System.exit(0);

参考技术B int option代表你点的按钮是: 退出数字,还是取消数字(退出代表数字几,取消也代表一个数字)if(option == JOptionPane.YES_OPTION) 数字间做比较这个YES_OPTION是一个常量,这里是代表的一个数字此处意思为:如果你点的是退出,那就System.exit(0); 参考技术C option会依照你的选择返回个int值来判断你选择了哪个.然后if里面判断如果int的值等于JOptionPane.YES_OPTION就退出了,(JOptionPane.YES_OPTION和JOptionPane.NO_OPTION两个的返回int值不同)

Java finally语句到底是在return之前还是之后执行

看过网上关于Java中异常捕获机制try…catch…finally块中的finally语句是不是一定会被执行的讨论也有很多。

首先明确一点,下面两种情况finally肯定是不执行的: 
1). return语句在try之前,还没执行就返回了,当然不执行。 
2). try语句中用了system.exit(0)强制退出JVM,暴力退出当然也不会执行。

先来看下面的代码

package com.loongshaw;

public class TryReturnFinally {

     public static void main(String[] args) {

         System.out.println(test1());        
     }

     public static int test1() {

         int b = 1;

         try {           
             System.out.println("try block");           
             return ++b;             
         }
         catch (Exception e) {           
             b = 10;
             System.out.println("catch block");
         }
         finally {              
             ++b;
             System.out.println("finally block");
         }       
         System.out.println("last block");
         return b;
     }
}

如果你觉得其执行结果是3,那么请你继续看下去,中招了吧,哈哈。 
先看看执行结果吧:

try block
finally block
2
  • 1
  • 2
  • 3

可以看出,上面代码的执行结果是2。常规想法其finally也执行了,try中也执行了,明明执行了两个++b呢,咋回事呢?

这个时候,咱打断点看看: 
(1). 当程序执行到try中的return语句时,这时b还是1. 
技术分享图片
(2). 接着程序执行到finally语句时,执行了++b,b变为2. 
技术分享图片
(3). 这时,我们点击try…return中的b,发现其值变为2. 
技术分享图片

以上结果说明了一点:return语句执行了,然后再执行了finally语句,但是return语句并没有直接返回,而是待finally语句执行完了再返回。

通过下面这个测试用例加强理解:

package com.loongshaw;

public class TryReturnFinally {

     public static void main(String[] args) {
         System.out.println(test2());
     }

     public static String test2() {

         try {

             System.out.println("try block");           
             return test3();             
         }
         catch (Exception e) {

             System.out.println("catch block");
         }
         finally {

             System.out.println("finally block");
         }

         System.out.println("last block");
         return "last block";
     }

     public static String test3() {                      
         System.out.println("return block");
         return "output return block";
     }

}

执行结果:

try block
return block
finally block
output return block

通过上述结果可以得出,在执行try语句中的return时,其test3()方法是被执行了的,其返回值保存在一个临时变量中,然后去执行finally语句。

 try {           
       System.out.println("try block");         
       return test3();           
    }

最后输出存进临时变量返回值。

output return block
  • 1

可能大家会继续说,如果finally和catch中有return,那是一种什么情况: 
(1) 首先看catch中有return

 public static int test4() {

         int b = 1;

         try {

             System.out.println("try block");           
             return b/0; 

         }
         catch (Exception e) {
             System.out.println("catch block");
             return ++b;
         }
         finally {

             b = b+ 10;
             System.out.println("finally block");
         }
     }

结果

try block
catch block
finally block
2

可见,catch中的return与try一样,finally都会执行,但是不影响try和catch中的return结果。

(2) 然后看finally中有return

public static int test5() {

         int b = 1;

         try {

             System.out.println("try block");           
             return ++b; 

         }
         catch (Exception e) {

             ++b;
             System.out.println("catch block");
             return b;
         }
         finally {

             b = b+ 10;
             System.out.println("finally block");
             return b;
         }
     }

结果

try block
finally block
12

可见,finally中的return直接返回了,这与try和catch中的return是不同的。


大家可能发现test1()方法最后的return是没有执行的,是不是。

public static int test1() {  
    ...    
    System.out.println("last block");
    return b;
    ...
}

通常情况是不会执行的,除非触发了catch。下面是修改后的片段代码:

 public static int test1() {

         int b = 1;

         try {

             b = b/0;
             System.out.println("try block");           
             return ++b; 

         }
         catch (Exception e) {

             b = 10;
             System.out.println("catch block");
         }
         finally {

             b = b+ 10;
             System.out.println("finally block");
         }

         System.out.println("last block");
         return b;
     }

执行结果:

 catch block
finally block
last block
20

通过上述结果可以得出,在catch触发时,最外层的return是会被执行的。

总结:

  1. finally语句在try和catch语句中的return执行后、返回前执行;
  2. 若finally语句中没有return,则其执行结果不影响try和catch中已确定的返回值;
  3. 若finally语句中有return,则其执行后的结果会直接返回。










以上是关于Java退出语句的主要内容,如果未能解决你的问题,请参考以下文章

Java面试金典

我的学习记录-JAVA SE 04

Java finally语句到底是在return之前还是之后执行

days02--java语句

java异常

JAVA基础整理-19.foreachreturnbreakcontinue语句