use*_*723 9 java creation object instantiation new-operator
我来自c ++背景,我发现自己经常在java中这样做:
SomeClass sc=new SomeClass();
if(null!=sc)
{
sc.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,如果构造函数由于某种原因(例如可能没有足够的内存)而失败,那么变量sc中会出现什么.我找不到一个直接的答案,我担心我只是在浪费时间,因为如果新的操作员失败,程序会崩溃吗?
pol*_*nts 12
在Java规范语言第三版全面覆盖你的问题:
12.5创建新的类实例
每当创建一个新的类实例时,就会为它分配内存空间,为类类型中声明的所有实例变量提供空间,并在类类型的每个超类中声明所有实例变量,包括可能隐藏的所有实例变量.如果没有足够的可用空间来为对象分配内存,那么类实例的创建会突然完成
OutOfMemoryError.否则,新对象中的所有实例变量(包括在超类中声明的那些变量)都将初始化为其默认值.在作为结果返回对新创建的对象的引用之前,处理指示的构造函数以使用以下过程初始化新对象:[...]
所以new表达式根本不可能返回null.无论返回什么,如果执行正常完成,将始终是一个有效的instanceof实例化类.
一般来说,可能的异常通常用try-catch块来处理:
String someString = askFromUser();
try {
int num = Integer.parseInt(someString);
doSomethingWith(num);
} catch (NumberFormatException e) {
complainAboutIt();
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你可以考虑放入一个相应new SomeClass()的try块catch (OutOfMemoryError e),但这是非常不典型的.除非您计划在发生这种情况时做一些有意义的事情,否则在大多数典型情况下,最好不要在程序执行期间发生catch任何Error事情.
从文档:
一个
Error是的子类Throwable,表示严重的问题,合理的应用程序不应该try来catch.大多数此类错误都是异常情况.不需要在
throws子句中声明在Error执行方法期间可能抛出但未捕获的任何子类的方法,因为这些错误是永远不会发生的异常情况.
| 归档时间: |
|
| 查看次数: |
5512 次 |
| 最近记录: |