在java的异常类体系中,Error和RuntimeException是非检查型异常,其他的都是检查型异常。

所有方法都可以在不声明throws的情况下抛出RuntimeException及其子类

不可以在不声明的情况下抛出非RuntimeException

简单的说,非RuntimeException必要自己写catch块处理掉。

RuntimeException不用try 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());

}

}

}

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());

}

}

}

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对象上调用方法了。

String s=null;

boolean eq=s.equals(""); // NullPointerException

这里你看的非常明白了,为什么一到程序中就晕呢?

public int getNumber(String str){

if(str.equals("A")) return 1;

else if(str.equals("B")) return 2;

}

这个方法就有可能抛出NullPointerException,我建议你主动抛出异常,因为代码一多,你可能又晕了。

public int getNumber(String str){

if(str==null) throw new NullPointerException("参数不能为空");

//你是否觉得明白多了

if(str.equals("A")) return 1;

else if(str.equals("B")) return 2;

}

2、NumberFormatException:继承IllegalArgumentException,字符串转换为数字时出现。比如int i= Integer.parseInt("ab3");

3、ArrayIndexOutOfBoundsException:数组越界。比如 int[] a=new int[3]; int b=a[3];

4、StringIndexOutOfBoundsException:字符串越界。比如 String s="hello"; char c=s.chatAt(6);

5、ClassCastException:类型转换错误。比如 Object obj=new Object(); String s=(String)obj;

6、UnsupportedOperationException:该操作不被支持。如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。

7、ArithmeticException:算术错误,典型的就是0作为除数的时候。

8、IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常。

java runtime 异常_Java中RuntimeException和Exception相关推荐

  1. java runtime异常_JAVA RuntimeException 问题

    展开全部 运行异常可以不32313133353236313431303231363533e78988e69d8331333264656136处理是不对.只要是异常就要处理.你不处理程序会不按你的设计走 ...

  2. java堆栈异常_Java中获得异常堆栈使用轨迹的方法是。

    Java中获得异常堆栈使用轨迹的方法是. 答:fillinStack() 中国大学MOOC: 互联网金融品牌建设能增加客户对企业的依赖度,促使客户重复使用某个企业产品或服务,从而产生一定的客户黏性 答 ...

  3. java 文件解析异常_java中异常的解析

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  4. java 异常处理发生异常_Java中的异常处理

    java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...

  5. java常见检查异常_java中常见异常总汇,附解释

    Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...

  6. Java中非法参数的异常_Java中的异常

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  7. java runnable 异常_JAVA 线程中的异常捕获

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

  8. java 到异常_java编程中遇到的异常以及异常的一些处理

    n 异常的概念 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户? 比如除法运算.读写文件操作,都可能 ...

  9. java 如何忽略异常_java中如何解决异常

    原文 | dzone.com/articles/9-- 作者 | Thorben Janssen 翻译 | geekymv 无论你是初学者还是经验丰富的开发人员,对于你和你的团队来说,提高异常处理的能 ...

最新文章

  1. IATF信息保障技术框架
  2. 通达oa与mysql集成_安装通达OA后想使用其自带的Mysql数据库的解决方法
  3. (JAVA学习笔记) 接口
  4. 采用APACHE POI操作EXCEL文件--计算式调用另一文件
  5. Maven 仓库、镜像
  6. java 封装dll_java调用C#封装的DLL文件
  7. 扫描仪scanner接口_QR Code Scanner –适用于Android的条形码扫描仪
  8. matlab人口增长模型拟合,matlab曲线拟合人口增长模型及其数量预测
  9. 如何用Android Stuido 调用百度翻译的API
  10. 华晨宏盛让理财更有实用性的小窍门有哪些?最好的理财方法有哪些
  11. Markdown语法教程
  12. sleep(0) 的作用
  13. bga焊盘怎么做_BGA焊盘的设计
  14. postgresql数据库连接,增删改查数据
  15. xctf-HTTP通常使用两种请求方法
  16. 树莓派从U盘启动系统
  17. ACProtect2.0脱壳
  18. 郗慧林:从投资到被投资
  19. 手把手教你搭建私有云盘(发车啦)
  20. Linux--常用ping命令详解(adb shell)

热门文章

  1. MySQL 高水位update_Oracle delete 高水位线处理问题
  2. pcie组raid linux,PCIe 4.0有多强大?组RAID 0阵列之后惊呆了
  3. 计算机主机风扇安装方法,电脑机箱怎么安装风扇减震胶钉保护主板cup?
  4. vue表单的基本使用
  5. 《javaScript100例|03》自写javaScript+CSS轮显效果
  6. JSP+Tomcat+SQL Server 2000+JDBC实现合同信息管理系统
  7. java在线找错_平台配置及测试错误提示及解决方案
  8. CSS揭秘(二)背景与边框
  9. Tips_一级菜单栏实现
  10. vue 如何点击按钮返回上一页