zoukankan      html  css  js  c++  java
  • 异常处理

    我们在写代码的时候,经常出现一些小问题,那么为了方便我们处理这些问题,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("清理垃圾");
    		}
    	}
    
    }
    

      

  • 相关阅读:
    关于课程设计、毕业设计的一些总结与思考
    分享一个Panda C-60 维修心得
    未能加载文件或程序集“SuperMap.Data.dll”
    VS2017环境下安装AO10.2的方法
    SQL Server连接错误1326
    VMWare虚拟机中CPU过高的问题
    Apktool编译找不到“keyboardNavigationCluster”
    Aspose.Cells设置单元格格式
    谷歌Chrome浏览器无法安装插件的解决方法
    Global Mapper如何加载在线地图
  • 原文地址:https://www.cnblogs.com/kun19/p/11247868.html
Copyright © 2011-2022 走看看