`
shixiaomu
  • 浏览: 382823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java try catchfinaly throws throw return 关系 终于搞明白了.

    博客分类:
  • java
 
阅读更多
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 在Java编程语言中,`throw`和`return`是两个非常重要的关键字,它们分别用于处理异常和返回方法的结果。本文将详细介绍这两个关键字的用法、特点以及它们与`finally`块之间的关系。 #### ...

    java中throws的使用问题[参考].pdf

    Java异常处理主要涉及五个关键字:`try`、`catch`、`throw`、`throws`和`finally`。 1. **`try`**: `try`块用于包含可能抛出异常的代码。如果在`try`块中发生了异常,程序的执行会立即跳转到与之匹配的`catch`块...

    throws与throw区别

    本文将深入探讨“throws”与“throw”两个关键字的区别,以及它们在Java异常处理机制中的作用。 ### throws关键字 `throws`关键字主要用于方法签名中,用于声明一个方法可能会抛出的异常类型。当一个方法内部可能...

    Java软件开发实战 Java基础与案例开发详解 10-4 使用throw和throws引发异常 共5页.pdf

    ### Java软件开发实战:使用throw和throws引发异常 #### 1. Java异常处理基础 在Java编程中,异常处理是一项非常重要的技术,用于处理程序运行过程中可能出现的各种异常情况。异常处理主要包括异常的捕获、处理...

    java处理异常的机制关键字throw和throws使用解析

    Java处理异常的机制关键字throw和throws使用解析 Java处理异常的机制关键字throw和throws是Java语言中两个非常重要的机制关键字,它们都是用来处理异常的,但它们之间存在着明显的区别。下面我们将通过示例代码详细...

    java try…catch捕获异常的实例

    即使在`try`或`catch`块中有`return`语句,`finally`块中的代码也会被执行: ```java try { // 代码 } catch (ExceptionType1 e1) { // 处理 } catch (ExceptionType2 e2) { // 处理 } finally { // 清理资源,...

    throw的详细用法.doc

    在编程领域,`throw` 关键字主要用于异常处理机制,特别是在Java、C#等面向对象的语言中。异常处理是程序在遇到错误或异常情况时的一种响应机制,它允许程序员优雅地处理错误,而不是让程序突然崩溃。以下是 `throw`...

    MD5和RSA加密算法Java完成实现

    MD5和RSA是两种在计算机安全领域广泛应用的加密算法,它们在Java中有着广泛的实现。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的摘要,通常为128位,通常表示为...

    java class反编译后的代码还原

    Java类反编译后的代码还原 Java类反编译后的代码还原是指将编译后的Java类文件(.class)转换回Java源代码的过程。在这个过程中,可能会出现一些不正常的代码,例如label0 :_L1 MISSING_BLOCK_LABEL_30、JVM INSTR ...

    Java加密技术详解(参考文档)

    public static KeyPair generateKeyPair() { try { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA_ALGORITHM); SecureRandom secureRandom = SecureRandom.getInstanceStrong(); ...

    375.373.JAVA基础教程_异常处理-处理异常:try-catch方式(375).rar

    异常处理有五个关键字:try、catch、finally、throw和throws。在这其中,try-catch是最基本的结构,用于捕获并处理异常。 1. **try**:try块包含可能会抛出异常的代码。如果try块中的代码抛出了一个异常,那么控制...

    JAVA得到网卡物理地址(windows和Linux)

    JAVA 获取网卡物理地址(Windows 和 Linux) 在 Java 中获取网卡物理地址是一项常见的需求,特别是在开发网络相关的应用程序时。网卡物理地址,也称为 MAC 地址,是一个唯一的识别码,用来标识网络设备。今天,我们...

    JAVA中异常处理的WORD文档

    总之,Java的异常处理机制是通过`try`, `catch`, `finally`, `throw`, 和 `throws`关键字实现的,它提供了对程序运行时错误的有效管理,增强了程序的健壮性。理解并熟练运用这些概念对于编写高质量的Java代码至关...

    各种java加密算法工具类

    在Java编程语言中,加密算法是安全领域的重要组成部分,用于保护数据的隐私和完整性。这里我们主要关注的是"各种java加密算法工具类",其中包括了RSA和MD5等常见的加密方法。下面我们将深入探讨这些算法及其在Java中...

    毕业就业-刷题库Java面试题大全(2021年-2022年).rar

    4. throw 和 throws 的区别是什么? 5. final、finally、finalize 有什么区别? 6. NoClassDefFoundError 和 ClassNotFoundException 区别? 7. try-catch-finally 中哪个部分可以省略? 8. try-catch-finally 中,...

    JAVA 发送http请求工具类

    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关闭成功"); } ...

    java异常原理

    即使在`try`或`catch`块中有`return`语句,`finally`块仍然会被执行。 6. throws关键字: 如果方法可能会抛出检查异常但不处理,可以在方法签名中使用`throws`声明,将异常抛给调用者处理。例如: ```java ...

Global site tag (gtag.js) - Google Analytics