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:
12.5 Creation of New Class Instances
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.
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 ofThrowable
that indicates serious problems that a reasonable application should nottry
tocatch
. Most such errors are abnormal conditions.A method is not required to declare in its
throws
clause any subclasses ofError
that might be thrown during the execution of the method but not caught, since these errors are abnormal conditions that should never occur.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With