• java异常——RuntimeException和User Define Exception


    1.RuntimeException

    今天摩根IT电面的时候被问到Exception和RuntimeException的区别,当时答不出来,大囧,晚上来学习一下。

    首先看一段代码,主要内容就是将字符串类型的数字转化为整型的数字,然后让两个数字相乘,代码如下:

    View Code
    public class RuntimeException {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String str="123";
            int temp=Integer.parseInt(str);
            System.out.println(temp*temp);
        }
    }

    查看parseInt方法的源代码如下:

    View Code
       public static int parseInt(String s) throws NumberFormatException {
        return parseInt(s,10);
        }

    我们发现这个方法中抛出了NumberFormatException异常,但是在上面的代码中我们没有找到try...catch来处理,这是为什么呢。按照我们异常处理的知识,如果一个方法通过throws抛出了异常,那么可以在抛出异常的方法中不使用try...catch,但是在调用这个方法的地方必须有try...catch来处理。

    下面来观察NumberFormatException类的继承关系:

    从上图我们可以发现NumberFormatException是RuntimeException的子类,那么这就需要我们清楚Exception和RuntimeException的概念:

    1. Exception:在程序中必须使用try...catch进行处理。
    2. RuntimeException:可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

    对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。

    2.User Defined Exception

    下面给出一个自定义异常的实例:

    View Code
    class MyException extends Exception{
        public MyException(String msg){
            super(msg);
        }
    }
    
    public class DefaultException {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            try{
                throw new MyException("自定义异常");
            }catch(Exception e){
                System.out.println(e);//edu.sjtu.ist.comutil.MyException: 自定义异常
                //System.err.println(e);
    //            e.printStackTrace();
    //            StackTraceElement[] sts = e.getStackTrace();
    //            for (StackTraceElement st : sts){
    //                System.err.println(st);
    //            }
    
            //    System.err.println(e.getStackTrace());
            }
    
        }
    
    }

    输出结果为:

    MyException: 自定义异常

  • 相关阅读:
    windows 核心编程 第2章 U n i c o d e
    在一个类内不可以定义自身类的对象,为什么定义自身类的静态对象又是正确的
    将JPG图片绘制在对话框背景上:(这段代码绝对可以执行)
    小技巧给CEdit设置字体
    惠普 升级两年保修
    DoModal返回1,对话框不能显示,今天碰到项目在用unicode编码,和多字符编码时候出现的
    MFC 绘图
    CString类所有成员函数详解
    mysql 一些问题
    错误:不能实例化抽象类
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2468873.html
Copyright © 2020-2023  润新知