Java异常知识整理

首先得明确一点,异常与错误是有本质区别的:

错误:断电、宕机、山崩、海啸或者硬件等问题所导致程序不能运行

异常:1.它是可以处理的,处理之后程序可以继续运行

         2.异常是对象

         3.如果自己不处理异常,会抛给调用者,如果调用者也不处理异常,最终会抛给JVM,程序会停止运行

异常又分为:编译异常和运行时异常

         编译异常:调用了抛出异常的方法,不处理,编译就会失败

         运行异常:抛出的异常是RuntimeException,或是它子类对象  

Jdk API文档描述:

    Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。

    Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。

    RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。

第一个异常程序:

package com.xiao.exception;
/**
 * @author 笑笑
 * @Date   2018年3月21日下午10:29:00
 *	
 */
public class ExceptionDemo {
	//第一个异常测试,索引越界异常
	public static void test1(){
		int[] arr = {1,2,3};
		System.out.println(arr[3]);
	}
}
	

由于数组只有三个元素,索引从0开始,最大索引为2,我打印arr[3],数组没有此索引,这样就会抛出java.lang.ArrayIndexOutOfBoundsException(索引越界异常)。

 

主动抛出异常:

关键字:throw +创建异常对象    在方法内部抛出异常的对象,必须是Exception类或其子类

             throws + 类名              在方法上声明异常,这样调用者才能知道被调用者内部可能有异常发生

             注:如果方法内部抛出的是运行异常,方法声明不需要throws语句

//throw/throws 关键字测试
public static void test2() throws Exception{
       throw new Exception("我是throw");
   }

异常处理:

方式一:在方法声明上,使用throws关键字把异常向上抛出 

方式二:try...catch...finally 语句处理异常

public static void test3() {
	try{
	    //可能出现异常的代码
			
	}catch(异常类型 变量){
	    //处理异常的代码
	}finally{
	    //必须执行的代码
	}
}

finally有一种情况不会执行:

在try或catch中加上代码:System.exit(0);  这句代码表示停止虚拟机,这样finally中的代码就不会执行了

finally代码块一般用于释放资源

 

继承关系中的异常:

父类的方法,如果抛出异常,子类重写该方法,可以抛出异常,也可以不抛出异常;但是,如果子类要抛出异常,抛出的异常不能大于父类抛出的异常。(必须是父类抛出的异常或其子类)

父类的方法没有抛出异常,子类重写后,不能抛出异常;如果有异常,只能使用try...catch...语句处理异常

 

自定义异常:

继承Throwable类,或者继承他的子类;

即:继承其子类:Exception类或者RuntimeException类

在构造方法中,使用super();把异常信息传给父类。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值