[ACCEPTED]-Java: does Object class have a constructor?-constructor
Super constructors are run before sub/base 3 constructors. In your example Object's constructor 2 has already been run when new Throwable().printStackTrace()
is executed.
A 1 more explicit version of your code:
public ConTest()
{
super();
new Throwable().printStackTrace(); // you will not see super() (Object.<init>) in this stack trace.
}
You do not see it in the stack trace, because 3 it was already called. The exception is 2 thrown in your code.
Your code is equivalent 1 to writing:
public ConTest() {
super(); // this will call the Object constructor
new Throwable().printStackTrace();
}
You do not see it in the stack trace because 3 the constructor of the super class is called 2 before your new Throwable().printStackTace()
call. What the compiler actually 1 creates is following .
public ConTest()
{
super(); // This is the call to the base class constructor
new Throwable().printStackTrace(); // already back from the base class constructor
}
Yes,Object class have a default constructor as the doc says.
As you know insted of doing that you can 4 check it by using javap -c ConTest in command 3 prompt you can see it's calling the object 2 class default constructor() in below's code's 1 Line No:1
C:\stackdemo>javap -c ConTest
Compiled from "ConTest.java"
public class ConTest extends java.lang.Object{
public ConTest();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: new #2; //class java/lang/Throwable
7: dup
8: invokespecial #3; //Method java/lang/Throwable."<init>":()V
11: invokevirtual #4; //Method java/lang/Throwable.printStackTrace:()V
14: return
public static void main(java.lang.String[]);
Code:
0: new #5; //class ConTest
3: dup
4: invokespecial #6; //Method "<init>":()V
7: astore_1
8: return
}
Thank you
As Suggested above super() is the first 10 call in the constructor and for method 9 More Information here
When you compile a class, the 8 Java compiler creates an instance initialization 7 method for each constructor you declare 6 in the source code of the class. Although 5 the constructor is not a method, the instance 4 initialization method is. It has a name,
<init>
, a 3 return type, void, and a set of parameters 2 that match the parameters of the constructor 1 from which it was generated
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.