-
class
A1 {
-
public
static
void
main(String[] args) {
-
System.out.printf("x:%d______testt():%d_____x:%d\n"
,x,testt(),x);
-
}
-
-
static
int
x = 99;
-
public
static
int
testt() {
-
try
{
-
return
x;
-
} catch
(Exception e) {
-
} finally {
-
x = 8;
-
}
-
return
x;
-
}
-
}
Throws: Lists the exceptions a method could throw.
Throw: Transfers control of the method to the exception handler.
首先记录一下:
throws 是在方法后面,例出该方法可能抛出的异常
throw 是在catch语句块里主动抛出的异常
下面的代码是测试try catch finally的顺序和对变量的影响
public class TestReturnFinally {
public static void main(String[] args) {
TestReturnFinally test = new TestReturnFinally();
int a = test.testReturnFinally();
System.out.println(a + "\n");
a = test.test2();
System.out.println(a + "\n");
a = test.test3();
System.out.println(a);
}
/**
* yes b>25 : 111 finally
*/
public int testReturnFinally() {
int b = 23;
try {
System.out.println("yes");
return b += 88;
} catch (Exception e) {
System.out.println("error : " + e);
} finally {
if (b > 25) {
System.out.println("b>25 : " + b);
}
System.out.println("finally");
}
System.out.println("out return");
return b;
}
/**
* finally的return覆盖原return 返回100
*
* @return
*/
@SuppressWarnings("finally")
public int test2() {
int b = 23;
try {
System.out.println("yes");
return b += 88;
} catch (Exception e) {
System.out.println("error : " + e);
} finally {
if (b > 25) {
System.out.println("b>25 : " + b);
}
System.out.println("finally");
return 100;
}
}
/**
* 返回23,<br/>
* 如果finally语句中没有返回语句覆盖的话, <br/>
* 那么原来的返回值就不会变,不管你是不是改变了要返回的那个变量
*
* @return
*/
public int test3() {
int b = 23;
try {
System.out.println("yes");
return b;
} catch (Exception e) {
System.out.println("error : " + e);
} finally {
if (b > 25) {
System.out.println("b>25 : " + b);
}
System.out.println("finally");
b = 100;
}
return -1;
}
}
运行代码的结果是:
yes
b>25 : 111
finally
111
yes
b>25 : 111
finally
100
yes
finally
23
由上述结果可以总结:
return 语句会把运算先进行完成,不真正的返回
若有异常抛出则进行catch语句的代码
在return真正执行之前,会执行finally语句,
若finally语句有对返回变量的修改,则原返回变量不会变
若finally有把原return 语句的覆盖,则会覆盖原return 语句。
更详细的解析可以参考:http://blog.csdn.net/exsuns/archive/2010/01/20/5217669.aspx
其中讲解的部分是:
class A1 {
public static void main(String[] args) {
System.out.printf("x:%d______testt():%d_____x:%d\n" ,x,testt(),x);
}
static int x = 99;
public static int testt() {
try {
return x;
} catch (Exception e) {
} finally {
x = 8;
}
return x;
}
}
执行结果是:
x:99______testt():99_____x:8
分析一下结果,刚开始X的值是99
->执行testt()方法
->进入方法的try语句
->执行return
x; //这时x被JVM存在了栈区的局部变量栈区里
->然后执行finally里的x=8 //这句更新了全局变量里的static int x,
最后testt方法执行完 JVM会把 try里的这句return的局部变量load到操作数栈.所以结果就清楚了
分享到:
相关推荐
17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...
Java的 try 与 catch finally关键字的使用
### Java中try-catch的用法详解 #### 一、基本概念 在Java编程语言中,`try-catch`结构是一种用于处理程序运行时可能出现的异常情况的重要机制。通过使用`try-catch`块,开发者可以更加精细地控制程序的行为,并...
总结来说,`try-catch`嵌套在Java中用于更精细化的异常处理,允许我们针对不同类型的异常执行不同的恢复策略。通过这种方式,我们可以编写更健壮、更易维护的代码,确保程序在面对错误时能够优雅地处理并继续运行。
本文将深入探讨Java中的`try-catch-finally`语句块,以及它们在异常处理中的作用。 首先,`try`块是异常处理的起点。在这个代码段中,我们通常会放置可能会抛出异常的代码。当Java执行到可能抛出异常的代码行时,...
try catch组合是Java中最基本的异常处理方式。其工作原理是,在try块中执行可能会抛出异常的语句,然后在catch块中捕获并处理异常。try catch组合的语法结构如下: ```java try { // 可能会抛出异常的语句 } catch...
如果系统提供的异常类无法满足需求,开发者可以创建自己的异常类,继承自系统提供的异常类(如Java中的`Exception`类),添加额外的信息或功能。 8. **异常的最佳实践** - 应尽量避免在`catch`块中只简单地忽略...
总的来说,`try-catch`机制是Java中异常处理的核心,它提供了对程序运行时错误的优雅处理方式,帮助开发者编写更加健壮的代码。通过合理地使用`try-catch`,我们可以确保程序在遇到问题时不会无端崩溃,而是能够适当...
Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据
总结来说,`try-catch-finally`结构是Java中处理异常的关键工具,它允许开发者优雅地处理错误,保持程序的健壮性,同时确保必要的清理工作得以执行。通过正确使用这些结构,可以提高代码的可读性和可维护性。
try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try...
VB.NET 演示带Finally的Try Catch 异常处理用法...使用Finally的好处是,把资源释放或状态还原的代码放到finally块中,可以保证在try和catch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。
19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的try…catch语句.zip19.java嵌套的...
在Java中,try…catch…finally语句块是异常处理的主要形式。Try块中可以包含多个语句,catch块中可以包含多个异常类型,finally块中可以包含资源的释放代码。通过try…catch…finally语句块,我们可以轻松地处理...
try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return 执行顺序的规则和特点。 首先,我们需要了解 try...
当代码执行到try语句块中时,如果出现了异常,Java虚拟机会将其捕获并抛出到catch子句中,在catch子句中可以进行异常处理和错误信息的返回。try catch语句可以捕获到各种类型的异常,包括运行时异常和检查异常。 而...
java.try-catch-finally(处理方案示例).md
在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视
本示例中的"trycatch.zip"文件内容就是展示了如何在Golang中模拟`try...catch`和`try...catch...finally`。 Golang的核心错误处理方式是通过返回错误值。通常,函数会返回一个错误值,如果在执行过程中遇到问题,就...
`try-catch-finally`语句块是C#中用于捕获和处理异常的关键结构。下面我们将详细解析这个语句块的用法,并通过实例来展示其功能。 1. `try`块: `try`块包含可能抛出异常的代码。当在`try`块内的代码执行过程中...