вложенный класс как метод тестирования в Java

//: innerclasses/TestBed.java
// Putting test code in a nested class.
// {main: TestBed$Tester}

public class TestBed {
  public void f() { System.out.println("f()"); }
  public static class Tester {
    public static void main(String[] args) {
      TestBed t = new TestBed();
      t.f();
    }
  }
} /* Output:
f()
*///:~

Я изучаю "Думай на Java". Мне просто интересно, почему приведенный выше код не работает, что должно быть способом проверки каждого класса, и его можно удалить, удалив файл TestBed $ Tester.class.

Сообщение об ошибке указывает, что в классе TestBed в качестве записи программы должен быть общедоступный static void main (String [] args).

версия компиляции Java: javac 1.7.0_40


person shanwu    schedule 25.09.2014    source источник


Ответы (1)


Метод main должен находиться в общедоступном классе верхнего уровня. Это тот, который имеет то же имя, что и java-файл. Вот это TestBed-класс.

Текущий метод main находится во внутреннем классе (а именно TestBed$Tester) и не может использоваться для запуска программы.

РЕДАКТИРОВАТЬ: возможно, я ошибался. Я просмотрел книгу, которую вы упомянули, и похоже, что вы можете запустить внутренний класс из Командная строка, написав:

java TestBed$Tester
person Lone nebula    schedule 25.09.2014
comment
Я знаю... но этот код взят из Think in Java, 4th ED. Я просто хочу знать, почему он научил нас этому подходу. - person shanwu; 25.09.2014
comment
@shanwu Я обновил свой ответ. (Не уверен, что вы были уведомлены моим предыдущим комментарием, так как он был удален) - person Lone nebula; 25.09.2014
comment
#~/java_practice/innerclasses$ javac TestBed.java #~/java_practice/innerclasses$ java TestBed$ Ошибка тестера: в TestBed не удается найти основной метод... public static void main(String[] args) какой у вас компилятор Java версия? Я не знаю, связано ли это с версией компилятора Java... - person shanwu; 26.09.2014
comment
Попробуйте TestBed\$Tester вместо TestBed$Tester. Если вы используете Unix/Linux, вам нужно экранировать $ вот так. - person Lone nebula; 26.09.2014
comment
Это сработало!! Большое спасибо! для unix/linux мы должны запустить эту тестовую программу внутреннего класса, например, #java TestBed\$Tester - person shanwu; 28.09.2014