java异常

import java.util.Scanner;
public class Exc{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		System.out.println("Enter two integers:");
		int number1=input.nextInt();
		int number2=input.nextInt();
		//程序包含的是一个try块和catch块。try块包含的是正常情况下执行的代码。
		//catch块包含的是number2为0时执行的代码。在这种情况下,程序会通过执行下面的语句来抛出一个异常。
		try{
			if(number2==0)
				throw new ArithmeticException("D2ivisor cannot b zero");
			System.out.println(number1+" / "+number2+" is "+(number1/number2));
		}
		//new ArithmeticException("D2ivisor cannot b zero");称为一个异常
		//异常时从一个异常类创建的对象。在这种情况下,异常类就是java.lang.ArithmeticException
		catch(ArithmeticException ex){
			System.out.println("Exception:an integer cannot be divided by zero");
			
		}
		System.out.println("Execution continues...");
	}
}
/**
当异常被抛出时,正常的流程就被中断。抛出异常就是将异常从一个地方传递到另一个地方。异常被catch块捕获。执行
catch块中的代码以处理这个异常。然后,执行catch块后的语句。
throw类似于方法的调用,不同于调用块,它调用的是catch块。从某种意义上讲,catch块就像是带参数的方法定义,这些参数
匹配抛出的值得类型。
*/

import java.util.Scanner;
public class Quotient {
	public static int quotient(int number1,int number2){
		if(number2==0)
			throw new ArithmeticException("Divisor cannot be zero");
		return number1/number2;
	}
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		System.out.println("Enter two integers:");
		int number1=input.nextInt();
		int number2=input.nextInt();
		try{
			int result=quotient(number1,number2);
			System.out.println(number1+" / "+number2+" is "+(number1/number2));
		
		}
		catch(ArithmeticException ex){
			System.out.println("Exception:an integer cannot be divided by zero");
			
		}
		System.out.println("Execution continues...");
	}
}
/**
异常的一个优点:它能使方法抛出一个异常给它的调用者。这个调用者可以处理该异常。异常最根本的优势试讲检测错误由调用的
方法完成,处理错误由调用方法完成中分离出来。
*/

Throwable类是所有异常类的根。所有的java异常类都直接或间接地继承自Throwable

这些异常类可以分为三类:系统错误,异常和运行时异常。

1.系统错误,由java虚拟机抛出,用Erroe类表示,描述的是内部系统错误。这样的错误很少发生。如果发生,除了通知用户以及尽量稳妥的终止程序外,几乎什么也不能做。

2.异常,是由Exception类表示的,它描述的是由程序和外部环境所引起的错误,这些错误能够被程序捕获和处理。

3.运行时异常,是由RuntimeException类表示的,它描述的是程序设计错误。例如,错误的类型转换,访问一个越界数组或数值错误。由java虚拟机抛出。

Java的异常处理模型基于三种操作:声明一个异常,抛出一个异常,捕获一个异常。

1.声明异常。Java中,当前执行的语句必属于某个方法。Java解释器调用main方法开始执行一个程序。每个方法都必须声明它可能抛出的必检异常的类型。这称为声明异常。因为任何代码都可能发生系统错误和运行时错误。为了在方法中声明一个异常,就要在方法头中使用关键字throws。eg:

public void myMethod()throws IOException

关键字throws表示myMethod方法可能会抛出异常IOException。如果方法可能抛出多个异常,在throws后加一个用逗号分隔的异常列表。

2.抛出异常。检测一个错误的程序可以创建一个正确异常类型的实例并抛出它。这称为抛出一个异常。

IllegalArgumentException ex=new IllegalArgumentException(“Wrong Argument”);

throw ex;

等同于

throw new IllegalArgumentException(“Wrong Argument”);

3.捕获异常,如果在执行try块的过程中没有出现异常,则跳过catch字句。如果try块中的某条语句抛出一个异常,java会跳过try块中剩余的语句,然后开始查找处理这个异常代码的过程。处理这个异常的代码称为异常处理器。可以从当前的方法开始,沿着方法调用链,按照异常的反向传播方向找到哦这个处理器。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章