文档章节

Java之异常处理【7】

kongjunli
 kongjunli
发布于 2016/08/13 13:28
字数 740
阅读 3
收藏 0

异常:程序运行期(执行期)出现的错误【不是语法错误】,是java提供的一种用于处理程序错误的机制。如:除0溢出,数组下标溢出、读文件不存在。

Java程序执行过程中如出现异常事件,系统自动的生成异常类对象,封装了异常事件的信息并被提交给Java运行时系统,成为‘’抛异常‘’。

当Java运行时系统收到异常时,会寻找能处理这一异常的代码,并把当前异常交给其处理,称为“捕获异常”。

一、异常分类图

Throwable:父类  Error和Exception是两个子类。其中Error指系统异常,比如虚拟机异常,不需要处理。Exception又分为两种,其中Runtime Exception指经常出现的,比如除0溢出等,可以捕获也可以不捕获。其他的就要求必须要捕获,常见的在jdk中看到方法后面跟了throws就必须catch.

public class TestException{
public static void main(String args[]){
     int a[]={3,2,5};
//捕获异常 
     try{
	System.out.println(a[3]);}
     catch(ArrayIndexOutOfBoundsException e){//e是异常对象,当检测到异常的时候会系统自动初始化,交给Catch的代码处理
	System.out.println("系统正在维护。。。。");
	e.printStackTrace();}//用来跟踪异常事件发生时执行堆栈的内容
}}

 

二、五个关键字

  • try:可能发生异常的语句
  • catch:捕获,并处理异常(printStackTrace()用来跟踪异常事件发生时执行堆栈的内容)
  • throw:方法内部抛异常
  • throws:声明方法异常
  • final:代码中无论是否有异常都会执行,清除资源
public void someMethod()throws someException{
     if(somecondition)
     throw new someException(“错误原因”);
}
try{
someMethod(); //someMethod()方法明确抛异常,所以调用时必须要catch
}
catch(someMethod e)
{
}
try{
}
catch(someException1 e1){
}
try{
}
catch(someException2 e2){
}
finally{
}
执行过程:1.e1->finally
        2.e2->finally
        3.无异常->finally

三、自定义异常类

步骤:

  • 通过继承java.lang.Exception类声明自己的异常类
  • 在方法适当的位置生成自定义异常的实例,并用throw语句抛出
  • 在方法的声明部分用throws语句声明该方法可能抛出的异常
package Exception;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
class MyException extends Exception{
	private int id;
	private String message;
	public MyException(String message,int id){
		super(message);
		this.id=id;
	}
	public int getID(){
		return id;	}
}
public class TestException {
	public void regist(int i) throws MyException{
		if(i<0)
			throw new MyException("人数不合法。。",1);
		else
			System.out.println("num:"+i);
	}
	public void manger(){
		try{regist(-50);}//regist()方法抛异常了,因此必须捕获
		catch(MyException e){
			System.out.println("操作类型:"+e.getID());
			e.printStackTrace();
		}
		System.out.println("操作结束!");
	};
	public static void main(String args[]) 
	{  
		TestException test=new TestException();
		test.manger();
	}
		/*int a[]={3,2,5}; 
		try{
		System.out.println(a[3]);}
		catch(ArrayIndexOutOfBoundsException e){//e是异常对象,当检测到异常的时候会系统自动初始化
			System.out.println("系统正在维护。。。。");
			e.printStackTrace();{}*/
			
	}
结果:操作类型:1
     操作结束!
     Exception.MyException: 人数不合法。。
	at Exception.TestException.regist(TestException.java:19)
	at Exception.TestException.manger(TestException.java:24)
	at Exception.TestException.main(TestException.java:34)

 

© 著作权归作者所有

共有 人打赏支持
kongjunli
粉丝 0
博文 25
码字总数 7291
作品 0
西安
程序员
私信 提问
06-《深度拆解JVM》之JVM是如何处理异常的?

一、问题引入 今天我们来讨论下 Java 虚拟机的异常处理。众所周知,异常处理的两大组成要素是抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。 抛出异常可分为显式和隐式两种...

飞鱼说编程
09/28
0
2
对JDBC的支持 之 7.1 概述

概述 JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: //cn.javass.spring.chapter7. TraditionalJdbcTest @Test public void test() throws Exception { Connection co...

heroShane
2014/02/27
0
0
Java的Exception和Error面试题10问10答

在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题。Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它成为面试题中的...

lwei
2013/10/10
18.2K
48
Java异常处理 10 个最佳实践

异常处理是Java 开发中的一个重要部分。它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java提供了几个异常处理特性,以try,catch...

Java技术栈
08/27
0
0
Java 编程中关于异常处理的 10 个最佳实践

异常处理在编写健壮的Java应用的过程中,扮演着一个重要的角色。它并不是应用的功能需求,且需要优雅的处理任何错误情况,例如资源不可用,错误的输入,null输入等等。Java提供几个异常处理功...

oschina
2013/03/29
14K
26

没有更多内容

加载失败,请刷新页面

加载更多

一、什么是ActiveMQ

首先我们应该先了解J2EE中的一个重要规范:JMS(The Java Message Service)Java消息服务。而JMS的客户端之间可以通过JMS服务进行异步的消息传输。它主要有两种模型:点对点和发布订阅模型。 ...

watermelon11
15分钟前
0
0
课时17 第三课Spark内部原理剖析与源码阅读(五)

为何spark shuffle比mapreduce shuffle慢? 主要是spark shuffle的shuffle read阶段还不够优秀,它是基于hashmap实现的,shuffle read会把shuffel write阶段已经排序数据给重新转成乱序的,转...

刀锋
31分钟前
1
0
Function函数式接口

Function函数式接口传入一个参数,返回一个值。 然后我们使用这个写个demo看看: 输出: 接口内部还有两个default方法和一个static方法,然后我们先看一下static方法 返回一个始终返回其输入...

woshixin
46分钟前
1
0
开发者和架构师之间最大的区别是什么?

1、开发者和架构师之间最大的区别是什么? 架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。 软件架构师的角色需要理解最重要的架构驱动力是什么...

James-
今天
2
0
java框架学习日志-4

补充一些spring配置文件的方法。 设置别名: <!--通过name直接设置别名--> <bean name="user2" class="cn.sxt.factory.UserDynamicFactory"> </bean> <!--有id的情况下也可以设置......

白话
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部