实例化抽象实例 class 是运行时错误还是编译错误?
Is instantiating an instance of an abstract class a runtime or compilation error?
据我了解,编译时没有对象被实例化。因此,当抽象对象的实例在运行时间创建时,该错误应归类为运行时间错误。我是正确的还是编译器会在 运行 时间之前发现这样的错误?
编译器如果您尝试创建抽象class的实例,则会给出编译错误,因为它无法编译本身不包含任何内容的方法。
编译器的工作基本上归结为接受您的 java 代码作为输入并生成有效的字节码,稍后可以由 JVM 加载 into/run。
当您在代码级别创建 Abstract Class 的实例时,编译器无法真正生成有效的字节码,因此它会抱怨。
所以归根结底,编译器并没有真正尝试创建您的对象。它只尝试将它看到的内容翻译成有效的字节码,在这种情况下它不能...
现在如果你使用反射,比如所有的class名字都是字符串甚至是在运行时间内计算出来的,那么编译器将无法检测到这样的错误并且将成功编译您的代码。
但是,当你 运行 一个程序时,错误就会出现,这一次它将是一个 运行 时间错误 - 这是试图创建抽象实例的结果 class.
据我了解,编译时没有对象被实例化。因此,当抽象对象的实例在运行时间创建时,该错误应归类为运行时间错误。我是正确的还是编译器会在 运行 时间之前发现这样的错误?
编译器如果您尝试创建抽象class的实例,则会给出编译错误,因为它无法编译本身不包含任何内容的方法。
编译器的工作基本上归结为接受您的 java 代码作为输入并生成有效的字节码,稍后可以由 JVM 加载 into/run。 当您在代码级别创建 Abstract Class 的实例时,编译器无法真正生成有效的字节码,因此它会抱怨。
所以归根结底,编译器并没有真正尝试创建您的对象。它只尝试将它看到的内容翻译成有效的字节码,在这种情况下它不能...
现在如果你使用反射,比如所有的class名字都是字符串甚至是在运行时间内计算出来的,那么编译器将无法检测到这样的错误并且将成功编译您的代码。 但是,当你 运行 一个程序时,错误就会出现,这一次它将是一个 运行 时间错误 - 这是试图创建抽象实例的结果 class.