Java中RuntimeException和Exception的区别
来源:互联网 发布:山西省软件开发企业 编辑:程序博客网 时间:2024/05/21 14:08
在java的异常类体系中,Error和RuntimeException是非检查型异常,其他的都是检查型异常。
所有方法都可以在不声明throws的情况下抛出RuntimeException及其子类
不可以在不声明的情况下抛出非RuntimeException
简单的说,非RuntimeException要自己写catch块处理掉。
1.RuntimeException
今天摩根IT电面的时候被问到Exception和RuntimeException的区别,当时答不出来,大囧,晚上来学习一下。
首先看一段代码,主要内容就是将字符串类型的数字转化为整型的数字,然后让两个数字相乘,代码如下:
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方法的源代码如下:
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的概念:
- Exception:在程序中必须使用try...catch进行处理。
- RuntimeException:可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。
对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。
2.User Defined Exception
下面给出一个自定义异常的实例:
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: 自定义异常
常见的RuntimeException- -
RuntimeException是开发中最容易遇到的,下面列举一下常见的RuntimeException:
1、NullPointerException:见的最多了,其实很简单,一般都是在null对象上调用方法了。
if(str.equals("A")) return 1;
else if(str.equals("B")) return 2;
if(str==null) throw new NullPointerException("参数不能为空");
if(str.equals("A")) return 1;
2、NumberFormatException:继承IllegalArgumentException
3、ArrayIndexOutOfBoundsExc
4、StringIndexOutOfBoundsEx
5、ClassCastException:类型转换错误。比如 Object obj=new Object(); String s=(String)obj;
6、UnsupportedOperationExce
7、ArithmeticException:算术错误,典型的就是0作为除数的时候。
8、IllegalArgumentException
- Java中RuntimeException和Exception的区别
- Java中RuntimeException和Exception的区别
- Java中Exception和RuntimeException区别
- java exception 和 runtimeException的区别
- Exception和RuntimeException的区别
- Exception和RuntimeException的区别
- java中Exception和RuntimeException
- Java初学习 - java exception 和 runtimeException的区别
- JAVA Exception和RuntimeException的区别和用法、用处
- java error和exception的区别,RuntimeException和非RuntimeException的区别
- Java基础回顾 : RuntimeException和Exception的区别
- java 中的Exception和RuntimeException区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- hive 建表例子
- DirectX 3D Mesh类
- 数据结构_树形结构_二叉树
- Mysql 无法登陆 Error 1045
- 学习html5(1)
- Java中RuntimeException和Exception的区别
- coredata 详解
- android:java.lang.NoClassDefFoundError: com.lidroid.xutils.HttpUtils 异常的解决
- 软件测试简介、测试原则、测试过程、测试内容、测试方法
- thrift之TTransport层的堵塞的套接字I/O传输类TSocket
- MFC对话框控件随对话框的大小变化
- 广积粮—筑高墙—缓称王
- C#构造函数
- 在arm上使用python-2.7.10