第九章:异常处理

异常概述

在程序中,异常可能由程序员没有预料到的各种情况产生,也可能由超出了程序员可控制范围的环境因素产生,如用户的坏数据,试图打开一个根本不存在的文件等。在Java中,,这种在程序运行时可能出现一些错误称为异常。异常是一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指冷流。

异常的抛出与捕捉

在Java中,如果某个方法抛出异常,既可以在当前方法中进行捕捉,而后处理该异常,也可以将异常向上抛出,交由方法调用者来处理。

自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常类情况。除此之外,用户只需维承Execption类即可自定义异常类。在程序中使用自定义异常类,大体可分为以下步骤:

(1)创建自定义异常类。

(2)在方法中通过throw关键字抛出异常对象。

(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理,否则方法的声明通过throw关键字指名要给出调用者的异常,继续进行下一步操作

在主方法中抛出异常

使用throw关键字抛出异常

throw关键字通常被应用在声明方法时,用来指定方法可能被抛出的异常。多个异常可使用逗号分隔。

使用匿名类时应该遵循以下原则:


1、匿名类不能写构造方法。
2、匿名类不能定义静态的成员。
3、如果匿名类创建的对象没有赋值给任何应用变量,会导致该对象用完一次就会被Java虚拟机销毁。  

异常的使用原则

Java异常强制用户去考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应的处理。编写代码处理某个方法可能出现的异常时,可遵循以下几条原则:1、在当前方法声明中使用try-catch语句捕获异常。2、一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。3、如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。

常见异常类

9.1代码


public class Baulk {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
		int result=3/0;
		System.out.print(result);}
	catch(ArithmeticException e) {
		System.out.println("你好亲,出现算数异常");
	}
		finally {
			System.out.println("程序结束");}
		}
	}

9.2代码

package app;

public class Thundering {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	try {
	String str="lili";
		System.out.println(str+"年龄是:");
		int age=Integer.parseInt("20");//类型转换
		System.out.print(age);	
		int result=3/0;
		System.out.print(result);}
	catch(NumberFormatException  e) {
		System.out.println("你好亲,出现数字格式异常");}
	catch(ArithmeticException e) {
		System.out.println("你好亲,出现算术异常");}
		finally {
			System.out.println("程序结束");}
	}	
	}


 

 9.3代码

package app;

public class Thundering {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	try {
	String str="lili";
		System.out.println(str+"年龄是:");
		int age=Integer.parseInt("20");//类型转换
		System.out.print(age);	
		int result=3/0;
		System.out.print(result);}
	catch(NumberFormatException  e) {
		System.out.println("你好亲,出现数字格式异常");}
	catch(ArithmeticException e) {
		System.out.println("你好亲,出现算术异常");}
		finally {
			System.out.println("程序结束");}
	}	
	}


9.4代码

public class myException extends Exception{
public myException(String message) {
	super(message);
}
}

9.5代码

public class Tran {
		static int avg(int num1,int num2) throws myException{
			if(num1<0||num2<0) {
			//	System.out.print("存在负数,无法计算");
				throw new myException("存在负数,无法计算");}
			if(num1>0||num2>0) {
				throw new myException("大于一百,无法计算");}
			return(num1+num2)/2;
			}
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			try {
				int result=avg(32,6);
				System.out.println(result);
			}
			catch(myException e) {
				System.out.println(e);
				
			}
	}

}

9.6代码


public class Shoot {
static void pop()throws NegativeArraySizeException{
	int[]arr=new int[-3];
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			pop();
		}
		catch(NegativeArraySizeException e) {
			System.out.println("pop()方法抛出的一场");
		}
	}

}

 

 9.7代码


public class Myexception1 extends Exception {
	String message;
	public Myexception1(String ErrorMessagr) {
		message=ErrorMessagr;}
	public String getMessage() {
		return message;
	}
}

9.8代码

import java.awt.color.CMMException;

public class Captor{
    static int quotient(int x,int y)throws Exception{  //定义方法抛出异常
    if(y<0){  //判断
      throw new Exception("除数不能是负数"); //异常信息
        }
    return x/y;  //返回值
}
public static void main(String args[]){
    try{  //try语句块包含可能发生异常的语句
         int result=quotient(3,-1);  //调用方法quotient()
    }catch(myException e){  //处理自定义异常信息
    System.out.println(e.getMessage());  //输出异常信息
    }catch(ArithmeticException e){  //处理ArithmeticException异常
    System.out.println("除数不能为0");  //输出提示信息
    }catch(Exception e){  //处理其他异常
    System.out.println("程序发生了其他异常");  //输出提示信息
    }
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值