Java 利用反射 使用.class文件中的类

本文介绍了在Java中,当仅有.class文件而无.java源文件时,如何利用反射来使用这些类。通过调整URL路径,成功调用了.class文件中的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java源文件编译之后会产生一个.class的文件,如果我们只有.class文件,而没有.java的时候,我们也可以使用这个类。

首先我们看一下这个工程的结构:


其他的地方可以忽略,只需要要知道,image包里面原来有Buddy.java编译过后产生了Buddy.class文件,接下来我们保留.class文件,删除.java文件。

接下来,我们用代码来调用.class文件中的方法。

public class Main {

    public static void main(String[] args) {

        try {

            URL u = new URL("file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/");

            URLClassLoader loader=new URLClassLoader(new URL[]{u});

            Class c = loader.loadClass("image.Buddy");

            Object o =c.newInstance();

            Method m = c.getMethod("sleep");

            m.invoke(o);

        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

这里需要注意一下,这里的URL是

"file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/"

类是image.Buddy

不能把URL设置为

"file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image"

类是Buddy

以下是Buddy.java

package image;

/**
 * Created by wuchen on 15/1/2.
 */
public class Buddy {
    public void sleep(){
        System.out.println("Buddy sleep");
    }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值