ClassLoader c //imagine this is a valid object
c.loadClass(String className, boolean resolveIt);
这是让我困惑的className参数。我已将java文件写入文件夹,并使用反射编译它。我不确定我是如何指向正确的文件以及我对className使用的命名约定。
文档说的只是说类的名称,但它应该如何知道它的位置?
由于
答案 0 :(得分:2)
ClassLoader
的要点正是知道如何在给定类名的情况下搜索类文件。 javadoc说:
给定类的二进制名称,类加载器应该尝试 找到或生成构成该类定义的数据。一个 典型的策略是将名称转换为文件名然后 从文件系统中读取该名称的“类文件”。
因此,您必须使您的ClassLoader将类名转换为将找到该类的字节代码的位置。 URLClassLoader
通过将类名转换为路径,并在URL指向的各个jar和目录中查找该路径来实现这一点。
答案 1 :(得分:0)
这就是为什么你首先编写一个类加载器的原因:它只是一种将类名映射到内存中的(二进制)类的机制。类加载器获取数据的地方是它自己的业务。
例如,URLClassLoader将查询类路径并查看它是否可以找到包含命名类的文件。