在java程序中如何加载自己写的类?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

在java程序中如何加载自己写的类?

public class TestReflection {
public static void main(String[] args) {
    try {
        //new S();
        Class.forName("S"); 
        ClassLoader.getSystemClassLoader().loadClass("S"); // 用AppClassLoader加载

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
}
class S {
static {
System.out.println("S is loaded!");
}

public S() {
System.out.println("S is instance!");
}
}

java.lang.ClassNotFoundException: S 这样的错误,有大神知道吗? 另外这2个加载方法有区别吗?

展开
收起
蛮大人123 2016-03-18 16:31:14 2668 0
2 条回答
写回答
取消 提交回答
  • 用-classpath来指定。
    2019-07-17 19:06:57
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    Class.forName(String className)使用装载当前类的类装载器来装载指定类。因为class.forName(String className)方法内部调用了Class.forName(className,true, this.getClass().getClassLoader())方法,如你所见,第三个参数就是指定类装载器,显而易见,它指定的是装载当前类的类装载器的实例,也就是this.getClass().getClassLoader();
    classLoader.loadClass(StringclassName , boolean resolve);需要手动指定类装载器的实例。
    所以这两种类装载方式的区别之一是一个默认使用装载当前类实例的类装载器来装载指定类,而另一个则需要手动指定一个类装载器的实例。

    2019-07-17 19:06:57
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新
相关电子书
更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native
立即下载
The Reactive Cloud Native Arch
立即下载
JAVA开发手册1.5.0
立即下载