java无法实例化解决办法,在Java中,当对象无法实例化时会发生什么?

I come from a c++ background and I find myself constantly doing this in java:

SomeClass sc=new SomeClass();

if(null!=sc)

{

sc.doSomething();

}

What I want to know is what will be in the variable sc if the constructor fails for some reason (like maybe not enough memory). I can'

t find a straight answer, and I am worried that I am just wasting my time because maybe if the new operator fails would the program just crash anyway?

解决方案

The Java Specification Language 3rd Edition covers your question thoroughly:

Whenever a new class instance is created, memory space is allocated for it with room for all the instance variables declared in the class type and all the instance variables declared in each superclass of the class type, including all the instance variables that may be hidden. If there is not sufficient space available to allocate memory for the object, then creation of the class instance completes abruptly with an OutOfMemoryError. Otherwise, all the instance variables in the new object, including those declared in superclasses, are initialized to their default values.

Just before a reference to the newly created object is returned as the result, the indicated constructor is processed to initialize the new object using the following procedure: [...]

So it's simply not possible for a new expression to return null. Whatever is returned, if the execution completes normally, will always be a valid instanceof whatever class was instantiated.

Handling exceptions

Generally speaking, possible exceptions are usually handled with a try-catch block:

String someString = askFromUser();

try {

int num = Integer.parseInt(someString);

doSomethingWith(num);

} catch (NumberFormatException e) {

complainAboutIt();

}

In your case, you may consider putting new SomeClass() in a try block with a corresponding catch (OutOfMemoryError e), but this is highly atypical. Unless you plan to do something meaningful when this happens, in most typical scenarios it's best to not catch any Error that may occur during your program execution.

From the documentation:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.

A method is not required to declare in its throws clause any subclasses of Error that might be thrown during the execution of the method but not caught, since these errors are abnormal conditions that should never occur.

Related questions

See also

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值