关于Class.forName()出现ClassNotFoundException错误!

本文详细探讨了Java中类加载的过程,从类加载的基本原理出发,深入剖析了类加载器的工作机制,包括启动类加载器、扩展类加载器、应用类加载器的作用,以及如何实现自定义类加载器。同时,文章还介绍了类加载过程中可能出现的问题及解决方案。

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

package c11;


interface HasBatteries {

}


interface Waterproof {

}


interface ShootsThings {

}


class Toy {

// Comment out the following default

// constructor to see

// NoSuchMethodError from (*1*)

Toy() {

}


Toy(int i) {

}

}


class FancyToy extends Toy implements HasBatteries, Waterproof, ShootsThings {

FancyToy() {

super(1);

}

}


public class ToyTest {

public static void main(String[] args) {

Class c = null;

try {

c = Class.forName("FancyToy");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

printInfo(c);

Class[] faces = c.getInterfaces();

for (int i = 0; i < faces.length; i++)

printInfo(faces[i]);

Class cy = c.getSuperclass();

Object o = null;

try {

// Requires default constructor:

o = cy.newInstance(); // (*1*)

} catch (InstantiationException e) {

} catch (IllegalAccessException e) {

}

printInfo(o.getClass());

}


static void printInfo(Class cc) {

System.out.println("Class name: " + cc.getName() + "  is interface? ["

+ cc.isInterface() + "]");

}

} // /:~

java.lang.ClassNotFoundException: FancyToy

at java.net.URLClassLoader$1.run(Unknown Source)

at java.net.URLClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Unknown Source)

at c11.ToyTest.main(ToyTest.java:33)

经过我查看手册,发现一下描述:

  • 参数:

  • className - 所需类的完全限定名。

  • 返回:

  • 具有指定名的类的 Class 对象。

  • 抛出:

  • LinkageError - 如果链接失败

  • ExceptionInInitializerError - 如果此方法所激发的初始化失败

  • ClassNotFoundException - 如果无法定位该类


好吧,手册上明明白白,清清楚楚的写了需要完全限定名。所以必须为forName方法的变量使用完全限定名的类名。

转载于:https://my.oschina.net/zerodeng/blog/265042

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值