java---常见的异常

异常分类及常见异常     

下面介绍常见的异常类,它们都是RuntimeException的子类。

⑴ 算术异常ArithmeticException

⑵ 空指针异常NullPointerException

⑶ 类型强制转换异常ClassCastException

⑷数组负下标异常NegativeArraySizeException

⑸数组下标越界异常ArrayIndexOutOfBoundsException

捕获异常

1.抛出异常

    当程序发生异常时,产生一个异常事件,生成一个异常对象,并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常。这个过程称为抛出(throw)一个异常。一个异常对象可以由Java虚拟机生成,也可以由运行的方法生成。异常对象中包含了异常事件类型、程序运行状态等必要的信息。

2.捕获异常

    异常抛出后,运行时系统从生成对象的代码开始,沿方法的调用栈逐层回溯查找,直到包含相应处理的方法,并把异常对象交给该方法为止,这个过程称为捕获(catch)一个异常。 

3.程序对错误与异常的三种处理方式:

(1)程序不能处理的错误     Error类为错误类,如内存溢出、栈溢出等。这类错误一般由系统进行处理,程序本身无需捕获和处理。例如,运行没有main方法的类将产生NoClassDefFoundError错误

(2)程序应避免而不捕获的异常     对于运行时异常类(RuntimeException),如数组越界等,在程序设计正常时不会发生,在编程时使用数组长度a.length来控制数组的上界即可避免异常发生,而无须使用try-catch-finally语句。 

由方法抛出异常交系统处理   

 对于程序中需要处理的异常,一般编写try-catch-finally语句捕获并处理;

而对于程序中无法处理必须由系统处理的异常,可以使用throw语句在方法中抛出异常交系统处理。

例如,对于文件流操作,将必须捕获的系统定义的异常交由系统系统处理。 

 样例:

有关数组的异常

package com.kk.test04;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Test7_1 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[] numbers = new int[5];
		try {
			for (int i = 0; i < numbers.length; i++) {
				System.out.println("请输入");
				numbers[i] = sc.nextInt();
			}
		} catch (InputMismatchException e) {
			System.out.println("请输入整数");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("请输入最多5个整数");
		}
	}

}

样例二:是否可以组成三角形

package com.kk.test04;

import java.util.Scanner;

public class Test7_2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		try {
			triangle(10, 2, 1);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}

	}

	public static void triangle(int a, int b, int c) throws Exception {
		if (a + b > c && a + c > b && b + c > a) {
			System.out.println("可以组成三角形");
		} else {
			throw new Exception("不能组成三角形");
		}
	}
}

样例三:判断除数是否为0

package com.kk.test04;

import java.util.Scanner;

public class Test7_3 {

	public static void main(String[] args)  {
		Scanner sc = new Scanner(System.in);
		int a = sc.nextInt();
		int b = sc.nextInt();
		try {
			int c = a / b;
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (ArrayIndexOutOfBoundsException e) {
			e.printStackTrace();
		} catch (ArithmeticException e) {
			e.printStackTrace();
		}

	}
}

class NegativeInputException extends Exception {
	private static final long serialVersionUID = 1L;

	public NegativeInputException(String str) {
		super(str);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值