ClassNotFoundException:当我尝试使用Reflect获取类时

问题描述 投票:-2回答:2

这是我的文件:

$ tree
.
├── Main.java
└── life
    └── Person.java

main.Java

import life.Person;

public class Main { 
  public static void main(String[] args) { 
    Person p = new Person();
    p.sayHi();
  } 
}

我尝试编译这段代码:

$ javac Main.java -d .
$ java Main
hello world

是的,这很好。但是当我尝试使用反射时,我将我的Main.java更改为:

import life.Person;

public class Main { 
  public static void main(String[] args) { 
    Class person = Class.forName("life.Person");
  } 
}

并且编译器抛出错误:

$ javac Main.java -d .
Main.java:6: error: unreported exception ClassNotFoundException; must be caught or declared to be thrown
    Class person = Class.forName("life.Person");

我很困惑,为什么这个代码首先成功并且在下一个失败?

为什么没找到课程?

java javac
2个回答
1
投票

ClassNotFoundException是一个经过检查的异常,它意味着该语句可能会在运行时抛出ClassNotFoundException,您需要确定如何在编译阶段处理它。

您可以在main方法中将其抛出给调用者:

public static void main(String[] args) throws ClassNotFoundException

或者使用try catch块:

try {
    Class person = Class.forName("life.Person");
} catch(ClassNotFoundException e) {
     // handle it
}

1
投票

这并不是说你的班级没有找到;它的意思是“我可能会抛出一个检查过的异常,你需要抓住它”。

import life.Person;

public class Main { 
  public static void main(String[] args) { 
    try {
        Class person = Class.forName("life.Person");
    } catch (Exception e) {
        System.err.println(e);
    }
  } 
}
© www.soinside.com 2019 - 2024. All rights reserved.