Java имеет пул строк, в котором Java управляет распределением памяти для объектов String. См. String Pools в Java
Когда вы проверяете (сравниваете) два объекта с помощью оператора ==
, он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые адреса, то он возвращает true
, в противном случае false
. Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals
.
equals
- фактически метод класса Object, но он переопределяется в класс String и дается новое определение, которое сравнивает содержимое объекта.
Example:
stringObjectOne.equals(stringObjectTwo);
Но помните, что это относится к случаю String. Если вы хотите сравнить регистр без учета регистра, вы должны пойти для метода equalsIgnoreCase класса String.
Давайте посмотрим:
String one = "HELLO";
String two = "HELLO";
String three = new String("HELLO");
String four = "hello";
one == two; // TRUE
one == three; // FALSE
one == four; // FALSE
one.equals(two); // TRUE
one.equals(three); // TRUE
one.equals(four); // FALSE
one.equalsIgnoreCase(four); // TRUE
В Java, когда вы иногда запускаете JVM из командной строки с помощью исполняемого файла java и пытаетесь запустить программу из файла класса с открытым статическим void main (PSVM), вы можете столкнуться с ошибкой ниже, хотя classpath для JVM является точной и файл класса присутствует в пути к классам:
Error: main class not found or loaded
Это происходит, если файл класса с PSVM не может быть загружен. Одна из возможных причин этого заключается в том, что класс может реализовывать интерфейс или расширять другой класс, который не находится в пути к классам. Обычно, если класс не находится в пути к классам, то выдаваемая ошибка указывает как таковой. Но, если используемый класс расширен или реализован, java не может загрузить сам класс.
Ссылка: https://www.computingnotes.net/java/error-main-class -на-нашли или загружено /
При запуске java
с опцией -cp
, как описано в Windows PowerShell, вы можете получить ошибку, которая выглядит примерно так:
The term `ClassName` is not recognized as the name of a cmdlet, function, script ...
Чтобы PowerShell принял команду, аргументы опции -cp
должны содержаться в кавычках, как в:
java -cp 'someDependency.jar;.' ClassName
Формирование команды таким образом должно позволить Java обрабатывать аргументы classpath правильно.
Местоположение файла файла: C: \ test \ com \ company
Имя файла: Main.class
Полностью имя класса: com.company.Main
Командная строка:
java -classpath "C:\test" com.company.Main
Обратите внимание, что путь класса не включает \ com \ company
Это конкретный случай, но поскольку я пришел на эту страницу, ища решение и не нашел его, я добавлю его здесь.
Windows (проверена с 7) не принимать специальные символы (например, á
) в именах классов и пакетов. Linux, однако.
Я узнал об этом, когда я построил .jar
в NetBeans и попытался запустить его в командной строке. Он работал в NetBeans, но не в командной строке.
В моем случае я получил сообщение об ошибке, потому что у меня были смешанные имена пакетов в верхнем и нижнем регистре в системе Windows 7. Изменение имен пакетов для всех нижних регистров разрешило проблему. Также обратите внимание, что в этом случае я не смог скомпилировать файл .java в файл .class; он просто не будет запускаться из того же каталога (под-под-под).
Я получил эту ошибку после выполнения mvn eclipse:eclipse
Это немного испортило мой файл .classpath
.
Если бы изменить строки в .classpath
из
<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
to
<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**" output="target/classes" />
В моем случае возникла ошибка, потому что я дал имя исходного файла вместо имени класса.
Нам нужно предоставить имя класса, содержащее основной метод, интерпретатору.
Если ваш основной метод находится в классе под пакетом, вы должны запустить его по иерархическому каталогу.
Предположим, что есть файл исходного кода (Main.java):
package com.test;
public class Main {
public static void main(String[] args) {
System.out.println("salam 2nya\n");
}
}
Для запуска этого кода вы должны поместить Main.Class
в пакет, например каталог ./com/test/Main.Java
. И в корневом каталоге используйте java com.test.Main
.
Иногда, в некоторых онлайн-компиляторах, которые вы, возможно, пробовали, вы получите эту ошибку, если не пишите public class [Classname]
, а просто class [Classname]
.
public
, спецификации Java не требуют этого, и также не используется стандартная команда Oracle / OpenJDK java
.
– Stephen C
23 July 2018 в 22:42
Сначала установите путь с помощью этой команды:
set path="paste the set path address"
Затем вам нужно загрузить программу. Введите «cd (имя папки)» в сохраненный диск и скомпилируйте его. Например, если моя программа, хранящаяся на диске D, введите «D:», нажмите enter и введите «cd (имя папки)».
if "cd" helps then it by luck rather than by judgement
. Это неверно (я считаю), поскольку java использует текущий каталог .
как часть пути к классам по умолчанию.
– GKFX
31 March 2014 в 16:16
Если ваше исходное кодовое имя HelloWorld.java, ваш скомпилированный код будет HelloWorld.class
.
Вы получите эту ошибку, если вы вызываете ее, используя:
java HelloWorld.class
Вместо этого используйте это:
java HelloWorld
javac TestCode.java
, а затем java TestCode
– Someone Somewhere
3 January 2016 в 18:12
Я также сталкивался с подобными ошибками при тестировании соединения JDBC Java MongoDB. Я думаю, что хорошо подвести итог моему окончательному решению коротким, чтобы в будущем кто-то мог напрямую изучить две команды и хорошо продолжать дальше.
Предположим, вы находитесь в каталоге, где ваш файл Java и внешний (файлы JAR).
Скомпилировать:
javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
Run:
java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
javac -classpath . HelloWorld.java
сработало бы! И это лучшее решение в вашем случае.
– Stephen C
22 August 2015 в 10:15
java
не смотрел $ CLASSPATH (потому что вы использовали -classpath или -jar) или 2) параметр classpath не был установлен в среде, которая не была в эффект i> в контексте выполнения java
; например потому что вы не "источник" файл, в который добавлены команды setenv в правой оболочке.
– Stephen C
15 March 2016 в 14:14
Main
не находится в файле JAR. -cp lib.jar;
означает то же, что и -cp lib.jar;.
, то есть текущий каталог включен в путь к классам.
– Stephen C
22 September 2016 в 07:58
-cp .
не требуется, потому что если $CLASSPATH
не задано, то .
- это путь по умолчанию.
– Stephen C
7 March 2017 в 04:37
echo %CLASSPATH%
?) И нет, я не могу проверить, потому что у меня нет ПК с ОС Windows.
– Stephen C
5 May 2017 в 07:24
-classpath
и -cp
не используются, а CLASSPATH
не задано, то путь к пользовательскому классу состоит из текущего каталога (.
). & quot; i> Ссылка - docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
– Stephen C
5 May 2017 в 07:27
cd
в src
, а затем запустить команду java ../bin com.blah.blah.MyClass
, которая работала для меня. Так что спасибо за подсказку!
– tamj0rd2
21 July 2017 в 12:28
main
из среды IDE. (И для некоторых IDE вам не нужно i> настроить панель запуска, чтобы это произошло, например, run
Eclipse будет найти i> класс с методом main
для вы.
– Stephen C
22 August 2017 в 04:52
Could not find or load main class ...
. Вот как я приехал на этот пост :)
– cepix
22 August 2017 в 17:41
main
, вам просто не предлагается опция «Использовать и использовать Java» в контекстном меню.
– Stephen C
22 August 2017 в 22:44
JavaMongoDBConnection
не имеет пакета, и 2) вы не меняете каталог. Это, мягко говоря, хрупкое. И, не объясняя проблемы, он заставит новичков попробовать этот подход в ситуациях, когда он не будет работать . Короче говоря, он поощряет «методы программирования вуду»: ru.wikipedia.org/wiki/Voodoo_programming
– Stephen C
27 January 2018 в 01:25
Исправлена проблема в моем случае:
Щелкните правой кнопкой мыши по проекту / классу, который вы хотите запустить, затем Run As
-> Run Configurations
. Затем вы должны либо исправить существующую конфигурацию, либо добавить новое следующим образом:
откройте вкладку Classpath
, нажмите кнопку Advanced...
, затем добавьте папку bin
вашего проекта.
Я потратил приличное время, пытаясь решить эту проблему. Я думал, что я как-то неправильно установил свой путь к классу, но проблема заключалась в том, что я набрал:
java -cp C:/java/MyClasses C:/java/MyClasses/utilities/myapp/Cool
вместо:
java -cp C:/java/MyClasses utilities/myapp/Cool
Я думал, что значение полностью квалифицированного означает укажите полное имя пути вместо полного имени пакета.
utilities.myapp.Cool
или независимо от его имени пакета, если таковой имеется.
– user207421
7 February 2018 в 09:15
В соответствии с сообщением об ошибке («Не удалось найти или загрузить основной класс») существуют две категории проблем:
Основной класс не может быть найден, если в имени полного класса или его неправильном синтаксисе указан или он не существует в предоставленном пути к классам.
Основной класс не может быть загружен, когда класс не может быть запущен, обычно основной класс расширяет другой класс и этот класс не существует в предоставленном пути к классам.
Например:
public class YourMain extends org.apache.camel.spring.Main
Если верблюжья пружина не включена, эта ошибка будет сообщена.
extends
). Я только что усвоил, что, когда основной класс не может загрузить i>, потому что он расширяет другую, которая не может быть найдена i>, java не сообщает, какой фактический класс был не найден (в отличие от NoClassDefFoundError
). Так что да, это случается, и это ситуация с волосами, когда вы этого не знаете.
– Hugues M.
31 May 2017 в 13:37
Вам действительно нужно сделать это из папки src
. Там вы вводите следующую командную строку:
[name of the package].[Class Name] [arguments]
Допустим, ваш класс называется CommandLine.class
, и код выглядит следующим образом:
package com.tutorialspoint.java;
/**
* Created by mda21185 on 15-6-2016.
*/
public class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
Затем вы должны cd
в папку src и команда, которую вам нужно запустить, будет выглядеть так:
java com.tutorialspoint.java.CommandLine this is a command line 200 -100
И вывод в командной строке будет:
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
javac -classpath . HelloWorld.java
сработало бы! И это лучшее решение в вашем случае.
– Stephen C
22 August 2015 в 10:15
java
не смотрел $ CLASSPATH (потому что вы использовали -classpath или -jar) или 2) параметр classpath не был установлен в среде, которая не была в эффект i> в контексте выполнения java
; например потому что вы не "источник" файл, в который добавлены команды setenv в правой оболочке.
– Stephen C
15 March 2016 в 14:14
Main
не находится в файле JAR. -cp lib.jar;
означает то же, что и -cp lib.jar;.
, то есть текущий каталог включен в путь к классам.
– Stephen C
22 September 2016 в 07:58
-cp .
не требуется, потому что если $CLASSPATH
не задано, то .
- это путь по умолчанию.
– Stephen C
7 March 2017 в 04:37
echo %CLASSPATH%
?) И нет, я не могу проверить, потому что у меня нет ПК с ОС Windows.
– Stephen C
5 May 2017 в 07:24
-classpath
и -cp
не используются, а CLASSPATH
не задано, то путь к пользовательскому классу состоит из текущего каталога (.
). & quot; i> Ссылка - docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
– Stephen C
5 May 2017 в 07:27
cd
в src
, а затем запустить команду java ../bin com.blah.blah.MyClass
, которая работала для меня. Так что спасибо за подсказку!
– tamj0rd2
21 July 2017 в 12:28
main
из среды IDE. (И для некоторых IDE вам не нужно i> настроить панель запуска, чтобы это произошло, например, run
Eclipse будет найти i> класс с методом main
для вы.
– Stephen C
22 August 2017 в 04:52
Could not find or load main class ...
. Вот как я приехал на этот пост :)
– cepix
22 August 2017 в 17:41
main
, вам просто не предлагается опция «Использовать и использовать Java» в контекстном меню.
– Stephen C
22 August 2017 в 22:44