断点命中 Hashmap.put() 一个简单的 Hello World 程序

2022-09-03 00:38:31

程序很简单:

public class HelloWorld {
    public static void main(String args[]){
       System.out.println("Hello World");
    }
}

现在我在HashMap中将断点设置为函数.classput(K key, V value)

public V put(K key, V value) {
    if (table == EMPTY_TABLE) {
        inflateTable(threshold);
    }
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key);

然后我开始调试HelloWorld.class,它将在HashMap中遇到断点。对我来说很奇怪,它如何在HashMap中遇到?
我尝试了HashMap,Hashtable,它们都是一样的。put()


答案 1

下面是我在重现方案时获得的堆栈跟踪。

当应用程序由 Eclipse 启动时,它不会简单地进入 Main 函数。在创建实例之前,您的类需要加载到 JVM 中。为此,将使用类装入器

在您的例子中,URLClassLoader 具有使用 HashMap 对象的 URLClassPath 类型的成员。

enter image description here


答案 2

这是因为 Eclipse 启动应用程序的方式。

运行应用程序的 Eclipse 类 (HelloWorld) 调用了 一个 和大量的其他内容。URLClassLoader 使用 、 等。LauncherHelperURLClassLoaderHashMapsHashTables