2021-03-29

异常处理机制

当程序出现问题时,安全退出,处理完成之后继续执行,如果处理不了,抛出异常。

异常:(Exception)

Exception可分为两种:

  1. RuntimeException:
    在运行时才执行

  2. CheckedException
    在编译时就产生
    (所有异常的根类为java.lang.Throwable)指程序运行中,出现非正常现象。当程序遇到异常,会将以异常封装成一个对象,将已成抛给jvm来处理或者抛给下一个程序来处理。通俗点讲,你在写程序时,当出现错误时,程序便不会继续往下进行,而我们显然不希望如此,我们更希望即使出现一个错误,程序依然执行下去,并把错误的地方报出来,异常处理机制做的就是这个.
    下面来看一个小例子:

public class Dome1 {
	public static void main(String[] args) {
		System.out.println("step1");
		int a=1/0;
		System.out.println("step2");
	}
}
这个程序只能运行到step1,接着往下运行时,出现错误,程序不正常停止,但如果写成下面的代码,程序便可运行结束:
    public class Dome1 {
	public static void main(String[] args) {
		
		System.out.println("step1");
		try {
		int a=1/0;
		}catch (Exception e) {      //捕获异常并将其封装在e对象中
			e.printStackTrace();    //打印错误信息
		}
		System.out.println("step2");
	}
}

这样程序便可正常的运行结束,并将错误信息打印出来。

异常处理步骤:

  1. 抛出异常对象
    当执行一个方法时,出现异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
  2. 捕获异常
    JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。

Exception

另外,异常的种类有很多种,处理的方法也不尽相同,常见的又空指针异常、数组越界、用户输入错误、除数为0、需要处理的文件不存在等,无法列举完,只能在以后的练习中去学习解决。

异常的处理

1.捕获异常

try{语句1;语句2}
catch(Exception1 e){}
catch(Exception2 e){}
finally{}
机构当Exception1和Exception2没有关系是,先后顺序无所谓,当有关系时,子类在前,父类在后。当语句1出现异常时,语句二不在执行,执行catch,然后执行finally,当语句1和语句2都没有问题时,跳过catch执行finally,也就是说无论语句有没有异常,finally内的语句都会被执行。finally中一般会执行一些关闭资源的操作,有异常关闭,没异常也要关闭。如下:

   import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Dome2 {
	public static void main(String[] args){
		FileReader reader=null;
		try {
		reader=new FileReader("bb//aa.txt");
		char c=(char)reader.read();
		char c1=(char)reader.read();
		System.out.println(""+c+c1);
		}catch(FileNotFoundException e)
		{
		e.printStackTrace();
		}catch(IOException e)             //IOException是FileNotFoundException类的父类,子类在前,父类在后
		{
			e.printStackTrace();
		}finally {
			try {
				if(reader!=null) {
				reader.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

但每次都需要关闭打开的资源会很麻烦,JDK7之后推出新的机构:try-with-resource.可以自动关闭资源。

import java.io.FileReader;
    public class Dome3 {
	public static void main(String[] args) {
		try (FileReader reader=new FileReader("bb//aa.txt");){
			char c=(char)reader.read();
			char c1=(char)reader.read();
			System.out.println(""+c+c1);
	}catch (Exception e) {
		e.printStackTrace();
	}
}
}

这样写的代码和上面的代码功能一样,但是更加简洁可观。
2. 自定义异常(少见)
比如在定义了一个‘人’的类,在设置年龄时如果输入的是不符合常理的年龄,这时结可以自己定义异常进行处理。
3. 用百度解决异常
将上下文相关的关键词进行搜索,尽量细致的查找,如果没有,在放宽条件搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值