有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何指定文件的路径。要在其文件系统中动态加载的类文件?

当java程序动态加载。类文件

  • 仅是的完全限定类名。需要类文件吗?是ClassLoader 方法loadClass()只需要。要动态加载的类文件

  • 如果是的话。类文件可以位于文件系统中的任何位置,如何在其文件系统中指定其路径名

  • 当使用命令java从Java程序运行这样的字节码创建时,是否需要指定字节码的路径。要在-cp中动态加载的类文件

谢谢


共 (1) 个答案

  1. # 1 楼答案

    您正在合并类和“.class”文件

    Is only the fully qualified classname of the .class file needed? Does ClassLoader s method loadClass() only require the fully qualified classname of the .class file to be dynamically loaded?

    类的完全限定类名是必需的

    If the .class file can be located anywhere in a filesystem ...

    不可能!这个与类对应的类文件需要位于相关类加载器的类路径上

    如果要从文件系统中的任意文件加载类,需要创建一个新的classloader实例:

    • 如果使用标准类加载器实现之一,它将使用标准方案来解决问题。基于类包名称的类文件位置

    • 可以实现一个自定义类加载器,将FQ类名解析为文件系统对象。。。另一种方式。但这似乎没有必要,因为标准Java编译器将按照标准方案发出.class文件

    When running such the bytecode create from a Java program with command java, do I need to specify the path of the .class file to be dynamically loaded in -cp?

    你不需要给出那个地方。类文件。您可以给出一个目录的位置,其中。类文件可以解析,如上所述

    但是,如果一个正在运行的Java程序生成、编译并加载一个类,它将需要动态地创建一个新的类加载器来加载它。。。可靠

    为什么?因为类加载器通常在类路径上缓存目录和JAR索引的内容。因此,当程序编写新文件时,类加载器可能无法了解它

    还有一个问题是类加载器不能(从任何位置)两次加载同一个类

    最后,请注意,如果两个类加载器加载具有相同完全限定名的类,则运行时类型系统会将它们视为不同的类/类型。你不能在这种类型的两个化身之间转换