У меня есть простой класс, подобный этому.
class ClassWithDefaultConstructor{}
Я работаю с этим jdk.
C:\JavaSE14Folder>java -version
java version "14" 2020-03-17
Java(TM) SE Runtime Environment (build 14+36-1461)
Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
Как вы можете видеть, я использую последнюю версию Jdk.
Я создаю этот .class следующим образом.
C:\JavaSE14Folder>javac -d . ClassWithDefaultConstructor.java
.Class создается позже, когда я пробую эту команду.
C:\JavaSE14Folder>javap ClassWithDefaultConstructor.class
И я вижу следующее
Compiled from "ClassWithDefaultConstructor.java"
class ClassWithDefaultConstructor {
ClassWithDefaultConstructor();
}
Вначале меня радуют две вещи: сначала создается конструктор по умолчанию, и я вижу, что видимость конструктора такая же, как у классного, но это здорово, но 3 вещи вызывают уныние: (
Мои вопросы.
1). Why the constructor has no body and terminates with ;
2). Why the constructor hasn't a call to the java.lang.Object constructor?;
3). Why this class is not extending java.lang.Object
Я ожидал чего-то подобного.
class ClassWithDefaultConstructor extends java.lang.Object {
ClassWithDefaultConstructor(){
super();
}
}
Я ожидал байт-код примерно как этот пост.
Post
Возможно, я что-то пропустил, пожалуйста, будьте добры.
:) С наилучшими пожеланиями из Венесуэлы.
Если я поставлю такую команду.
C:\JavaSE14Folder>javap -c ClassWithDefaultConstructor.class
Compiled from "ClassWithDefaultConstructor.java"
class ClassWithDefaultConstructor {
ClassWithDefaultConstructor();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."
<init>":
()V
4: return
}
отличается, но все же я не вижу своих вещей, таких как расширение Object и т. Д.
Я бы хотел увидеть что-то подобное по крайней мере как в посте.
Compiled from "test.java"
public class test extends java.lang.Object{
В резюме я не вижу компилятора, вставляющего эти неявные строки.
В этом Java Вопрос о .class, сгенерированном с помощью Java 14 утверждает, что то же самое происходит в более новых версиях Java.
Тот же вывод с использованием
C:\Program Files\Java\jdk1.8.0_121\bin