社区首页 >问答首页 >当抛出一个新的NPE时,不需要Java的“抛出”子句?为什么添加“抛出异常”会导致编译错误?

当抛出一个新的NPE时,不需要Java的“抛出”子句?为什么添加“抛出异常”会导致编译错误?
EN

Stack Overflow用户
提问于 2015-03-12 12:51:21
回答 3查看 873关注 0票数 0

我对“抛出”子句感到好奇,并编写了下面的代码(我使用EclipseandJava7)。最初,我只使用块15 (期望编译错误,但没有发生.)然后这让我开始写其他的积木。

代码语言:javascript
代码运行次数:0
复制
// 1
public void throwNPE() {
    throw new NullPointerException();
}

// 2
public void throwNPEWithGenericClause() throws Exception {
    throw new NullPointerException();
}

// 3
public void throwNPEWithNPEClause() throws NullPointerException {
    throw new NullPointerException();
}

// 4
public void throwNPEWithIAEClause() throws IllegalArgumentException {
    throw new NullPointerException();
}

// 5
public void callThrowNPE() {
    throwNPE();
}

// 6
public void callThrowNPEWithGenericClause() {
    throwNPEWithGenericClause(); // COMPILATION ERROR
}

// 7
public void callThrowNPEWithNPEClause() {
    throwNPEWithNPEClause();
}

// 8
public void callThrowNPEWithIAEClause() {
    throwNPEWithIAEClause();
}

老实说,我本以为:

(a) 1中的编译错误(未处理的异常?我的方法不应该通知任何‘后续调用者’这将引发某种异常吗?)

(b) 4中的某种问题。(可能是编译错误?我投了一个NPE,而条款上写的是IAE)

(C)5.6.7和8中的编译错误(未处理的异常?我省略了“抛出”条款)

(d)也许有人也能告诉我为什么6.是我唯一得到编译错误的原因.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-12 13:03:11

未选中RuntimeException,因此编译器在抛出RuntimeException.的异常子类时不会发出警告。如果您需要编译器警告您,那么您应该使用异常或它的子类。

1) NullPointerException extends RuntimeException,因此编译器不会出现任何错误。

2)即使您的方法抛出NullPointerException,因为您用抛出异常标记了该方法,编译器也警告您在它的调用者中捕获它。

3)与第一次答覆相同

4)与第一答案IllegalArgumentException extends RuntimeException相同

5) throwNPE根本不抛任何东西。

6)即使在NullPointerException (RuntimeException)中抛出一个throwNPEWithGenericClause,但由于将该方法标记为检查异常,编译器也不允许。

7,8)与第一次回答相同。两个运行时异常,不需要检查。

票数 1
EN

Stack Overflow用户

发布于 2015-03-12 12:58:38

Java中的异常可以分为三种不同的基本类型:

错误 (由JVM引发,如果发生致命错误,则为occoures)

异常 (所有选中的异常都继承自此)

RuntimeException (所有未经检查的异常都继承自此)

都是暴徒

票数 3
EN

Stack Overflow用户

发布于 2015-03-12 12:55:30

RuntimeException或未检查的异常实例(如NPE )不需要抛出/捕获。它们可以被捕获,但是通常您不想这样做,因为它表示程序流异常,并且应该终止程序。一般来说,如果不可能继续下去,那么它将作为一个RuntimeException终止。如果您想阻止对空值的某种操作,那么应该检查它是否为空,而不是期望NPE。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29019958

复制
相关文章
Python抛出异常_python抛出异常的作用
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误
全栈程序员站长
2022/11/02
2.5K0
Java 捕获和抛出异常
Java中把非正常情况分为两种:异常(Exception)和错误(Error),其中Error错误一般是指与虚拟机相关的问题,这种错误无法恢复或不可能捕获,而对于Exception异常我们可以使用try…catch进行捕获。try…catch不允许存在单独的try块或catch块,可存在多个catch块。try块中存放业务功能代码,catch块中存放异常处理代码。Java7后支持用catch捕获多个异常,也可捕获自定义异常。对于捕获的异常一般可以使用printStackTrace()方法追踪输出至标准错误流。try…catch后可以添加finally,使用finally可以保证除系统退出外finally块中代码绝对执行。捕获异常时需要注意一定要先捕获小异常,再捕获大异常,否则小异常将无法被捕获。代码示例如下
用户7886150
2021/04/06
1.9K0
【C++ 语言】异常 ( 抛出字符串异常 | 抛出异常对象 | 抛出任意对象 | 抛出自定义异常 )
1. 异常处理 : 使用 " try{}catch(){} " 将抛出异常的代码包起来 , 注意将可能抛出异常的代码包裹在 try 后的大括号中 , 将异常处理逻辑放在 catch 后的大括号中 ;
韩曙亮
2023/03/27
1.3K0
android 抛出FileNotFoundException异常
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
1.6K0
python抛出异常会终止程序吗_python抛出异常的作用
当python执行无效的代码时,就会抛出异常。用 try 和 catch 语句可以处理异常,以避免程序的崩溃。我们也可以在代码中抛出自己的异常,抛出异常意味着 停止运行这个函数中的代码,将程序执行转到except语句
全栈程序员站长
2022/11/02
1.8K0
.net remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2018/09/19
1.4K0
.net remoting 抛出异常
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2019/09/27
1.4K0
dotnet remoting 抛出异常
dotnet remoting 抛出异常
所有在远程软件运行的类,如果需要传输到本地,都需要继承 MarshalByRefObject 或其他可以序列化的类。
林德熙
2022/08/04
1K0
应该抛出什么异常?不应该抛出什么异常?(.NET/C#)
2018-02-04 13:25
walterlv
2018/09/18
1.7K0
python中用来抛出异常的关键字是( )_python异常抛出
动抛出异常raise typeerror(类型错误) # 7. 触发异常try: raise typeerror(类型错误)except exception as e: print(e) # 8. 自定义异常class my…syntaxerror 语法错误 python代码非法,代码不能编译(个人认为这是语法错误,写错了) typeerror 类型错误传入对象类型与要求的不符合 unboundlocalerror …
全栈程序员站长
2022/11/02
1K0
python抛出异常会终止程序吗_catch里面抛出异常
如果没有 try 和 except 语句覆盖抛出异常的 raise 语句,该程序就会崩溃,并显示异常的出错信息。通常是调用该函数的代码知道如何处理异常,而不是该函数本身。所以你常常会看到 raise 语句在一个函数中,try 和 except 语句在调用该函数的代码中。
全栈程序员站长
2022/11/19
2.2K0
抛出和接收异常的顺序
异常(exception)是C++语言引入的错误处理机制。它 采用了统一的方式对程序的运行时错误进行处理,具有标准化、安全和高效的特点。C++为了实现异常处理,引入了三个关键字:try、throw、catch。异常由throw抛出,格式为throw[expression],由catch捕捉。Try语句块是可能抛出异常的语句块,它通常和一个或多个catch语句块连续出现。
恋喵大鲤鱼
2018/08/03
9660
Java-捕获和抛出异常
Error和Exception 什么是异常 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合 你的要求、你的程序要打开某个文件,这个文件可能不仔仕或省乂件信孔个对,小女次队效库的数据,数据可能是空的等。我们的程序再跑着,内存或硬盘可能满了,等等。 软件程序在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常,英文是: Exception,意思是例外。这些,例外情况,或首叫异吊,忑么L找1与住/e口年心理。而不至于程序崩溃。 异常指程序运行中出现的不期而至的各种状况,
白衣少年
2022/12/26
9420
Java-捕获和抛出异常
【说站】java队列抛出异常的介绍
1、等队列满了之后,将元素再次插入到队列,就会抛出IllegalStateException(QueueFull)异常。
很酷的站长
2022/11/24
5260
【说站】java队列抛出异常的介绍
springboot 如何优雅的抛出异常
之前项目的异常是一层一层抛出去及其麻烦,并且每个层都要try catch 然后把错误信息包装返回到最顶层 ,从service一层一层抛出去。人都写傻了,后面发现了springboot项目有全局拦截器。还是看的太浅了,先随便创建一个
全栈程序员站长
2021/04/07
1.4K0
python抛出异常和捕获异常_在try块中可以抛出异常吗
2.解析 关键字try 以及except是 使用Python 解释器主动抛出异常的关键, Python解释器从上向下执行 当运行try中的某行代码出错,会直接进入except中执行下方代码 try中错行下方的代码不会被运行 except…as… 是固定的语法格式 打印traceback信息 finally 后的代码不管是否抛出异常都会执行 except 的原理 调用sys中 exc.info 方法返回基本信息 所以抛出异常的第一步拓展可以在这里开始 注意 每个关键字下方的代码都是独立的(所有的变量都是局部变量)
全栈程序员站长
2022/11/02
4.5K0
Java 如何抛出异常、自定义异常
1、定义 : 一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。
Java编程指南
2019/08/02
4.8K0
Java 如何抛出异常、自定义异常
Java 如何抛出异常、自定义异常[通俗易懂]
1、定义 : 一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。
全栈程序员站长
2022/07/29
4K0
Java 如何抛出异常、自定义异常[通俗易懂]
c++构造函数是否可以抛出异常_什么叫抛出异常
从语法上来说,构造函数可以抛出异常。但从逻辑上和风险控制上,构造函数中尽量不要抛出异常。万不得已,一定要注意防止内存泄露。
全栈程序员站长
2022/09/22
1.7K1
django 主动抛出 403 异常
* 网站名称:obaby@mars * 网址:https://h4ck.org.cn/ * 本文标题: 《django 主动抛出 403 异常》 * 本文链接:https://h4ck.org.cn/2018/12/django-%e4%b8%bb%e5%8a%a8%e6%8a%9b%e5%87%ba-403-%e5%bc%82%e5%b8%b8/ * 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。
obaby
2023/02/24
7540

相似问题

重新抛出一个异常:为什么该方法编译时没有抛出子句?

51

为什么抛出本身会导致异常?

13

Java异常和抛出子句

34

为什么会抛出异常?

16

当底层任务抛出异常时,Celery为什么不抛出异常?

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档