异常处理

我们在写代码的时候,经常出现一些小问题,那么为了方便我们处理这些问题,java为我们提供了异常机制

异常:不正常,我们在写代码的时候出现的编译或者运行时的错误

异常的体系结构:
            Throwable(最顶层)
                    Error:出现的不能处理的严重问题
                    Exception:可以处理的问题

如:电脑坏了

            系统中毒:重装系统(Erroe)
            主板坏了:买一台新的(Exception)

1异常体系 & 异常处理

异常处理方式分为两种:

            1、捕获处理:

 捕获处理:
        try...catch语句
         
         try{
                   有可能出现问题的代码
         } catch(ArithmeticException ae){
                                处理异常;
         }
         
         try...catch的执行顺序
                                   首先执行try语句
                                                     如果发现异常。异常下面的代码不再执行,直接跳入catch语句中,catch语句结束后,整个try...catch结束
                                                     如果没有发现异常   。try语句执行结束后,try..catch直接结束,不再执行catch语句  
public class ExceptionDemo2 {
    public static void main(String[] args) throws Exception {
        try {
            System.out.println(1);
            //System.out.println(2 / 0);
            System.out.println(2);
        } catch(ArithmeticException ae) {
            System.out.println("除数不能为0");
        }
        
        System.out.println(3);
        
    }
}

       2、抛出去:

          当我们不想处理异常,或者没有能力处理的时候,我们可以选择抛出异常,谁调用方法谁处理异常

使用关键字throws在方法的声明出抛出异常

public class ExceptionDemo2 {
	public static void main(String[] args) throws Exception {
		
		function();
		
	}
	
	public static void function() throws Exception {
		FileWriter fw = new FileWriter("a.txt");
	}

  

  如何让处理多个异常:

            1、 可以使用多个try...catch语句

             2、使用一个try和多个catch

注意:多个catch之间的顺序

            1、 多个catch之间可以有子父类的关系

            2、平级之间没有顺序关系

            3、子父级有顺序关系。有父类一定要放在子类后面

public class ExceptionDemo3 {
	public static void main(String[] args) {
		try {
			String s = null;
			System.out.println(s.length());
			
			
		} 
		
		catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("出现数组越界了");
		} 
		catch(NullPointerException e) {
			System.out.println("出现空指针了");
		}
		catch(Exception e) {
			System.out.println("出现异常了");
		}
		
		

	}

  

  2Throwable常用方法&自定义异常

            2.1 Throwable常用方法

                          String getMessage()  返回此 throwable 的详细消息字符串 简称原因

                          String toString()  返回此 throwable 的简短描述 简称类型和原因

                           void printStackTrace()  打印异常的堆栈的跟踪信息 简称:类型原因和位置

 

                   

                   2.2 finally的概述和应用场景

                finally  -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止           

               finally:组合try...catch使用,用于释放资源等收尾工作,无论try...catch语句 ,finally的代码一定会执行

 try{
     有可能出现问题的代码
      
   }catch(异常对象){
       处理异常;
   }finally{
       释放资源;
      清理垃圾;
  }

  

public class ExceptionDeom5 {
	public static void main(String[] args) {
		//method();
		
		FileWriter fw =null;
		try {
			System.out.println(2/0);
		        fw =new FileWriter("c.txt");
			fw.write("hello");
			fw.write("java");
			//System.out.println(2/0);
			fw.write("world");
			
			//fw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//释放资源
			try {
				if(fw !=null) {
					fw.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	private static void method() {
		try {
			System.out.println(2/1);
		} catch (ArithmeticException e) {
			System.out.println("除数不能为0");
		}finally {
			
			System.out.println("清理垃圾");
		}
	}

}

  

原文地址:https://www.cnblogs.com/kun19/p/11247868.html