如何从java中的.class文件中获取实例

Jun*_* Oh 2 java reflection class instance .class-file

坦率地说,我甚至不知道它是否可能.但我想要做的就是下面.

  1. 我通过终端中的javac命令从ClassFile.java创建了一个类文件.
  2. 然后我想从.java文件或.class文件中获取一个实例.
  3. 接下来,我在eclipse中创建了另一个项目,因为你猜这个项目路径和上层文件路径是完全不同的.例如,ClassFile.java/class文件可以位于'〜/ Downloads'文件夹中,另一方面,新的eclipse项目可以位于'〜/ workspace /'.
  4. 所以我读了FileInputStream在步骤1中引用的文件.
  5. 从这里开始,我只是粘贴我的代码.

    公共类Main {

    private static final String CLASS_FILE_PATH = 
            "/Users/juneyoungoh/Downloads/ClassFile.class";
    
    private static final String JAVA_FILE_PATH = 
            "/Users/juneyoungoh/Downloads/ClassFile.java";
    
    private static Class getClassFromFile(File classFile) throws Exception {
        System.out.println("get class from file : [" + classFile.getCanonicalPath() + " ]");
        Object primativeClz = new Object();
        ObjectInputStream ois = null;
        ois = new ObjectInputStream(new FileInputStream(classFile));
        primativeClz = ois.readObject();
        ois.close();
        return primativeClz.getClass();
    }
    
    public static void main(String[] args) throws Exception {
        getClassInfo(getClassFromFile(new File(CLASS_FILE_PATH)));
    }
    
    Run Code Online (Sandbox Code Playgroud)

    }

就像你的假设一样,这段代码有错误.例如,它显示:

java.io.StreamCurruptedException: invalid stream header : CAFEBABE
Run Code Online (Sandbox Code Playgroud)

有没有办法从.class文件或.java文件中获取对象实例?

PS我希望不要使用额外的库.

Ode*_*eer 5

private static final String CLASS_FOLDER =
        "/Users/juneyoungoh/Downloads/";

private static Class getClassFromFile(String fullClassName) throws Exception {
    URLClassLoader loader = new URLClassLoader(new URL[] {
            new URL("file://" + CLASS_FOLDER)
    });
    return loader.loadClass(fullClassName);
}

public static void main( String[] args ) throws Exception {
    System.out.println((getClassFromFile("ClassFile"));
}
Run Code Online (Sandbox Code Playgroud)