A constructor is called after a new object is created. I wouldn't call it a static method as it must have an instance and that instance is accessible via default this
public class Main {
public Main() {
// static methods do not have a `this`
System.out.println("Main called" + this.getClass());
}
public static void main(String... ignore) {
new Main();
}
}
If you decompile the byte code, you can see static
methods
$ javap -c -p -cp . Main
Compiled from "Main.java"
public class Main {
public Main();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
7: new #3 // class java/lang/StringBuilder
10: dup
11: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
14: ldc #5 // String Main called
16: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: aload_0
20: invokevirtual #7 // Method java/lang/Object.getClass:()Ljava/lang/Class;
23: invokevirtual #8 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
26: invokevirtual #9 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
29: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
32: return
public static void main(java.lang.String...);
Code:
0: new #11 // class Main
3: dup
4: invokespecial #12 // Method "<init>":()V
7: pop
8: return
}
Note: static
methods have a different modifier.