JAVA异常机制基础

什么是异常

  • 指程序运行中出现的各种状况。发生在程序运行期间,影响了正常的程序执行流程

异常分类

  • 检查性异常
    • 是程序员无法遇见的,最具代表性的是用户错误或问题引起的异常。如打开一个不存在文件时。
  • 运行时异常
    • 可能被程序员避免的异常,可以在编译时被忽略
  • 错误ERROR
    • 是脱离程序员控制的问题,不是异常。由虚拟机生成并抛出,大多与错误与代码编写这无关。遇到时JVM一般会选择终止线程。

异常处理机制

  • 抛出异常

  • 捕获异常

  • 语法

    		//catch要从小到大
    		try {
    			System.out.println(1/0);
    		} catch (Exception e) {//想要捕获的异常类型
    			System.out.println("Exception");
    		}catch (Throwable t) {
    			System.err.println("Throwable");
    		}
    		finally {//可以不要 多用于善后工作,如关闭io流
    			System.out.println("结束");
    		}
    	}
    
  • 自定义异常

    • 步骤

      • 创建自定义异常类
      • 在方法中通过throw关键字抛出异常对象
      • 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给调用者的异常,继续进行下一步操作
      • 在出现异常方法的调用者中捕获并处理异常
    • 实例

      //自定义异常类
      public class Student extends Exception{
      	private int id;
      
      	public Student(int id) {
      		this.id = id;
      	}
      
      	@Override
      	public String toString() {
      		return "Student [id=" + id + "]";
      	}
      } 
      
      //测试类
      public class hello {
      	static void test(int id) throws Student{
      		if (id<0) {
      			throw new Student(id); //throw 方法内部
      		}
      		System.out.println("结束");
      	}
      	public static void main(String[] args) throws Student{
      		try {
      			test(-2);
      		} catch (Student e) {
      			// TODO Auto-generated catch block
      			System.out.println(e);
      		}
      	} 
      }
      
      /*
      输出:
      
      Student [id=2]
      
      */
      
  • 实际应用中的经验总结

    • 处理运行时异常时,用逻辑去合理规避同时辅助 try- catch 处理
    • 在多重 catchi 块后面,可以加一个 catch (Exception)来处理可能会被遗漏的异常
    • 对于不确定的代码,也可以加上 try- catch,处理潜在的异常
    • 尽量去处理异常,切忌只是简单地调用 printstack Trace0) 去打印输出
    • 具体如何处理异常要根据不同的业务需求和异常类型去决定
    • 尽量添加 finally 语句块去释放占用的资源
posted @ 2021-01-06 23:17  SwiftYao  阅读(78)  评论(0)    收藏  举报