Java如何防止空对象异常
我正试图写越来越少的代码,我正试图找到一种防止崩溃的方法 我遇到的一个例子是:Java如何防止空对象异常,java,exception,Java,Exception,我正试图写越来越少的代码,我正试图找到一种防止崩溃的方法 我遇到的一个例子是: public class MyClass { private User user; public MyClass() { // Get user from another class // Another thread, user can be null for couple of seconds or minutes // Asynchronous ca
public class MyClass
{
private User user;
public MyClass()
{
// Get user from another class
// Another thread, user can be null for couple of seconds or minutes
// Asynchronous call
user = AnotherClass.getUser();
// start method
go();
}
private void go()
{
// Method 1
// Program it is crashing if user is null
if (user.getId() == 155)
{
// TO DO
}
else
{
System.out.println("User is NOT 155 !");
}
// Method 2
// Program still crashes if user is null
if (user != null && user.getId() == 155)
{
// To do
}
else
{
System.out.println("user is not 155");
}
// Method 3
// Program wont crash, but I write much more code !
if (user != null)
{
if (user.getId() == 155)
{
// To do
}
else
{
System.out.println("User is not 155 !");
}
}
else
{
System.out.println("User is not 155 !");
}
}
}
如您所见,方法3正在运行,但我正在编写更多的代码。。。我该怎么办?为什么不在此处使用,所以与其将user设置为null,不如将其设置为user
对象的特殊“null”情况(实现)
e、 g
(理想情况下,另一个class.getUser()将在内部执行空检查)
在这种情况下
user.getId()
可以返回一个特殊值(-1?),该值永远不会等于有效的用户id。因此,您的代码将始终如下所示:
if (user.getId() == 155)
这同样适用于用户
对象上的其他方法。为什么不在此处使用,因此与其将用户设置为null,不如将其设置为用户
对象的特殊“null”情况(实现)
e、 g
(理想情况下,另一个class.getUser()将在内部执行空检查)
在这种情况下
user.getId()
可以返回一个特殊值(-1?),该值永远不会等于有效的用户id。因此,您的代码将始终如下所示:
if (user.getId() == 155)
这同样适用于
User
对象上的其他方法。它必须位于由以下语句开始的块中:
if(user!=null&&user.getId()=155)
这在逻辑上与方法3相同。当JVM看到user
为空时,它应该停止计算该值
我要说的是,我在JVM 1.3中遇到了类似的情况,因此,如果您使用的是一个非常旧的JVM,那么可能就是它。它必须位于由以下语句开始的块中:
if(user!=null&&user.getId()=155)
这在逻辑上与方法3相同。当JVM看到user
为空时,它应该停止计算该值
我要说的是,我在JVM1.3中遇到了类似的情况,因此如果您使用的是一个非常旧的JVM,可能就是它。更喜欢这种方式,即方法2
当和函数的第一个参数计算为false时,总值必须为false
这是最可取和可读的代码
你的假设是错误的,方法2崩溃,方法3工作。在上述代码中,如果user!=空
则仅执行user.getId()==155
。更喜欢这种方式,即方法2
当和函数的第一个参数计算为false时,总值必须为false
这是最可取和可读的代码
你的假设是错误的,方法2崩溃,方法3工作。在上述代码中,如果
user!=null
则仅执行user.getId()==155
。方法2也应该可以工作。再检查一下。在java中,如果第一部分为false,则第二部分不进行计算。重点不是它不起作用,而是它相对详细。方法2也应该起作用。再检查一下。在java中,如果第一部分为false,则第二部分未计算。重点不是它不起作用,而是它相对冗长。如果我交换这两个条件,会怎么样?如果(user.getId()==155&&user!=null)@ZbarceaChristian,则会出现null指针异常。如果交换这些条件,那么它就像If(user.getId()==155){If(user!=null){}
,这是没有意义的。如果我交换这两个条件呢?如果(user.getId()==155&&user!=null)@ZbarceaChristian,那么最终会出现空指针异常。如果交换这些条件,那么它就像If(user.getId()==155){if(user!=null){}
,这没有意义。如果我编辑用户类并添加一个默认值为-1的字段id会怎么样?private int id=-1;public user(/*params*/){}也许这将适用于编辑用户类并添加一个默认值为-1的字段id会怎么样?private int id=-1;public user(/*params*/){}也许这也合适