gpt4 book ai didi

java - 实例化错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:42 27 4
gpt4 key购买 nike

我正在看一本初学者的 java 书,其中一个项目是从常见的错误中挑选一个错误,并尝试尽你所能来引发错误。

我选择了 InstantiationError 并且知道你不能实例化抽象类或接口(interface)。文档说该错误通常会被编译器捕获,但如果类的定义发生了不兼容的更改,则可能会在运行时抛出该错误。

我不知道在程序运行时如何更改类定义,我正在寻找一些关于我应该在哪里进一步阅读的提示。谢谢!

最佳答案

I don't know how a class definition could be changed while the program is running

在运行时无法更改,但编译后可以更改

例如,试试这个:

// In Test.java
public class Test {
public static void main(String[] args){
System.out.println(new Foo());
}
}

// In Foo.java
public class Foo {
}

编译:

javac Foo.java Test.java

运行:

java Test

// Some output like this...
Foo@1d6535bf

现在像这样更改 Foo.java:

// No parameterless constructor any more!
public class Foo {
public Foo(int x) {
}
}

重新编译只是Foo.java:

javac Foo.java

然后重新运行测试:

Exception in thread "main" java.lang.NoSuchMethodError: Foo: method <init>()V 
not found
at Test.main(Test.java:3)

不过,这不是我所说的“常见错误”。

请注意,这不是 InstantiationError - 但您可以再次将 Foo.java 更改为:

public interface Foo {
}

同样,只需重新编译 Foo.java,这次您将获得:

Exception in thread "main" java.lang.InstantiationError: Foo
at Test.main(Test.java:3)

关于java - 实例化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14840551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com