异常及异常处理

一、异常的概念

  1. 定义:

    异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误。

  2. 处理态度:

       当捕获到异常以后一定要做出处理,哪怕是把这个异常的错误信息打印出来,这是一种良好的编程习惯。
       如果不处理,那就是把这个错误悄悄地隐藏起来了,可是这个错误依然是存在的,只不过看不到了而已。这是一种非常危险的编程习惯,绝对不能这样做,捕获到异常就一定要做出处理,实在处理不了就把异常抛出去,让别的方法去处理。总之就是不能捕获到异常之后却又不做出相应的处理,这是一种非常不好的编程习惯。

二、异常分类

  1. 异常处理方式:

        方法一:方法声明时使用throws把 异常往外抛
             throws Exception
                Exception类是所有能处理的异常类的根基类,抛出Exception类就会抛出所有能够被处理的异常类里了。
        方法二:手动往外抛
            throw+异常对象
                异常对象抛出去了,然后在方法的声明写上要抛的那种异常。
        方法三:
            try…cacth…finally

        try {
			//处理业务代码
		} catch (Exception e) {
			//抛出异常处理,具体异常具体定
			e.printStackTrace();
		} finally{
			//最终都需执行的代码
			//一般做资源清理工作
		}

       我们一般使用printStackTrace()这个方法来打印异常的信息,使用这个方法打印出来的是所有出错的信息,包括了使用getMessage()方法打印出来的信息。使用这个方法之前要new一个错误对象出来才能调用它。因为它是专属于某个错误对象里面的方法。

  1. Java异常处理的五个关键字:try、catch、finally、throw、throws

在这里插入图片描述

  1. 异常分类
    在这里插入图片描述
    示例代码:
package com.lixu.javabase.exception;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 异常Demo
 */
public class ExceptionDemo {
	
	/**
	 * 任何方法往外抛能处理的异常的时候都有一种简单的写法:“throws Exception”
	 * 因为Exception类是所有能处理的异常类的根基类,因此抛出Exception类就会抛出所有能够被处理的异常类里了。
	 * 使用“throws Exception”抛出所有能被处理的异常之后,这些被抛出来的异常就是交给JAVA运行时系统处理了,
	 * 而处理的方法是把这些异常的相关错误堆栈信息全部打印出来。
	 */
	void mothod() throws Exception{
		
	}
	
	
	public void method1() throws Exception{
		//不处理,可能产生FileNotFoundException异常
		@SuppressWarnings("resource")
		FileInputStream flStream = new FileInputStream("mytext.txt");
		//这里有可能会产生IOException异常
	    int b = flStream.read();
	    while (b != -1) {
	          System.out.println((char)b);
	          b = flStream.read();
        }
	}

	public void method2() throws FileNotFoundException,IOException {
		@SuppressWarnings("resource")
		FileInputStream flStream = new FileInputStream("mytext.txt");
		int b = flStream.read();
		while (b != -1) {
	          System.out.println((char)b);
	          b = flStream.read();
      }
	}
	
	public void method3(){
		FileInputStream flStream = null;
		try {
			flStream = new FileInputStream("mytext.txt");
			int b = flStream.read();
			while(b != -1){
				System.out.println((char)b);
		        b = flStream.read();
			}
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e){
			System.out.println(e.getMessage());
		} finally{
			try {
              /**
              * 前面已经把一个文件打开了,不管打开这个文件时有没有错误发生,即有没有产生异常,最后都一定要把这个文件关闭掉,
              * 因此使用了finally语句,在finally语句里面不管前面这个文件打开时是否产生异常,在finally这里执行in.close()都能把这个文件关闭掉,
              * 关闭文件也有可能会产生异常,因此在finally里面也使用了try……catch语句去捕获有可能产生的异常。
              */
			  flStream.close();
			} catch(Exception e){
			  e.printStackTrace();
			}				          
		}		
	}
	
}

三、自定义异常

扫描二维码关注公众号,回复: 10023624 查看本文章
package com.lixu.javabase.exception;


/**
 * 自定义异常MyException
 */
public class MyException extends Exception {

	private int id;
	
	/**
	 * 自定义异常类的构造方法
	 * @param message
     * @param id
     */
	public MyException(String message,int id) {
		super(message);
		this.id = id;
	}
	
	/**
	 * 获取异常的代码
	 * @return
	 */
	public int getId() {
		return id;
	}
		
}

测试定义的异常

package com.lixu.javabase.exception;

import java.text.MessageFormat;

public class TestMyException {

	public static void main(String[] args){
		TestMyException tmException = new TestMyException();
		tmException.manage();
	}
	
	//throws MyException,抛出我们自定义的MyException类的异常。
	public void regiter(int num) throws MyException{
		if(num < 0){
			//使用throw手动抛出一个MyException类的异常对象。
			throw new MyException("人数为负值,不合理", 1);
		}
		System.out.println(MessageFormat.format("登记人数:{0}",num));
	}
	
	public void manage() {
         try {
             regiter(-100);
         } catch (MyException e) {
             System.out.println("登记失败,错误码:"+e.getId());
             e.printStackTrace();
         }
         System.out.println("操作结束");
    }
}

在这里插入图片描述

四、异常处理总结
在这里插入图片描述
参照:https://www.cnblogs.com/xdp-gacl/p/3627390.html

发布了16 篇原创文章 · 获赞 3 · 访问量 536

猜你喜欢

转载自blog.csdn.net/outdata/article/details/102457154