Java 类装入器如何查找类

Java 类装入器如何查找类,java,classloader,Java,Classloader,让我困惑的是className参数。我已将java文件写入文件夹,并使用反射对其进行编译。因此,我不确定如何指向正确的文件,以及我对类名使用的命名约定 文档只说了类的名称,但是它怎么知道它在哪里呢 感谢类加载器的要点就是知道如何搜索给定类名的类文件。javadoc说: 给定类的二进制名称,类装入器应尝试 查找或生成构成类定义的数据。A. 典型的策略是将名称转换为文件名,然后 从文件系统中读取该名称的“类文件” 因此,您必须让您的类加载器将类名翻译到可以找到类的字节码的某个位置URLClassLo

让我困惑的是className参数。我已将java文件写入文件夹,并使用反射对其进行编译。因此,我不确定如何指向正确的文件,以及我对类名使用的命名约定

文档只说了类的名称,但是它怎么知道它在哪里呢


感谢

类加载器的要点就是知道如何搜索给定类名的类文件。javadoc说:

给定类的二进制名称,类装入器应尝试 查找或生成构成类定义的数据。A. 典型的策略是将名称转换为文件名,然后 从文件系统中读取该名称的“类文件”


因此,您必须让您的类加载器将类名翻译到可以找到类的字节码的某个位置
URLClassLoader
通过将类名转换为路径,并在URL指向的各种JAR和目录中查找该路径来实现这一点。

这就是您首先编写类加载器的原因:它只是一种将类名映射到内存中(二进制)类的机制。类加载器从哪里获取数据是它自己的事情


例如,URLClassLoader将查询类路径,查看是否可以找到包含命名类的文件。

这就是类路径的用途。顺便说一下,它是类的完全限定名,包括包层次结构。@Viruzzo-您所说的在一般情况下是不正确的。对于某些特定的类加载器,它可能是正确的。但也可能有不同的类装入器(例如,从数据库获取类数据);我认为他感兴趣的是违约案件,而不是一般案件。
ClassLoader c //imagine this is a valid object
c.loadClass(String className, boolean resolveIt);