#java #intellij-idea
Вопрос:
Я кое-что тестировал и столкнулся с любопытным случаем, когда IntelliJ не отлаживал мой код, когда у меня была точка останова, как показано на рисунке 1. Но когда я перемещаю точку останова, все работает нормально.
Код:
public class Walrus {
public int weight;
public double tuskSize;
public Walrus(int weight, int x){
this.weight = weight;
this.tuskSize = tuskSize;
}
public static void main(String[] args) {
// Random declared ints.
int x;
double y;
// Declared a Walrus
Walrus someWalrus;
// Set to null
someWalrus = null;
// Initialize a new Walrus.
Walrus a = new Walrus(10,3);
System.out.println();
}
}
Когда у меня есть точка отладки здесь (см. Рисунок), это не работает и выдает следующую ошибку:
Ошибка:
Подключен к целевой виртуальной машине, адрес: ‘127.0.0.1:59776’, транспорт: ‘сокет’ 64-разрядная серверная виртуальная машина OpenJDK предупреждение: Общий доступ поддерживается только для классов загрузчика, поскольку путь к классу начальной загрузки был добавлен Отключен от целевой виртуальной машины, адрес: ‘127.0.0.1:59776’, транспорт: процесс «сокет» завершен с кодом выхода 0
Теперь, если я сделаю это (см. 2-е изображение), все будет нормально:
Я думаю, может быть, он думает, что отлаживать нечего, так как я не назначил ни одну из переменных. Но это всего лишь предположение. Не мог бы кто-нибудь, пожалуйста, объяснить, что происходит здесь, под капотом? Спасибо.
Ответ №1:
После выполнения программы первая точка останова отключается как «Исполняемый код не найден». Видеть
Комментарии:
1. Спасибо! Не могли бы вы объяснить, пожалуйста, почему он не исполняется? Потому что я читал, что, грубо говоря, когда вы объявляете только переменную, Java ищет некоторую память в компьютере и резервирует ее. Например, для int x; он резервирует память в 32 бита, к которой мы, конечно, не можем получить доступ, но он что-то сделал, так что разве он не выполнил это утверждение?
2. Резервирование памяти происходит до того момента, как отладчик сможет подключиться к запущенному процессу java. Это работа компилятора.