异常处理

应用案例

package test0810;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);

		/*
		 * 将有可能产生异常的代码,放在try块中.
		 * 一旦发生了异常,Java会自动创建一个异常对象,并把它抛出.
		 * try块就可以捕获这个异常对象.但是try块不能处理异常
		 * catch可以处理异常,所以try块捕获的异常会交给catch块处理.
		 */
		try {
			int num = input.nextInt();
			System.out.println(num);
			int a = 10/num;
			String str = null;
			//str.length(); -空指针
			int[] arr = new int[5];
			arr[5] = 10;
		} catch (ArithmeticException e) {//数学异常
			e.printStackTrace();// 异常堆栈
		}catch (InputMismatchException e) {//输入异常
			e.printStackTrace();// 异常堆栈
		}catch (NullPointerException e) {//空指针异常
			e.printStackTrace();// 异常堆栈
		}catch (ArrayIndexOutOfBoundsException e) {//数组越界异常
			e.printStackTrace();// 异常堆栈
		}catch (Exception e) {//异常类的父类--多态
			e.printStackTrace();// 异常堆栈
		}
		System.out.println("程序正常结束!");
	}

}

检查性异常和非检查性异常

package test0810;

import java.io.FileReader;

public class Test01 {

	public static void main(String[] args) {
		try{
			//运行时异常(RunTimeException)运行时才会发生的异常,不会做语法检查
			String str = null;
			str.length();
			
			//非运行时异常,会检查语法错误,会强制你去做异常处理
			FileReader in = new FileReader("d:/a.txt");
			
		}catch(Exception e){
			e.printStackTrace();
		}

	}

}

应用过程描述

package test0810;

public class Test02 {

	public static void main(String[] args) {
		//try-catch结构仅仅是能够处理异常
		try{
			//Java连接mysql
			//加载驱动
			//创建连接,需要耗费资源
			//发生sql语句,做增删改查
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			//不管是否发生异常,finally块始终执行.
			//善后处理:关闭连接,释放资源
		}

	}

}

注意事项

package test0810;

public class Test04 {

	public static void main(String[] args) {
		/**
		 * 1.try块不可以单独存在,后面可以跟catch
		 * 2.catch块不可以单独存在
		 * 3.finally块也不可以单独存在
		 * 4.但是,try块后可以直接跟finally,catch块可以不存在
		 */

		try{
			
		}finally{
			
		}
	}

}

throw(动词) 和 throws(名词)

package test0810;

public class Test05 {

	private int age;

	/*
	public void setAge(int age) {
		if (age > 140 && age < 0) {
			try {
				throw new Exception();
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			this.age = age;
		}
	}
    */
	
	public void setAge(int age) throws Exception {//声明异常
		if (age > 140 || age < 0) {
			throw new Exception("年龄不合法!");
		}else{
				this.age = age;
		}
	}
	
	public int getAge(){
		return age;
	}
	
	public static void main(String[] args) throws Exception {
		// throw(动词) 和 throws(名词)

		// throw:主动抛出一个异常
        Test05 t = new Test05();
		t.setAge(-20);
        System.out.println(t.getAge());
	}

}

异常继承树
在这里插入图片描述常见异常类型
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
【总结与提示】

  1. catch子句的捕获范围,限制于与其匹配的try子句,不能捕获其他try子句中的异常;
  2. 不能单独使用try子句,它必须和catch子句或finally子句结合使用,catch子句可以设置多个,
    finally子句只能有一个;
  3. 有多重catch子句时,只能执行那个捕获到异常的子句,其余的catch子句不能执行;
  4. try/catch/finally三个子句中变量的作用域独立而不能相互访问。如果要在三个子句中都可以访
    问,则需要将变量定义到这些子句的外面;
  5. 不要写过大的try子句,一个try子句中尽量不要存在太多的异常;
  6. 一个方法中如果有发生异常的可能,则可以进行捕获处理,也可以声明由调用者来处理;
  7. throw语句后不允许有其他语句,因为这些语句没有机会执行;
  8. 不能利用异常处理来进行程序的分支处理,它只是处理非正常情况的一种机制。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值