RuntimeException的特殊情况

本章的第一个例子是:
if(t == null)
throw new NullPointerException();
看起来似乎在传递进入一个方法的每个句柄中都必须检查null(因为不知道调用者是否已传递了一个有效的句柄),这无疑是相当可怕的。但幸运的是,我们根本不必这样做——它属于Java进行的标准运行期检查的一部分。若对一个空句柄发出了调用,Java会自动产生一个NullPointerException违例。所以上述代码在任何情况下都是多余的。
这个类别里含有一系列违例类型。它们全部由Java自动生成,毋需我们亲自动手把它们包含到自己的违例规范里。最方便的是,通过将它们置入单独一个名为RuntimeException的基础类下面,它们全部组合到一起。这是一个很好的继承例子:它建立了一系列具有某种共通性的类型,都具有某些共通的特征与行为。此外,我们没必要专门写一个违例规范,指出一个方法可能会“掷”出一个RuntimeException,因为已经假定可能出现那种情况。由于它们用于指出编程中的错误,所以几乎永远不必专门捕获一个“运行期违例”——RuntimeException——它在默认情况下会自动得到处理。若必须检查RuntimeException,我们的代码就会变得相当繁复。在我们自己的包里,可选择“掷”出一部分RuntimeException。
如果不捕获这些违例,又会出现什么情况呢?由于编译器并不强制违例规范捕获它们,所以假如不捕获的话,一个RuntimeException可能过滤掉我们到达main()方法的所有途径。为体会此时发生的事情,请试试下面这个例子:
 

//: NeverCaught.java
// Ignoring RuntimeExceptions

public class NeverCaught {
  static void f() {
    throw new RuntimeException("From f()");
  }
  static void g() {
    f();
  }
  public static void main(String[] args) {
    g();
  }
} ///:~

大家已经看到,一个RuntimeException(或者从它继承的任何东西)属于一种特殊情况,因为编译器不要求为这些类型指定违例规范。
输出如下:

java.lang.RuntimeException: From f()
at NeverCaught.f(NeverCaught.java:9)
at NeverCaught.g(NeverCaught.java:12)
at NeverCaught.main(NeverCaught.java:15)

所以答案就是:假若一个RuntimeException获得到达main()的所有途径,同时不被捕获,那么当程序退出时,会为那个违例调用printStackTrace()。
注意也许能在自己的代码中仅忽略RuntimeException,因为编译器已正确实行了其他所有控制。因为RuntimeException在此时代表一个编程错误:
(1) 一个我们不能捕获的错误(例如,由客户程序员接收传递给自己方法的一个空句柄)。
(2) 作为一名程序员,一个应在自己的代码中检查的错误(如ArrayIndexOutOfBoundException,此时应注意数组的大小)。
可以看出,最好的做法是在这种情况下违例,因为它们有助于程序的调试。
另外一个有趣的地方是,我们不可将Java违例划分为单一用途的工具。的确,它们设计用于控制那些讨厌的运行期错误——由代码控制范围之外的其他力量产生。但是,它也特别有助于调试某些特殊类型的编程错误,那些是编译器侦测不到的。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索编译器
, nullpointerexception
, 句柄
, 错误
, runtimeexception
一个
runtimeexception、runtime exception、runtimeexception异常、抛出runtimeexception、php runtimeexception,以便于您获取更多的相关知识。

时间: 2024-09-20 00:47:23

RuntimeException的特殊情况的相关文章

Error和Exception、RuntimeException和非RuntimeException的区别

1 异常机制 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果.这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆:可读性降低,将程序代码与处理异常的代码混爹在一起:由调用函数的程序来分析错误,这

Android中调用startActivity结果导致:java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}

Android中调用startActivity结果导致:上网查了一下,总结如下: 第一种情况:java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPointerException 错误代码: private int defaultDrawable=R.drawable.radio; private String defaultTitle=getString(R.string.

[jfinal]com.jfinal.core.ActionHandler 报错是什么情况啊

问题描述 [jfinal]com.jfinal.core.ActionHandler 报错是什么情况啊 com.jfinal.core.ActionHandler - /emergency/saveEmergency java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.jfinal.aop.Invocation.invoke(Invocation.java:85) at com.jiexun

java异常——RuntimeException和User Define Exception

1.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

JAVA之旅(十一)——RuntimeException,异常的总结,Package,jar包,多线程概述

JAVA之旅(十一)--RuntimeException,异常的总结,Package,jar包,多程序概述 继续JAVA之旅 一.RuntimeException 在Exception种有一个特殊的子类异常RuntimeException,翻译过来就是运行异常,如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过,如果在函数上声明了该异常,调用者可以不用处理,编译一样通过 之所以不用函数声明,是因为不需要让调用调用者处理,当然该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况

java.lang.RuntimeException: Canvas: trying to draw too large(203212800bytes) bitmap.

java.lang.RuntimeException: Canvas: trying to draw too large(203212800bytes) bitmap. 异常原因分析:Canvas绘制bitmap需要的内存太大了,OOM了,直接就crash了.   导致原因1:图片太大了,修改图片的大小即可解决. 导致原因2: 图片放的位置不合理,如果只有mipmap-*dpi的几个文件夹,没有drawable-*dpi对应的文件夹,只有默认的drawable文件夹,把图片放到drawable文

用户研究:不同群体在各时段完成调研问卷的情况对比

文章描述:调研问卷投放时间的探讨. 写在前面:本研究暂不涉及周几投放更合理,主要有两点考虑:1.日常调研项目基本都有执行周期的限定,一般都是越能尽快投放越好,且基本都在工作日投放:2.目前执行的调研项目,周几投放的都有,如果时间允许,都会持续一周收集数据,整体的打开率波动不大. 引子 在日常研究工作中,为了提高问卷调研的科学性.增加填答问卷用户的随机性,针对买家的问卷调研,我们一般会采用Email发送调研邀请的方式:针对卖家,会采用站内信和Email的方式.同时为减少对用户的骚扰,他们可以选择退

cpu-linux下 如何使用oprofile 分析代码的内存使用情况?

问题描述 linux下 如何使用oprofile 分析代码的内存使用情况? 小弟已知如何使用oprofile查看CPU的使用情况,现在想知道用它能查看内存的使用情况吗? 是通过配置 opcontrol --event=MEMORY _ REQUESTS :1000 来查看吗?

deluge-shell能处理在执行过程中产生新的console,并在console中执行命令的情况吗?

问题描述 shell能处理在执行过程中产生新的console,并在console中执行命令的情况吗? 在shell执行 deluge-console 命令时会单独打开一个console cli窗口,可在其中执行一系列自定义命令.这个过程我希望全部用shell来实现,请问shell能 处理这种执行过程中出现新的命令执行console的情况吗 解决方案 可以,启动一个cmd.exe