Java 异常机制

Java 异常机制

  1. 什么是异常
    异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程
  2. 为什么要有异常
    • 什么出错了
    • 哪里出错了
    • 为什么出错了
    • 通过异常可以降低错误处理代码的复杂度
  3. 异常的结构
    主要是两大类错误 error异常exception 它们均继承自Throwable
    Alt text
  • Error 表示不希望被程序捕获或者是程序无法处理的错误。 比如StackOverflowError经常由递归操作,向这样类型的操作是jvm错误我们是无法挽回的。
  • Exception 错误是假设程序猿们回去处理这些异常例如 数据库连接错误 网络连接错误,Exception也分为两种检查类型(checked)和未检查类型(unchecked)、
    • 检查型的需要强制加try catch语句
    • 非检查型的没有这些限制

4.异常的处理机制
Java异常处理的本质是抛出异常和捕获异常

  • 抛出异常 由上层代码进行处理

      	if(object== null){
      	    throw new NullPointerException();
      	}
    
  • 捕获异常 捕获之后由当前catch中的代码块进行操作

      try{
          //做一些可能出现异常错误的操作
      }catch(Exception e){
      	//对异常之后进行操作
      }finally{
         //无论是否出现异常都会经过这里
      }
    

下面通过一次从磁盘中读取一个文件来演示一遍完整的异常捕获

void fun(){
	  int count=0;  
      InputStreamstreamReader = null;    
      try{  
          streamReader=newFileInputStream(new File("test.txt"));  
          while(streamReader.read()!=-1) {   
             count++;  
          }  
      }catch (IOException e) {  
          e.printStackTrace();  
      }finally{  
          try{  
	          if(streamReader != null){
				   streamReader.close();  
	          }  
          }catch (IOException e) {  
             e.printStackTrace();  
          }  
      }  
}

上面我们只是获取到Java的异常且对其进行了处理,但是我们也可以获得异常之后不进行处理进行抛出
有关抛出的有两个异常抛出关键字有两个 throwthrows 现在咱们就对其进行分析。

  • throw 程序执行完throw语句之后立即停止;throw后面的任何语句不被执行,最邻近的try块用来检查它是否含有一个与异常类型匹配的catch语句。

       void fun(){
          try{
              throw new NullPointerException();
          }catch(NullPointerException e){
              throw e;
          }
      }
      
      void fix(){
      	try{
              fun();
          }catch(NullPointerException e){
              System.out.println("Recaught: "+e);
          }
      }
    
  • throws 表示一个方法可能会抛出异常,但是这个方法不对它进行处理而是向上抛出,这样这个方法的调用者保护它自己而不发生异常。
    代码示例

      public void fun() throws Exception{
         // 做一些可能会出现异常的操作
      }
    

根据上面那个示例来进行更改来演示throws

	void fun() throws Exception{
		//操作可能出现异常
	   throw new NullPointerException();
    }
    
	void fix(){
		try{
            fun();
        }catch(NullPointerException e){
            System.out.println("Recaught: "+e);
        }
	}

异常使用指南

  1. 在多重Exception之后再加一个Exception的来防止异常遗漏
  2. 对于调用不确定是否出现错误的方法,用try将代码块包住。处理潜在的异常
  3. 尽量处理异常而不是就catch住然后打印错误信息
  4. 根据已有的业务逻辑来对异常进行异常逻辑操作
  5. 在一些时候尽量使用finally去释放占用的资源

posted on 2017-09-18 23:15  王守昌  阅读(148)  评论(0编辑  收藏  举报

导航