两次调用 Class.forName()

Nar*_*dey 3 java class classloader

我目前正在阅读类加载器及其层次结构功能。如果我调用下面的代码 -

ClassA a=  Class.forName("com.test.ClassA")
Run Code Online (Sandbox Code Playgroud)

根据我的理解,现在它将在应用程序类加载器的帮助下初始化并加载到内存中。我有以下问题:

  1. 如果我再次调用上面的代码会发生什么?是否会在内存中为“ClassA”创建新实例,还是会返回相同的加载类引用?
  2. 如果是,根据javarevisited 的这篇文章,“通过使用单独的 ClassLoader,您还可以从多个源加载相同的类,它们将在 JVM 中被视为不同的类” 它将有什么用?

JB *_*zet 5

  1. 你会得到同样的课程。只是测试一下。第二次加载并检查是否a1 == a2.
  2. 此功能最常使用的可能是应用服务器:您可以在单个服务器中部署多个 Web 应用程序,并且所有应用程序都可以使用相同的类。但他们不应该共享静态变量。如果一个使用库 1.0 中的 Foo 类,而另一个使用库 2.0 中的 Foo 类,则应该没有问题。因此需要使用不同的类加载器加载相同的类。