文档章节

JAVA-Exception&Error

o
 osc_a22drz29
发布于 2019/03/23 22:01
字数 980
阅读 10
收藏 0

精选30+云产品,助力企业轻松上云!>>>

JAVA——Exception&Error

在万物皆对象的JAVA中,先让我们看看Exception和Error的地位吧:

avatar

可见Exception和Error都继承自Throwable类,所以二者既有相同也有不同之处。相同之处就是他们都是程序出错导致的,或说程序不正常运行才会实例化的类,不同之处就在于产生他们的的程序的出错原因不同,下面就来详细比较一下。

一,Exception&Error

从命名来看Error貌似比Exception要严重一点,事实确实如此。Error产生的情况一般是指不大可能出现且不可预料的情况,如JVM本身不正常,内存溢出,栈溢出等一些比较严重,会使程序终止的情况。而Exception通常是一些可以预料的不好的情况,如类型转换失败,多线程数据插入失败等,虽然程序出错,但可预料,一般也不会使程序终止。

二,未受检查异常和受检查异常

1,Error和Exception的子类RuntimeException都是未受检查的异常,也可以叫运行时异常,因为它们都是不可预料的,在程序运行时才会出现的异常。

2,Exception的其他子类是受检查的异常,是指程序员可以在代码中预料和捕捉到的程序异常,这也是程序员重点关注的地方。

三,异常处理

要搞清楚异常处理就得先知道try-catch-finally-return这几个关键字的语法和使用,它们在程序中的语法位置如下:

try{
    //可能会产生异常的语句
}catch(Exception e){
    //产生异常后才会执行的代码
}finally{
    //不管有没有产生异常,在执行完上面两个代码块后,此处代码都会执行
}

画个流程图更容易理解,如下:

avatar

*注意:*还有一个return的用法很多人会出错,当try-catch-finally中出现return语句时,要注意代码执行顺序,在代码中讲解,如下:

public int f1() {
		int res=0;
		try {
			res=1;
		}catch(Exception e){	
		}finally {
			res=5;		
		}
		return res;
	}
/*上面这段代码的执行结果按照前面的流程图推一下很容易知道f1()方法的返回值是5
但如果是下面这种代码形式呢
*/
public int f2() {
		int res=0;
		try {
			res=1;
            return res;
		}catch(Exception e){	
		}finally {
			res=5;		
		}
		return res;
	}
/*f2()的返回值应该是1,因为在try中执行到return语句时程序会先将要return的值入临时栈,此时finally中执行的操作改变res的值,但却不会影响到存在临时栈中return的值。
再看下面这种情况
*/
public int f3() {
		int res=0;
		try {
			res=1;
			return res;
		}catch(Exception e){	
		}finally {
			res=5;
			return res;
		}
	}
/*此时f3()返回值应该是5,因为程序会把finally中的return值替换掉try中的return值
*/

四,throw & throws

throw : 将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。(位置: 方法体内

throws : 如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。用它修饰的方法向调用者表明该方法可能会抛出异常(可以是一种类型,也可以是多种类型,用逗号隔开)(位置: 写在方法名 或方法名列表之后 ,在方法体之前。)

五,自定义异常

可以继承Exception或Throwable类来定义自己的异常类型

public class MyException extends Exception{
	public MyException() {
		
	}
	public MyException(String msg) {
		super(msg);
	}
}

异常抛出方法和自带异常一样,如下

public int exceptionTest(int a) throws MyException {
		if(a<10) {
			System.out.println("程序正常");
			return a;
		}
		else {
			throw new MyException("程序异常");
		}
	}

以及捕获异常如下

public static void main(String[] args) {	
		Main m=new Main();
		try {
			int res=m.exceptionTest(11);
		} catch (MyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Shell执行前先检查系统是否有JDK

errorexit () { echo "ERROR: $1 !!" exit 1 } [ ! -e "$JAVAHOME/bin/java" ] && JAVAHOME=$HOME/jdk/java [ ! -e "$JAVAHOME/bin/java" ] && JAVAHOME=/usr/java [ ! -e "$JAVAHOME/bin/ja......

老菜鸟0217
2018/10/10
20
0
mycat启动报Unable to start JVM: No such file or directory (2)【转】

mycat启动失败,查看日志 /mycat/logs/wrapper.log发现如下信息 1 STATUS | wrapper | 2017/11/22 16:15:17 | --> Wrapper Started as Daemon 2 STATUS | wrapper | 2017/11/22 16:15:17 | ......

osc_6ew996ka
2019/05/15
1
0
centOS 6下安装java、tomcat

centOS 6 下安装java centOS 默认有java的运行环境(gcj),安装sun的jdk前先卸载 gcj。 卸载gcj: #java -version <-查看当前gcj java的版本号(我这里得到的是 1.4.2) #yum -y remove jav...

vfast_wuwei
2014/05/15
0
0
centOS 6下安装java、tomcat

centOS 6 下安装java centOS 默认有java的运行环境(gcj),安装sun的jdk前先卸载 gcj。 卸载gcj: #java -version <-查看当前gcj java的版本号(我这里得到的是 1.4.2) #yum -y remove jav...

vfast_wuwei
2018/06/21
0
0
RocketMQ官方启动脚本不支持jdk11的修改

以rocketmq4.5.0为例 主要涉及classpath和启动配置。 nameserver: vim /opt/rocketmq/bin/runserver.sh 删除 -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection和-XX:-UseParNewG......

osc_mlwropg6
2019/05/17
8
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP控制反转和依赖注入

[TOC] PHP和依赖注入 理论知识 作者:Mingqi 链接:https://www.zhihu.com/question/23277575/answer/169698662 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明...

我爱吃炒鸡
18分钟前
8
0
Xcode 6:键盘未显示在模拟器中 - Xcode 6: Keyboard does not show up in simulator

问题: The keyboard does not show up when I run the simulator and click in the UITextView. 当我运行模拟器并单击UITextView时,键盘没有显示。 How do I re-enable the keyboard? 如何......

法国红酒甜
48分钟前
23
0
紫外线消毒灯EPA注册有请小蔡

臭氧消毒器EPA注册,紫外线消毒灯EPA注册,UV水质过滤器EPA注册,UV空气过滤器EPA注册,UV灭蚊灯EPA注册,超声驱虫设备EPA注册,UV消毒器EPA注册,高频驱鸟器EPA注册,电子驱鼠器EPA注册 二、...

IECEE证书注册
今天
11
0
小程序上传帖子(含有文字图片的微信验证)

public.js var graceJS = require('../../utils/grace.js');import { config } from '../../config.js'Page({ /** * 页面的初始数据 */ data: { imglist: [], title:'......

子枫Eric
今天
28
0
如今大火的算法框架TensorFlow,都有哪些值得一看的好书呢?

TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief 。 Te...

程序员知识码头
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部