异常处理

Posted dedegui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理相关的知识,希望对你有一定的参考价值。

异常 

  异常是编写应用程序时,没有代码和语法错误会出现的意外情况,为了使程序出现异常还能按照预定的方式进行处理,必须进行捕获和处理。java提供了专门的异常处理机制。

技术分享图片

        常见的异常

 

技术分享图片

 

如图所示,当除数为0时,出现算术错误 

当遇到异常时,我们可以使用异常处理代码块。下列逐个介绍。

一、异常处理代码块try-catch-finally

1、带参数的try-catch

2、不同异常作不同处理的try-catch..catch

    格式:

    try{可能发生的异常代码}

    catch(异常类1  参数1){异常处理代码1}

    catch(异常类2  参数2){异常处理代码2}

    。。。

    catch(异常类n  参数n){异常处理代码n}

    程序运行时只执行匹配到的第一个catch子块,不可能同时执行两个以上的子块

    若没能捕获到异常只能有系统来处理,将出现未处理异常信息

    子块顺序只能从小到大排序,最后一个总能捕获Excption。

3、不处理异常的try-finally

    finally里的代码不管是否发生异常都是要执行

4、完整的异常处理块try-catch..catch-finally

 

二、throw语句和throws语句

    throw语句语法形式如下

    throw new   异常类构造方法名(参数列表);

    throws语句用法

    可选public或static等  返回类型  方法名(可选参数)  throws  异常类名{

      自动或主动引发异常的方法体 

   }

package Yichang;

import java.util.Scanner;

public class Ex1 {

	static double divide(double x,double y)throws Exception{
		if(y!=0) {return x/y;}
		else {
			throw new Exception("除数为0无意义");
		}
	}
	public static void main(String[] args) {
		try {
			double x,y,z;
			String str;
			Scanner input=new Scanner(System.in);	
			while(true) {
				System.out.println("请输入被除数");
				str =input.nextLine();
				if(str.equals("")) {break;}
				x=Double.parseDouble(str);
				System.out.println("请输入除数");
				str=input.nextLine();
				y=Double.parseDouble(str);
				z=divide(x,y);
				System.out.printf("相除结果保留两位小数:%.2f
",z);
			}
			input.close();
		}catch(Exception e) {
			System.out.println("异常"+e);
		}
		finally {
			System.out.println("程序结束");
		}
	}

}

  

 

 显示异常:除数为0无意义——程序结束

三、自定义异常类

    public MyException(){}    //自定义异常类

    throw new MyExceotion()    //抛出自定义异常

四、异常处理代码块嵌套

    在循环语句中嵌入try-catch代码块,可以使异常处理代码块发生异常时不终止程序运行

    如在上述例子中内部的while循环中嵌入try-catch代码块

五、错误和断言

    除异常外,程序不能运行还可能发生了错误(Error)。

    断言(Assert)就是宣称条件必须成立。如断言“数必须大于等于零”(条件成立)才能计算平方根。如果false,则发生断言错误(AssertionError)

    assert  条件表达式;

    assert  条件表达式:字符串型断言语句

    默认情况下Java虚拟机会总是关闭断言。需要开启断言在运行命令中加入选项-ea

    java —ea 主类名

六、总结

学习了异常及处理。异常时运行过程中出现了意外,无法常规运行下去,可以使用try-catch-finally捕捉并处理。需要到预先编写的代码中捕捉异常,否则程序就会意外终止。

捕捉异常代码块亦可以嵌套。

异常可以使用throw语句主动精准抛出,出现异常就要及时处理,否则影响程序的运行。也可以把异常转给调用它的方法来处理,这时在方法{}前加throws接受

以上是关于异常处理的主要内容,如果未能解决你的问题,请参考以下文章

使用片段中的处理程序时出现非法状态异常

Java异常处理机制

java 反射代码片段

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

片段中的Android致命异常