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

    先上两张截自《Java核心技术:卷一》的图:




    下面纯属个人的理解,仅供参考:

    异常处理:
    1.捕获 catch  try-catch 我自己来处理
    2.抛出 throws 交给上层程序处理(捕获)


    个人对异常的理解:
    所以异常处理流程就是这么一回事:
    1.首先我声明说我可能会抛出什么样的异常:例如在方法或类后面跟throws IOException, EOFException
    2.
    /***  时空A  ***/
    try{
    //这里执行一大串的程序A
    code
    more code
    more code
    }


    /***  时空跳转到另一层程序:也即程序A所在的时空B   ******/
    我是一大串程序A{
      code
      more code
      /* 等等,我发现了个异常,我处理不了或者不想去处理,
    决定要抛出去,交给上层(也就是写了try-catch的那一层代码)去处理 */
      if(n < 0)
    throws new IOException;
    }


    /***  时空B抛出了一个异常导致自动进行时空切换,回到时空A  ***/
       ………
    //这里执行一大串的程序A
    }
    catch(ExceptionType e)
    {
    抓到一只异常,放着我来,我来处理这个问题
    ……
    handle for this type
    }


    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.net.UnknownHostException;
    
    /**
     * @author Lv Lang
     *
     */
    public class Exception {
    	public static void print(String s) 
    			throws FileNotFoundException,
    				   UnknownHostException,
    				   IOException
    	{}
    	public static void main(String[] args) {
    		try
    		{
    			//code that might throw exceptions
    			print("Hello");
    			/**
    			如果没有调用print()或者print后面没跟有相应的异常类型,
    			程序会报错:Unreachable catch block for 
    			FileNotFoundException. 
    			This exception is never thrown from
    			the try statement body。
    			*/
    		}
    		catch(FileNotFoundException e){}
    		catch(UnknownHostException e){}
    		catch(IOException e){}
    	}
    }
    /**
     * eclipse快捷键汇总:
     * http://blog.csdn.net/wconvey/article/details/41743365
     *
     * ctrl+shift+o:自动import全部需要的包 
     */

    两种异常处理方式:


    第二种方法也是够坑的,明明你read函数是给我提供服务的,现在反倒要我来处理你抛出来的异常:嫁接责任到我这边来。如果采取这种方式则必须在read方法后面声明说我会抛出IOException否则报错。

    然后是finally在异常中的作用:


    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.UnknownHostException;
    
    /**
     * @author lv.lang
     *
     */
    public class Exception {
    	public static void print(String s) 
    			throws FileNotFoundException,
    				   UnknownHostException,
    				   IOException
    	{}
    	public static void main(String[] args) throws IOException {
    		InputStream in = new FileInputStream(
    			"C:/Users/lv.lang/Desktop/Study/Readme.md");
    		try
    		{
    			//code that might throw exceptions
    			print("Hello");
    			/**
    			如果没有调用print()或者print后面没跟有相应的异常类型,
    			程序会报错:Unreachable catch block for 
    			FileNotFoundException. 
    			This exception is never thrown from
    			the try statement body。
    			*/
    		}
    		catch(FileNotFoundException e){
    			System.out.println("File not found");
    		}
    		catch(UnknownHostException e){}
    		catch(IOException e){}
    		finally
    		/**
    		 * finally里面的代码必定会被执行,常用于执行空间释放
    		 * 例如出现异常则断开数据库连接,或者像本例的关闭文件
    		 */
    		{
    			in.close();
    		}
    	}
    }
    /**
     * eclipse快捷键汇总:
     * http://blog.csdn.net/wconvey/article/details/41743365
     *
     * ctrl+shift+o:自动import全部需要的包 
     */
  • 相关阅读:
    使用EntityFramework之Code First开发与MySql数据库问题一例
    使用Emit创建DBContext对象
    一个实用的Metro滚屏效果示例
    合理使用EntityFramework数据验证的异常错误提示信息
    Metro app中使用内存流压缩和解压
    64位的windows操作系统上运行32位asp.net web应用程序的时候,出现试图加载格式不正确的程序的解决方法
    VSTO中自定义XML功能区实现Ribbon控件互相更新
    基于任务并行库实现多线程下载示例
    Android系统刷机成功后网络信号显示“无服务”修正
    Solution Explorer中显示依赖文件和链接文件
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586414.html
Copyright © 2011-2022 走看看