Java异常处理机制以及try-catch-finally-return执行顺序
二,JAVA中用2种方法处理异常:
1.在发生异常的地方直接处理;
2.将异常抛给调用者,让调用者处理。
三,JAVA异常可分为3种:
(1)检查性异常:java.lang.Exception
(2)运行期异常:java.lang.RuntimeException
(3)错误:java.lang.Error
顶层是java.lang.Throwable类,检查性异常,运行期异常,错误都是这个类的子孙类。
java.lang.Exception和java.lang.Error继承自java.lang.Throwable,而java.lang.RuntimeException继承自java.lang.Exception.
检查性异常------程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。JAVA编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
运行期异常------这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,JAVA编译器强制要求处理这类异常。
错误------一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理
四,try-catch-finally-return执行顺序:
1,try-catch-finally执行顺序:
①,执行try{}块
②,如果try{}块有异常产生,则不执行后续代码,执行catch{}块,并且可以存在多个异常快
如果try{}块没有产生异常产生,则跳过catch{}块
③,无论有没有异常都要执行finally{}块,这里可以看出只要finally中有return,必然返回finally{}中的return
2,return的执行,
①,如果finally{}块中有return语句,只执行finally{}块中的return语句
②,如果finally{}块中没有return语句,如果try{}有异常,则返回catch{}中的return语句,不然执行try{}中return语句
在这种情况下,return语句块是在finally{}之后执行
finally{}中有return:
①如果try正常/或异常,则执行finally{}中的return
package com.testjava.Exception;
public class TryCatchfFinally {
public static void main(String[] args){
TryCatchfFinally tcf = new TryCatchfFinally();
System.out.println(tcf.testException());
}
public String testException(){
try {
System.out.println("start try");
int[] a= {2};
for(int i=0 ; i<1;i++){//i=2①
System.out.println(a[i]);
}
System.out.println("try end");
return "return of try not finally";
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("arrayIndexOutOfBoundsException");
return "return in catch arrayIndexOutOfBoundsException";
}catch(NullPointerException e){
System.out.println("nullPointerException");
return "return in catch";
}finally{
System.out.println("finally start try");
int[] a= {2};
for(int i=0 ; i<1;i++){//i=2②
System.out.println(a[i]);
}
System.out.println("finallyend end end");
System.out.println("finally");
return "return of finally";
}
}
}
①处i=1运行结果:
start try
2
try end
finally start try
2
finallyend end end
finally
return of finally
①处i=2运行结果:
start try
2
arrayIndexOutOfBoundsException
finally start try
2
finallyend end end
finally
return of finally
-------------------------------------------------------------------------------------------------
如果finally{}中没有return,
如果try{}正常,执行try{}return语句,如果异常执行catch{}中return语句,但是此事return语句返回在finally{}语句之后
package com.testjava.Exception;
public class TryCatchfFinally {
public static void main(String[] args){
TryCatchfFinally tcf = new TryCatchfFinally();
System.out.println(tcf.testException());
}
public String testException(){
try {
System.out.println("start try");
int[] a= {2};
for(int i=0 ; i<1;i++){//①
System.out.println(a[i]);
}
System.out.println("try end");
return "return of try not finally";
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("arrayIndexOutOfBoundsException");
return "return in catch arrayIndexOutOfBoundsException";
}catch(NullPointerException e){
System.out.println("nullPointerException");
return "return in catch";
}finally{
System.out.println("finally start try");
int[] a= {2};
for(int i=0 ; i<1;i++){//②
System.out.println(a[i]);
}
System.out.println("finallyend end end");
System.out.println("finally");
//return "return of finally";
}
//return "end fuction";
}
}
①处i=1运行结果:
start try
2
try end
finally start try
2
finallyend end end
finally
return of try not finally
①处i=2运行结果:
start try
2
arrayIndexOutOfBoundsException
finally start try
2
finallyend end end
finally
return in catch arrayIndexOutOfBoundsException
-----------------------------------------------------------------------------------------------------
finally{}中有错误,应该是直接退出
Java异常处理机制以及try-catch-finally-return执行顺序的更多相关文章
- JAVA 异常处理机制
主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...
- Java 异常处理机制和集合框架
一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...
- java异常处理机制 (转载)
java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...
- Java异常处理机制 —— 深入理解与开发应用
本文为原创博文,严禁转载,侵权必究! Java异常处理机制在日常开发中应用频繁,其最主要的不外乎几个关键字:try.catch.finally.throw.throws,以及各种各样的Exceptio ...
- 如何正确使用Java异常处理机制
文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...
- 【转】深入理解java异常处理机制
深入理解java异常处理机制 ; int c; for (int i = 2; i >= -2; i--) { c = b / i; System.out.println("i=&qu ...
- Java异常处理机制的秘密
一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw 2.finally中t ...
- Java异常处理机制及两种异常的区别
java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字. try 关键字后紧跟一个花括号括起来的代码块,简称try块.同理:下面的也被称为相应的块. ...
- java异常处理机制详解
java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...
- 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)
[转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...
随机推荐
- Java笔记(二)
10. public protected default private 同一个类中 √ √ √ √ 同一个包中 √ √ √ 子类 √ √ 不同包中 √ 11. 线程: s ...
- MediaScanner
http://blog.csdn.net/hellofeiya/article/details/8255898 http://www.cnblogs.com/halzhang/archive/2011 ...
- losbyday Linux下的强大工具之一akw(转),Shell必备
简单使用:awk :对于文件中一行行的独处来执行操作 .awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍:AWK命令介绍 a ...
- POJ 2395 Out of Hay
这个问题等价于求最小生成树中权值最大的边. #include<cstdio> #include<cstring> #include<cmath> #include& ...
- iOS 简易环形进度条
demo下载地址:https://github.com/haozheMa/LoopProgressDemo/tree/master ViewController中的代码 #import "V ...
- MIPI-3
上一篇文章讲了以下D_PHY层,这只是最底层的,针对于显示,上层由分出了四种,由专门的工作组进行定义,显示器方面叫做display wrok group,主要分为 DSC(display comman ...
- SD卡初始化以及命令详解
SD卡是嵌入式设备中很常用的一种存储设备,体积小,容量大,通讯简单,电路简单所以受到很多设备厂商的欢迎,主要用来记录设备运行过程中的各种信息,以及程序的各种配置信息,很是方便,有这样几点是需要知道的 ...
- win8.1远程连接Redis数据库
环境:redis安装在虚拟机Centos6.5系统上 通过java远程连接 问题一:报错 connected refused redis.conf 注释掉 #bind 127.0.0.1 问题二:还是 ...
- mysql5.7.10和mysql5.5.39两个版本对于group by函数的处理差异
原理还是没有搞清楚,在官网上看了一下,看的不是很清楚.一并都记录一下. 问题描述: 存在如下数据结构 sql: 求用户最近更新的那条记录 思路: 按照modify_time排序后按照user_id分组 ...
- C语言-知识点及学习路线
最近进行了为期两周的C语言培训,把几年前学过的C语言又重新学习了一遍,然后根据学习的内容和过程,总结了一下学习路线.这是基本的C语言学习路线,相当于编程语言类的基础,再根据自己究竟是要做单片机开发,还 ...