package com.easou.cas06proxytest;
import java.io.IOException;
public class ExceptionTest {
public static void main(String[] args) throws Exception {
int k=0;
try {
k=test.test2();
System.out.println("main" + k++);
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("null"+k);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("end");
}
}
class test {
public static int test2() throws Exception {
int j=0;
try {
System.out.println("try");
int i = 0;
if (i < 1) {
throw new IOException();
}
j=1;
System.out.println(j);
return j++;
} catch (IOException e) {
System.out.println("catch");
int w=0;
if(w<1)
throw new NullPointerException();
return j+100;
} finally {
System.out.println("finally");
int i = 0;
if (i < 1) {
// throw new Exception("aa");
}
j=2;
// return j;
}
}
}
finaly 和return 关系..
finaly中如果有return会吃掉任何异常(throw不起作用),return相当于中断退出 不会返回try return出,或throw 异常.
finaly中如果没有return 代码会回到如return处,如果return 在try中,相当于跳过一部分代码的执行.发生异常后,到return之间的代码都不执行.
finaly 和throw 关系...
finaly 可以捕获 也可以不捕获直接覆盖任何类型异常 直接throw自己的异常.
如果没有上层捕获程序直接中断退出(线程中断).
如有捕获 直接返回上层或上上层catch处继续执行.
throw 和上层catch 关系
下层代码会直接到上层的catch处(跳过调用发起后,到catch之间所有代码)
throw 和return 关系:
有throw 没return(不会执行.)
我自己的理解和测试.不信把代码粘走试试.
package com.easou.cas06proxytest;
import java.io.IOException;
public class ExceptionTest {
public static void main(String[] args) throws Exception {
int k=0;
try {
k=test.test2();
System.out.println("main" + k++);
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("null"+k);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("end");
}
}
class test {
public static int test2() throws Exception {
int j=0;
try {
System.out.println("try");
int i = 0;
if (i < 1) {
throw new IOException();
}
j=1;
System.out.println(j);
// return j++;
} catch (IOException e) {
System.out.println("catch");
int w=1;
if(w<1)
throw new NullPointerException();
j++;
return j+100;
} finally {
System.out.println("finally");
int i = 0;
if (i < 1) {
// throw new Exception("aa");
}
j=2;
// return j;
}
return j;
}
}
这个证明 finally 的变量赋值 没有作用.
finally 为一个微型子函数.里面有return和throw 程序就中断了.返回上层.
如果没有.局部变量赋值没有任何意义,回return后全部变量全部失效.
Java虚拟机在每个try语句块和与其相关的catch子句的结尾 处都会“调用”finally子句的子例程。实际上,finally子句在方法内部的表现很象“微型子例程”。finally子句正常结束后-指的是finally子句中最后一条语句正常执行完毕,不包括抛出异常,或执行return、continue、break等情况,隶属于这个finally子句的微型子例程执行“返回”操作。程序在第一次调用微型子例程的地方继续执行后面的语句。
finally“微型子例程”不等同于方法函数的调用,finally子句都是在同一个栈内执行的,微型子例程的“返回”操作也不会涉及到方法退栈,仅仅是使程序计数器pc跳转到同一个方法的一个不同的位置继续执行
分享到:
相关推荐
### Java的throw和return 在Java编程语言中,`throw`和`return`是两个非常重要的关键字,它们分别用于处理异常和返回方法的结果。本文将详细介绍这两个关键字的用法、特点以及它们与`finally`块之间的关系。 #### ...
Java异常处理主要涉及五个关键字:`try`、`catch`、`throw`、`throws`和`finally`。 1. **`try`**: `try`块用于包含可能抛出异常的代码。如果在`try`块中发生了异常,程序的执行会立即跳转到与之匹配的`catch`块...
本文将深入探讨“throws”与“throw”两个关键字的区别,以及它们在Java异常处理机制中的作用。 ### throws关键字 `throws`关键字主要用于方法签名中,用于声明一个方法可能会抛出的异常类型。当一个方法内部可能...
### Java软件开发实战:使用throw和throws引发异常 #### 1. Java异常处理基础 在Java编程中,异常处理是一项非常重要的技术,用于处理程序运行过程中可能出现的各种异常情况。异常处理主要包括异常的捕获、处理...
即使在`try`或`catch`块中有`return`语句,`finally`块中的代码也会被执行: ```java try { // 代码 } catch (ExceptionType1 e1) { // 处理 } catch (ExceptionType2 e2) { // 处理 } finally { // 清理资源,...
Java处理异常的机制关键字throw和throws使用解析 Java处理异常的机制关键字throw和throws是Java语言中两个非常重要的机制关键字,它们都是用来处理异常的,但它们之间存在着明显的区别。下面我们将通过示例代码详细...
在编程领域,`throw` 关键字主要用于异常处理机制,特别是在Java、C#等面向对象的语言中。异常处理是程序在遇到错误或异常情况时的一种响应机制,它允许程序员优雅地处理错误,而不是让程序突然崩溃。以下是 `throw`...
MD5和RSA是两种在计算机安全领域广泛应用的加密算法,它们在Java中有着广泛的实现。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的摘要,通常为128位,通常表示为...
Java类反编译后的代码还原 Java类反编译后的代码还原是指将编译后的Java类文件(.class)转换回Java源代码的过程。在这个过程中,可能会出现一些不正常的代码,例如label0 :_L1 MISSING_BLOCK_LABEL_30、JVM INSTR ...
public static KeyPair generateKeyPair() { try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA_ALGORITHM); SecureRandom secureRandom = SecureRandom.getInstanceStrong(); ...
异常处理有五个关键字:try、catch、finally、throw和throws。在这其中,try-catch是最基本的结构,用于捕获并处理异常。 1. **try**:try块包含可能会抛出异常的代码。如果try块中的代码抛出了一个异常,那么控制...
JAVA 获取网卡物理地址(Windows 和 Linux) 在 Java 中获取网卡物理地址是一项常见的需求,特别是在开发网络相关的应用程序时。网卡物理地址,也称为 MAC 地址,是一个唯一的识别码,用来标识网络设备。今天,我们...
总之,Java的异常处理机制是通过`try`, `catch`, `finally`, `throw`, 和 `throws`关键字实现的,它提供了对程序运行时错误的有效管理,增强了程序的健壮性。理解并熟练运用这些概念对于编写高质量的Java代码至关...
在Java编程语言中,加密算法是安全领域的重要组成部分,用于保护数据的隐私和完整性。这里我们主要关注的是"各种java加密算法工具类",其中包括了RSA和MD5等常见的加密方法。下面我们将深入探讨这些算法及其在Java中...
4. throw 和 throws 的区别是什么? 5. final、finally、finalize 有什么区别? 6. NoClassDefFoundError 和 ClassNotFoundException 区别? 7. try-catch-finally 中哪个部分可以省略? 8. try-catch-finally 中,...
try (OutputStream os = connection.getOutputStream()) { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8)); writer.write(getPostDataString(params)); ...
return s; } public static void closesession()throws Exception{ s=sessionThread.get(); try{ if(s!=null){ s.close(); sessionThread.set(null); log.info("session关闭成功"); } ...
即使在`try`或`catch`块中有`return`语句,`finally`块仍然会被执行。 6. throws关键字: 如果方法可能会抛出检查异常但不处理,可以在方法签名中使用`throws`声明,将异常抛给调用者处理。例如: ```java ...