我看着http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html看到了那门课。forname(String className)和“返回与该类关联的类对象”此方法在何处查找该类?它是否在调用该方法的类的java项目包中?如果有多个同名的类呢?Api没有讨论这些情况
首先,它将在当前项目中查找,如果找到,则将停止搜索
其次,如果找不到,则检查依赖JAR,这些JAR是jdk的内置JAR。。如果仍然找不到,则在外部罐子中查找。。
在此过程中,如果发现介于两者之间,将停止搜索。。因此,即使有多个同名的类,也没有问题。。只要一个
重要的是,JVM只加载一次类。。
它在类路径中查找给定的类。如果存在多个具有相同包/名称的类,则使用第一个。
如果仔细阅读JavaDoc,您将看到以下内容:
返回与具有给定字符串名称的类或接口关联的类对象。调用此方法相当于:
这意味着类将从当前类加载器加载,如果没有此类类,则类加载器很可能会委托给其父类(具体行为取决于它是什么类加载器)。
如果有多个同名的类呢?
如上所述,类加载器层次结构将尝试加载最特定的类,即从知道该名称的类的最特定的类加载器加载。
由于类名必须是完全限定的类名,即“java.lang.String”
,而不仅仅是“String”
,因此每个类加载器都是唯一的。
如果类路径上有多个包含相同类的库,则取决于类加载器和类加载器层次结构,这些类中的哪个被加载和返回。
问题内容: 我正在一个简单的测试应用程序中尝试log4j。我在eclipse中创建一个新的Java项目,并将log4j JAR(v1.2.16)添加到我的构建路径中。然后,我创建一个简单的类来打印Hello World。然后,我使用log4j 类记录一条信息消息。当我运行该应用程序时,使用默认的附加程序和布局,我会看到日志消息。大。我遇到的麻烦是添加了自己的配置。这是我所做的: 使用自定义的附加程
问题内容: 结果为泛型类型时如何调用?通常,我可以使用,但是在这里,我看到的唯一方法是强制转换,当使用泛型很好地键入其他所有内容时,这种方法就会出现并困扰我。 该场景是这样的: 有一个带有一个入口点主类的.jar 。它带有一个类名的选项(与此处无关)。给定的类实现。此类已加载,初始化和启动。 这是我需要的一个例子: 有什么方法可以摆脱这种情况吗? 使用SE6。 问题答案: 首先,您可能需要完整的通
问题内容: 几年前,我在维护的Linux服务器上安装了Apache 2.2x和PHP 5.3.1。我使用.tar.gz并按照指示进行构建(而不是rpm和您拥有什么)。一切都很好。 今天,我需要安装它,它看起来像一个PHP库。我完成了所有步骤以进行安装,并在其中找到ibm_db2.so。 最好的收获是最后一步是配置php.ini,但是我的系统上没有php.ini。恐怖的恐怖。PHP可以正常工作,当然
问题内容: 我使用以下方法在Ubuntu上安装了Scala 我的问题是我应该在变量SCALA_HOME中输入什么?/ usr / bin吗? 问题答案: 截止到今天,我找不到一种简单(可靠)的设置方法。 按照Alex(在上面的评论中)从tarball(从scala-lang.org下载)安装到/ location / of / scala / untar 然后我把我的 一切作品吧!
问题内容: JUnit4库中有一个方法。我喜欢它,但是缺少一种库中不存在的方法。为什么会这样呢? 我发现我可以代替使用,但看起来仍然不合逻辑。 问题答案: 只要测试没有引发异常,它就会通过,除非您的注释指定了预期的异常。我想可能会抛出一个特殊的异常,JUnit总是将其解释为通过,从而使测试短路,但这会违背通常的测试设计(即假设成功,并且仅在断言失败时失败),并且如果有人最好使用的想法,这将大大减慢
为了克隆类的对象,我们实现了Cloneable接口,并重写了clone方法: 上面的super.clone()调用对象的本机API clone()。 在可序列化的情况下,instanceof检查在ObjectOutputStream类中完成。类似地,我试图找出编译器在哪里检查对象是否是可克隆的实例?检查是本地执行的吗?