Я получил следующий код в файле с именем test.java, который находится внутри каталога C: \ D \ JavaProjects
class test
{
public static void main( String[] str )
{
System.out.println( "Hello, World! from test" );
}
}
class Test
{
public static void main( String[] str )
{
System.out.println( "Hello, World!" );
}
}
Когда я делаю "javac test.java", он выводит test.учебный класс.Теперь, если я делаю «тест java», я получаю следующий вывод:
Исключение в потоке «main» java.lang.NoClassDefFoundError: test (неправильное имя: Test) в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClassCond (неизвестный источник) в java.lang.ClassLoader.defineClass (неизвестный источник) в java.security.SecureClassLoader.defineClass (неизвестный источник) в java.net.URLClassClassdefader (Неизвестный источник) в java.net.URLClassLoader.access $ 000 (Неизвестный источник) в java.net.URLClassLoader $ 1.run (Неизвестный источник) в java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (Неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) в sun.misc.Launcher $ AppClassLoader.loadClass (Неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) Не удалось найти основной класс: test.Программа закроется.
Но когда я делаю "java Test", я получаю
Hello, World!
Теперь, если я простообратное вхождение двух объявлений классов, так что Test объявляется ДО теста, компилятор java выводит файл Test.class.Теперь выполнение "теста Java" дает вывод:
Привет, мир!из теста
, но "java Test" дает
Исключение в потоке "main" java.lang.NoClassDefFoundError: Test (неправильное имя: test) в java.lang.ClassLoader.defineClass1 (собственный метод) в java.lang.ClassLoader.defineClassCond (неизвестный источник) в java.lang.ClassLoader.defineClass (неизвестный источник) в java.security.SecureClassLoader.defineClass (неизвестный источник) в javaoader.defineClass (неизвестный источник) в java.net.URLClassLoader.access $ 000 (неизвестный источник) в java.net.URLClassLoader $ 1.run (неизвестный источник) в java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (Неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) в sun.misc.Launcher $ AppClassLoader.loadClass (Неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) Не удалось найти основной класс:Тестовое задание.Программа закроется.
Теперь я знаю, что очень странно иметь два класса с главными в них в одном файле, но это поведение выглядит совершенно нелогичным и больше напоминает ошибку.Может кто-нибудь указать мне на соответствующий раздел спецификации языка Java, который определяет это поведение?Заранее большое спасибо за помощь.