Java异常分类

一、基本概念

看java的异常结构图

 

Throwable是所有异常的根,java.lang.Throwable
Error是错误,java.lang.Error
Exception是异常,java.lang.Exception

 

 

二、Exception

一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。

①Checked异常

只有java语言提供了Checked异常,Java认为Checked异常都是可以被处理的异常,所以Java程序必须显示处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种

1 当前方法知道如何处理该异常,则用try...catch块来处理该异常。
2 当前方法不知道如何处理,则在定义该方法是声明抛出该异常。

package cn.xy.test;

import java.io.IOException;

/**
 * Checked异常测试方法
 * @author xy
 *
 */
public class CheckedExceptionMethods
{
	// 总异常类,既有checkedException又有RuntimeException,所以其中的checkedException必须处理
	public void method1() throws Exception
	{
		System.out.println("我是抛出异常总类的方法");
	}

	// 捕获并处理这个异常
	public void testMethod1_01()
	{
		try
		{
			method1();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	// 把异常传递下去
	public void testMethod1_02() throws Exception
	{
		method1();
	}

	public void testMethod1_03() throws Exception
	{
		throw new Exception();
	}

	public void testMethod1_04()
	{
		try
		{
			throw new Exception();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	// checkedException典型代表IOException
	public void method2() throws IOException
	{
		System.out.println("我是抛出IO异常的方法");
	}

	public void testMethod2_01()
	{
		try
		{
			method2();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	public void testMethod2_02() throws Exception
	{
		method2();
	}

}

我们比较熟悉的Checked异常有

Java.lang.ClassNotFoundException
Java.lang.NoSuchMetodException
java.io.IOException

 

②RuntimeException

Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

package cn.xy.test;

/**
 * 运行时异常测试方法
 * @author xy
 *
 */
public class RuntimeExcetionMethods
{
	public void method3() throws RuntimeException
	{
		System.out.println("我是抛出运行时异常的方法");
	}

	public void testMethod3_01()
	{
		method3();
	}

	public void testMethod1_02()
	{
		throw new RuntimeException();
	}
}

我们比较熟悉的RumtimeException类的子类有

Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException

 

 

三、Error

当程序发生不可控的错误时,通常做法是通知用户并中止程序的执行。与异常不同的是Error及其子类的对象不应被抛出。

Error是throwable的子类,代表编译时间和系统错误,用于指示合理的应用程序不应该试图捕获的严重问题。

Error由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等。程序对其不做处理。

 

 

时间: 2025-01-18 19:28:41

Java异常分类的相关文章

Java异常分类及统一处理详解_java

一.异常分类        java异常分为"检查"和"非检查"两类,"检查"二字的意思是,代码编译时,编译器会去Check一下有没有进行异常处理(捕获或向上抛),对于归类为需要检查的异常,若没处理,编译就过不去.        初学的时候,常常想为啥异常要这样分类处理? 后来明白了些,异常不过两种:主观和客观,一个大多数情况下可以避免,一个大多数情况下无法避免.        像NullPointerException这类异常,大多跟程序员素质

Java异常的概念和分类

java异常是java提供的用于处理程序中错误的一种机制. 所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在). 设计良好地程序应该在程序异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果. Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息,并将被提交给java运行时系统,这个过程称为抛出(throw)异常. 当Java运行时系统接收到异常对象时,会寻找能处理这一异

java异常与错误处理基本知识_java

异常与错误:异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception.错误:它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务).所以,

Java 异常设计最佳实践

关于异常 在讲Java异常实践之前,先理解一下什么是异常.到底什么才算是异常呢?其实异常可以看做在我们编程过程中遇到的一些意外情况,当出现这些意外情况时我们无法继续进程正常的逻辑处理,此时我们就可以抛出一个异常. 广义的讲,抛出异常分三种不同的情况: 编程错误导致的异常 :在这个类别里,异常的出现是由于代码的错误(譬如NullPointerException.IllegalArgumentException.IndexOutOfBoundsException ).代码通常对编程错误没有什么对策,

浅谈java异常链与异常丢失_java

1.在java的构造方法中提供了 异常链.. 也就是我们可以通过构造方法不断的将 异常串联成一个异常链...   之所以需要异常连,是因为处于代码的可理解性,以及阅读和程序的可维护性...  我们知道我们每抛出一个异常都需要进行try catch ...那么岂不是代码很臃肿... 我们如果可以将异常串联成一个异常连,然后我们只捕获我们的包装 异常,我们知道 RuntimeException 以及其派生类可以不进行try catch 而被jvm自动捕获并处理.. 当然了我们可以自己定义自己的异常类

Java异常

在我参与过的一些Java项目.或者阅读过Java代码中,异常的使用或多或少都有点问题,有些甚至是误用.可能很多人都了解异常的基本知识,但是使用的时候往往过于随意,然而这样的随意往往并不能造成什么严重的问题,所以很多程序员,尤其是初级的程序员也就没有在意它,于是代码中总是会有那些让人不舒服的异常使用代码:另一方面,Java异常类型中包括Checked Exception(Runtime Exception)和Unchecked Exception,这两中异常的使用也颇具争议. 基于上述问题,总结一

Java异常封装(自己定义错误码和描述,附源码)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. 下面小宝鸽就为大家介绍一个Java异常简单封装的例子. 在给出异常分装例子之前,需要给大家普及Java里面的checked异常和unchecked异常的个概念. 一.checked异常

jsf-在线求java异常问题解决

问题描述 在线求java异常问题解决 系统每天都会抛出这种异常,不多,异常出现时间随机的Tomcat7 jdk1.7 使用jsf-api.jar和jsf-impl.jar库 解决方案 http://www.oschina.net/question/1762963_229343 解决方案二: 求eclipse java heap space 问题解决方案 解决方案三: 空指针,.必然是使用了null,一步一步的跟,看看在哪用到了这个null,然后判空,没么有问题了

关于java异常的问题求解决

问题描述 关于java异常的问题求解决 import java.io.*; class DivisorIsZeroException extends Exception { public DivisorIsZeroException(String name) { super(name); } } class A { public int divide(int a, int b) throws DivisorIsZeroException { int m = 0; if(0 == b) throw