java main(null)_关于java:如果在main()方法中没有处理NullPointerException会发生什么?...

在下面的示例代码片段中,在从check()方法隐式传播到main()方法后,main()方法中没有处理NullPointerException。

class Simple {

public static void main(String[] args) {

check(26);

}

public static void check(int a) throws SQLException, IOException {

if (a % 2 == 0) {

throw new NullPointerException("it is divisible by 2"); //we are raising a Null pointer exception here

} else if (a % 3 == 0) {

throw new IOException("it is divisible by 3"); //we are raising a IO Exception here

} else if (a % 5 == 0) {

throw new SQLException("it is divisible by 5"); //we are raising a SQL Exception here

}

}

}

编译错误发生在check(26);代码行抛出SQL异常,IO异常,这是被检查的异常从check(int a)方法显式传播到main()方法。 如果在main()方法中没有处理NullPointerException,那么它在哪里被处理?

您永远不会"处理"NPE - 而是调试代码以防止它们

该代码是否编译? 您的main方法不会抛出异常,也不会有try / catch

@HovercraftFullOfEels我无法编译代码,因为我在代码中的check(26)步骤看到编译错误。 在该步骤添加try catch后,我没有看到任何编译错误

As we already know the Null pointer Exception is propagated implicitly without using throws keyword to main method

不必要。如果未处理,它将向上传播调用树到任何入口点。如果您通过java工具(或其他调用main的东西)运行代码,那将是main,但如果您正在使用Swing,或者编写servlet等,它可能是一个不同的入口点(肯定会有一个servlet)。

but is it necessary if it should be handled in the main method.

这取决于你所说的"必要"。如果不这样做,并且使用java工具运行代码,那么如果存在未处理的NPE,程序将终止。

通常的做法是不捕获NullPointerException,因为你的代码永远不应该抛出一个NPE,所以如果确实如此,那就是你想修复的bug(通过找出为什么NPE被抛出并修复它),而不是通过捕获NPE。

思想气垫船满鳗鱼是正确的,处理NPE通常是不好的做法。您可以处理它以及任何其他未经检查的异常。

try {

// your code

check(26);

} catch (NullPointerException e) {

// do something

}

您可以在此处阅读有关未经检查的例外情况

https://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

您的代码有几个问题,它不会编译,因为:

您正在从静态上下文(main)调用非静态方法(检查)。

你还没有在main方法中处理IOException,SQLException异常(抛出它们或用try catch包围它们)

这与NPE(空指针异常)无关,并且正如其他人所说的那样,编译器允许Null Pointer Exception,因为它是未经检查的异常。

代码在完成您提到的更改后编译。 1.使方法静态,以便可以在main方法中访问2.向main方法添加throws以便它传播到jvm

@Aditya请记住投票给有用的答案,以鼓励社区成员提供更多帮助。

是的,并感谢您的投入。 我也是这样做的

首先:请注意,在实际代码中,您不会抛出相关的异常。

所有这些错误情况都应该抛出IllegalArgumentException。

NullPointerException是RuntimeException,设计为不被客户端特别捕获(许多JDK RuntimeException,例如ArrayIndexOutOfBoundsException,ArithmeticException ......)。

抛出它时,通常意味着引发问题的实际代码存在问题。

但是我们应该抓住它吗?

实际上,它取决于必须应对的类/组件的视图点。

1)如果从抛出NullPointerException的组件/类的角度来看,我们认为它是一个应由开发人员纠正的编程错误,我们希望它传播到类的客户端。

所以我们不想抓住它。

2)在其他情况下,我们知道NullPointerException是编程错误,但我们不希望它停止程序并传播给应用程序用户。所以我们想要捕获NullPointerException,但也有任何可能导致程序异常终止的异常。

因此,我们将"有风险"的代码括在catch(Exception)语句中。

在运行时将抛出空指针异常,即使我们处理它也会传播它

此异常涉及数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值