ClassNotFoundException: когда я пытаюсь получить класс с Reflect - PullRequest
0 голосов
/ 18 февраля 2019

Это мои файлы:

$ 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");

Я очень запутался, почему этот кодпервый успех и неудачный следующий?

Почему класс не найден?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Это не говорит, что ваш класс не найден;это означает «я могу выдать проверенное исключение, и вам нужно его перехватить».

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);
    }
  } 
}
0 голосов
/ 18 февраля 2019

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
}
...