Java反射调用类报java.lang.ClassNotFoundException,如何获取类全限定名
反射调用类方法报ClassNotFoundException的解决方案
Class.forName()方法传入的参数必须是类的全限定名(包名+类名),你当前仅传入类名Algorithms,缺少包路径,因此触发类找不到异常。你提到目标类和当前代码同属于lab01包,可通过以下方案解决:
方案1:直接传入完整全限定名
调用方法时直接拼接包名即可,示例代码:
try { testAlgorithm("lab01.Algorithms", "linear", 50); } catch (Exception e) { e.printStackTrace(); }
方案2:动态获取全限定名(避免硬编码)
不需要通过匿名内部类的复杂方式获取,直接用类对象的getName()方法即可拿到字符串类型的全限定名,这种方式后续包名变更也会自动同步,不会出现硬编码错误:
try { testAlgorithm(Algorithms.class.getName(), "linear", 50); } catch (Exception e) { e.printStackTrace(); }
额外注意事项
- 确保
Algorithms类存在public无参构造方法,否则myClass.newInstance()会抛出实例化异常;Java 9+版本推荐替换为myClass.getDeclaredConstructor().newInstance(),兼容性更强 - 确保要调用的
linear方法是public修饰,且仅有一个long类型的入参,否则getMethod会找不到对应方法
内容的提问来源于stack exchange,提问作者biomaticstudios
相关产品推荐
相关产品推荐

