异常机制

什么是异常?

Java代码在运行时期发生的问题就是异常

异常处理

1. JVM默认处理方式

如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行并且还终止了程序,异常后面的代码将不在执行

2. try…catch方式处理异常

捕获:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理捕获异常格式:

try {

//需要被检测的语句。

}

catch(异常类 变量) { //参数。

//异常的处理语句。

}

finally {

//一定会被执行的语句。

}

try:该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。

3. throws方式处理异常

throws使用:

   权限修饰符 返回值类型  方法名(形参列表) throws 异常类型1,异常类型2….{

}  

案例

import java.io.FileWriter;
public class Throws_Test01 {
	/*
	 * 	异常的处理方式:
	 * 			捕获处理
	 * 				try...catch语句
	 * 
	 * 				try {
	 * 					有可能出现问题的代码;
	 * 				} catch(ArithmeticException ae) {
	 * 					处理异常;
	 * 				}
	 * 
	 * 				try...catch的执行顺序:
	 * 					首先执行try语句
	 * 						如果发现异常,异常下面的代码不在执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束
	 * 						如果没有发现异常,try语句执行结束后,try...catch直接结束, 不在执行catch语句
	 * 
	 * 
	 * 			抛出去
	 * 				当我们不想处理异常,或者没有能力处理的时候,我们可以选择抛出异常,谁调用方法谁处理异常
	 * 				使用关键字throws在方法的声明出抛出异常

	 * 		
	 * 
	 *  jvm处理异常的方式:
	 *  	如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行
	 *  	并且还终止了程序,异常后面的代码将不在执行
	 */
		public static void main(String[] args) throws Exception {
			//method();
			function();
			
		}
		
		public static void function() throws Exception {
			FileWriter fw = new FileWriter("a.txt");
		}

		private static void method() {
			try {
				System.out.println(1);
				//System.out.println(2 / 0);
				System.out.println(2);
			} catch(ArithmeticException ae) {
				System.out.println("除数不能为0");
			}
			
			System.out.println(3);
		}

	}

4. 多异常处理

对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。

void show(){ //不用throws 
	try{
		throw new Exception();//产生异常,直接捕获处理
	}catch(XxxException e){
//处理方式	
	}catch(YyyException e){
//处理方式	
	}catch(ZzzException e){
//处理方式	
	}
}

注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

 

package com.day008;
public class TryCatch_Test04 {
/*
* 	如何处理多个异常:
* 		可以使用多个try...catch语句
* 		使用一个try和多个catch
* 
* 多个catch之间的顺序:
* 			多个catch之间可以有子父类
* 			平级之间没有顺序关系
* 			如果有子父类,父类异常必须放在后面
* 			
* 	
*/
	public static void main(String[] args) {
		try {
			//异常1
			String s = null;
			System.out.println(s.length());
			//异常2
			int[] arr = new int[5];
			System.out.println(arr[8]);
			//异常3
			System.out.println(2 / 0);
		} catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("出现数组越界了");
		} 
		catch(NullPointerException e) {
			System.out.println("出现空指针了");
		}
		catch(Exception e) {
			System.out.println("出现异常了");
		}
	}
}

Throwable常用方法&自定义异常

1. Throwable常用方法

String getMessage()  返回此 throwable 的详细消息字符串

String toString()  返回此 throwable 的简短描述

void printStackTrace()  打印异常的堆栈的跟踪信息

案例:

package com.day008;

public class TryCatch_Test05 {

/*
 * Throwable的常用方法:
		String getMessage()  
		String toString()  
		void printStackTrace()  
 * 	
 */
	public static void main(String[] args) {
		
		try {
			System.out.println(2 / 0);
		} catch(ArithmeticException e) {
			//String getMessage() : 异常产生的原因
			System.out.println(e.getMessage());
			
			//String toString() : 异常类型和原因
			//System.out.println(e.toString());

			//void printStackTrace() : 异常类型和原因以及位置
			//e.printStackTrace();
		}
		
		System.out.println("hello");
	}

}

2. 自定义异常

throwsthrow的区别?

 throws:处理异常的一种方式,把异常抛出,由调用者来处理

 throw:制造异常的方式,并且结束方法

注意:如果抛出(throw)的是编译时期异常,必须在方法声明处抛出(throws

如何自定义一个异常类呢?

非常简单,写一个类去继承Exception或者RuntimeException,然后实现多个构造即可

注意:自定义异常,其实就是让我们起个名字(一定要见名知意);

 

如果我们定义的是编译时期异常: 继承 Exception.需要根据父类的构造产生本类的构造

如果我们定义的是运行时期异常: 继承 RunTimeException.需要根据父类的构造产生本类的构造

案例:

package com.day008;
//如何自定义异常,最简单的就是继承父类,重写空参有参构造方法即可
public class MyException extends RuntimeException{

	public MyException() {
		super();
		
	}

	public MyException(String message) {
		super(message);

	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值