Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int
:
int x;
x = 10;
В этом примере переменная x является int
, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.
Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:
Integer num;
num = new Integer(10);
Первая строка объявляет переменную с именем num
, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer
является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».
Во второй строке ключевое слово new
используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num
присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования .
(точка).
Exception
, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num
. Перед созданием объекта вы получите NullPointerException
. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.
Например, вы можете имеют следующий метод:
public void doSomething(SomeObject obj) {
//do something to obj
}
В этом случае вы не создаете объект obj
, скорее предполагая, что он был создан до вызова метода doSomething
. К сожалению, этот метод можно вызвать следующим образом:
doSomething(null);
В этом случае obj
имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException
, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.
Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething
может быть записано как:
/**
* @param obj An optional foo for ____. May be null, in which case
* the result will be ____.
*/
public void doSomething(SomeObject obj) {
if(obj != null) {
//do something
} else {
//do something else
}
}
Наконец, Как определить исключение & amp; причина использования Трассировки стека
Если вы просто хотите для запуска файла щелкните правой кнопкой мыши на классе из проводника пакетов и нажмите «Запустить файл» или (Alt + R, F) или (Shift + F6)
В свойствах проекта на вкладке run укажите свой основной класс. Кроме того, Чтобы избежать этой проблемы, вам нужно проверить «Создать основной класс» во время создания нового проекта. Задание основного класса в свойствах всегда должно работать, но если в каком-то редком случае это не сработает, тогда проблема может быть решена путем повторного создания проекта и не забудьте проверить «Создать основной класс», если он не установлен.
Если совет по добавлению закрывающих фигурных скобок работает, я предлагаю добавить отступ в ваш код, чтобы каждая закрывающая скобка находилась на раздельном расстоянии, то есть:
public class LuisRp3 {
public static void main(String[] args) throws FileNotFoundException {
// stuff
}
}
Это просто помогает с удобочитаемостью.
Если, с другой стороны, вы просто забыли скопировать закрывающие фигурные скобки в свой код, или приведенное выше предложение не работает: откройте конфигурацию и посмотрите, можно ли вручную установить основной класс. Боюсь, что я не использовал NetBeans много, поэтому я не могу помочь вам, где этот вариант. Моя лучшая догадка находится в разделе «Конфигурация запуска» или что-то в этом роде.
Изменить: см. Ответ peeskillet , если добавление закрывающих фигурных скобок не работает.
Вам нужно переименовать свой основной класс в Main
, он не может быть чем-то еще.
Неважно, сколько файлов в виде пакетов и классов вы создаете, вы должны назвать свой основной класс Main
.
Вот и все.
В этой ситуации может быть несколько ошибок (предполагая, что у вас был код после вашего примера, и он не просто оставил ваш код без изменений).
Прежде всего, если вы используете свой весь проект, а не только текущий файл, убедитесь, что ваш проект является основным проектом, а основной класс проекта установлен в правильный файл.
В противном случае я видел одноклассников с их кодом, но это было нормально, но у них все еще была такая же проблема. Иногда, в Netbeans, простое исправление:
Если это не работает, попробуйте очистить кеш Netbeans, а если все остальное не удастся, просто выполните чистую установку и переустановку Netbeans.
При создании нового проекта - приложения Maven - Java в Netbeans среда IDE не распознает основной класс в записи первого класса. (на шаге 8 ниже мы не видим классов).
Когда сначала создается общий класс, а затем создается класс Main Netbeans регистрирует основной класс, и приложение может быть запущено и отлажено.
Шаги, которые сработали для меня:
Надеюсь, что это работает и для других.
Нажмите молоток слева от зеленой стрелки (пробег), чтобы программа очистила & amp; построить проект. Нажмите зеленую стрелку. Выберите Основной класс.
Надеюсь, что он работает для u.
Убедитесь, что модификатор доступа является общедоступным, а не закрытым. Я продолжаю эту проблему, и всегда это моя проблема.
public static void main (String [] args)
У меня была та же проблема в Eclipse, поэтому, возможно, что я сделал, чтобы решить проблему, это может вам помочь. В свойствах проекта мне пришлось установить конфигурацию запуска в файл, содержащий основной метод (я не знаю, почему он не был настроен на правый файл автоматически).
Кроме того, для других существует несколько другая проблема, когда Netbeans не найдет класс, когда вы хотите, когда вы просматриваете его из «диалогового окна основных классов».
Возможно, ваш основной метод имеет правильную подпись. В моем случае я забыл аргументы.
example: public static void main (String [] args)
Модификаторы public и static могут быть записаны в любом порядке (public static или static общедоступный), но конвенция заключается в использовании открытого статического элемента, как показано выше.
Args: вы можете назвать аргумент чем угодно, но большинство программистов выбирают «args» или «argv».
Подробнее здесь: http: // docs. oracle.com/javase/tutorial/getStarted/application/
В панели инструментов поиска нажмите стрелку и выберите «Настроить ...» Он откроет свойства проекта. В категориях выберите «RUN». Ищите главный класс. Очистите все символы главного класса и введите имя своего класса. Нажмите «ОК». И снова бегите. Проблема решена.
import java.util.Scanner;
public class FarenheitToCelsius{
public static void main(String[]args){
Scanner input= new Scanner(System.in);
System.out.println("Enter Degree in Farenheit:");
double Farenheit=input.nextDouble();
//convert farenheit to celsius
double celsuis=(5.0/9)*(farenheit 32);
system.out.println("Farenheit"+farenheit+"is"+celsius+"in celsius")
{
, если все это ваш код, который вы забыли закрыть основным методом
, все остальное звучит хорошо для меня
public class LuisRp3 {
public static void main(String[] args) throws FileNotFoundException {
java.io.File newFile = new java.io.File("LuisRamosp4.txt");
if (newFile.exists()) {
newFile.delete();
}
System.setOut(new PrintStream(newFile));
Guitar guitar = new Guitar();
}}
попробуйте