zoukankan      html  css  js  c++  java
  • 深入理解java异常【绝对经典,推荐最少看五遍】

    http://blog.csdn.net/hguisu/article/details/6155636

    补充:检查异常(checkedException)与运行异常,什么时候throw,什么时候throws,什么时候trycatch的探索。

    Demo1:testException方法中throw的是RuntimeException

     1 package com.westward;
     2 
     3 public class Demo12 {
     4 
     5     public static void main(String[] args) {
     6         testException();
     7     }
     8     public static void testException() {
     9         throw new RuntimeException();
    10         
    11     }
    12 
    13 }
    14 
    15 class MyException extends Exception{//自定义异常,属于检查异常,即非运行时异常
    16     String errorMessage;
    17     public MyException(String eString){
    18         errorMessage= eString;
    19     }
    20     public String getErrorMessage() {
    21         return errorMessage;
    22     }
    23 }

    run:

      Exception in thread "main" java.lang.RuntimeException
      at com.westward.Demo12.testException(Demo12.java:9)
      at com.westward.Demo12.main(Demo12.java:6)


    Demo2:testException方法中throw的是MyException(检查异常,非运行时异常);代码与Demo1对比,主要是line9不同,

     1 package com.westward;
     2 
     3 public class Demo12 {
     4 
     5     public static void main(String[] args) throws MyException {
     6         testException();
     7     }
     8     public static void testException() throws MyException{
     9         throw new MyException("haha--MyException");
    10     }
    11 
    12 }
    13 
    14 class MyException extends Exception{//自定义异常,属于检查异常,即非运行时异常
    15     String errorMessage;
    16     public MyException(String eString){
    17         errorMessage= eString;
    18     }
    19     public String getErrorMessage() {
    20         return errorMessage;
    21     }
    22 }

    run:

      Exception in thread "main" com.westward.MyException: haha--MyException
      at com.westward.Demo12.testException(Demo12.java:10)
      at com.westward.Demo12.main(Demo12.java:6)

    结论:通过这两个demo的代码可知,

    demo1,自定义的方法中throw了一个运行时异常,我们在testException中既没有throws声明这个方法有可能发生异常(在这里指我throw的运行时异常),也没有trycatch对可能发生的异常(在这里指我throw的运行时异常)进行捕捉处理。因为java异常处理机制规定,对于java定义好的运行时异常,由java运行时系统自动处理抛出,不需要程序员声明或者捕捉;

    demo2,自定义的方法中throw了一个非运行时异常(自定义的MyException),由于throw的是检查异常(非运行时异常),所以我们必须在定义的方法头throws声明异常类型或者在方法体trycatch捕获  可能发生非运行时的异常(本例的throw new MyException)。同时,在调用该方法的外层方法也得throws或者trycatch。

    自己对throws/trycatch       throw的简单理解。

    对非运行时异常:一段代码,可能发生异常,即可能throw 一个异常对象,为了提前应对这段可能发生异常的代码(可能throw一个异常对象),java异常机制要求在这个方法的头部throws(声明)对应的异常类,即我的这个方法,我提前声明下,可能会有xxx异常;或这个在方法体内对可能发生异常的代码trycatch(捕捉)。throw抛出异常是相对没有发生异常来说的。throws/trycatch的是可能throw异常的代码。如果代码里我们直接throw了一个异常,我们更要(可以这样理解)throws/trycatch这个方法了。同时,在调用该方法的外层方法也得throws或者trycatch。我们可以理解,throws/trycatch是为了应对可能发生异常所做的应对措施。

    对运行时异常,java运行时程序自动抛出,不是必须throws或者trycatch。

  • 相关阅读:
    win7 下加载MSCOMCTL.OCX
    getGLES1ExtensionString: Could not find GLES 1.x config!
    IUnknown(TVarData(Params[0]).VPointer) as Range
    win8 VB6打开提示MSCOMCTL.ocx未注册
    服务端接口处理流任务要如何返回?
    flink之kafka生产和消费实战-将生产数据存放到mongodb中
    初识doris的那些基本概念
    bash常见用法
    sonar p3c规则配置
    sonar之gitlab ci 在gradle项目的实践(汉化、branch、 commit提交评论)
  • 原文地址:https://www.cnblogs.com/westward/p/5164334.html
Copyright © 2011-2022 走看看