Ответ 1
Попробуйте что-то вроде этого:
java A$B
Обновление согласно комментариям:
В оболочке Linux вы должны выйти из $. Итак, команда стала:
java 'A$B'
Как выполнить основной метод, если он присутствует в статическом внутреннем классе?
Основной метод присутствует в статическом внутреннем классе, и нам нужно выполнить этот основной метод.
class A {
static class B {
public static void main(String[] args) {
System.out.println("Done");
}
}
}
Попробуйте что-то вроде этого:
java A$B
Обновление согласно комментариям:
В оболочке Linux вы должны выйти из $. Итак, команда стала:
java 'A$B'
Его просто как простой класс. Команда запуска java A$B
Когда внутренний класс скомпилирован, он добавляется к имени внешнего класса
В этом случае вы получаете два файла класса. т.е. A.class
и A$B.class
java
команда принимает имя класса как аргумент, а не имя файлаjava A$B
выполнит работуOuterClass$1
, OuterClass$1
и т.д.Итак, если вы измените свой пример следующим образом, теперь включите анонимные и локальные внутренние классы метода
import java.io.Serializable;
public class A {
static class B {
public static void main(String[] args) {
System.out.println("Done");
Serializable obj = new Serializable() {
};
Serializable obj1 = new Serializable() {
};
class MethodLocalClass {
}
}
}
}
Тогда файлы классов, которые вы получите, это A.class
, A$B.class
, A$B$1.class
, A$B$2.class
для анонимных классов и A$B$1MethodLocalClass.class
.
Надеюсь, что этот пример немного помогает:)
Если ваш файл .java
содержит внутренние/вложенные классы, пост-компиляция генерируется компилятором как TheClass $xxx.class.
Смотрите this:
Внутренние определения классов производят дополнительные файлы классов. Эти классы файлы имеют имена, объединяющие имена внутренних и внешних классов, такие как MyClass $MyInnerClass.class.
Итак, вы должны сделать: java A$B
.
Если вы хотите запустить класс с java (Java launcher: java test.MyClass), то этот класс должен иметь основной метод с хорошо известной сигнатурой.
У вас может быть основной метод с той же подписью в любом месте. Но не ожидайте, что пусковая установка найдет его.
P.S. Имя языка - Java, а не JAVA.
Есть небольшая деталь:
Вы можете сделать это:
package test;
public class Test {
/**
* @param args the command line arguments
*/
static public class A {
public static void main(String[] args) {
System.err.println("hi");
}
}
}
java test.Test $A
но это не стандартно...