Класс .forName() выбрасывает ClassNotFoundException - программирование
Подтвердить что ты не робот

Класс .forName() выбрасывает ClassNotFoundException

Мышление в программе Java выглядит следующим образом:

package typeinfo;
import static util.Print.*;

class Candy {
 static { print("Loading Candy"); }
}

class Gum {
 static { print("Loading Gum"); }
}

class Cookie {
 static { print("Loading Cookie"); }
}

public class SweetShop {
 public static void main(String[] args) {  
   print("inside main");
   new Candy();
   print("After creating Candy");
   try {
     Class.forName("Gum");
   } catch(ClassNotFoundException e) {
     print("Couldn't find Gum");
   }
   print("After Class.forName(\"Gum\")");
   new Cookie();
   print("After creating Cookie");
 }
} 

Я ожидаю выход следующим образом:

/* Output:
inside main
Loading Candy
After creating Candy
Loading Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie
*/

Но получим

inside main
Loading Candy
After creating Candy
Couldn't find Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie

Очевидно, блок try бросает исключение ClassNotFoundException, что является неожиданным. Любые идеи, почему код генерирует это вместо инициализации класса Gum, как ожидалось?

4b9b3361

Ответ 1

Ваши классы находятся в пакете typeinfo, поэтому их полностью квалифицированные имена typeinfo.Gum, typeinfo.Candy и typeinfo.Cookie. Class.forName() принимает только полностью квалифицированные имена:

Параметры:

className - полное имя желаемого класса.

Измените свой код на:

try {
  Class.forName("typeinfo.Gum");
} catch(ClassNotFoundException e) {
  print("Couldn't find Gum");
}