Поля класса. На размещенном вами дисплее вы фактически не остановлены ни в методе HashMap.put(K,V)
, а в методе HashMap.hash(Object)
(который вызывает put
). hash(Object)
- это метод static
- он выполняется без контекста 'instance' (в частности, this
).
Если вы перейдете в стек к методу put(K,V)
(или к любому другому методу экземпляра), вы увидите, что у него есть объект HashMap как this
. Если поле еще не раскрыто, щелкните поле «плюс», чтобы увидеть все поля в классе.
Хотя статические поля (только) доступны для статического метода (и в зависимости от видимости, для методов в других классах, которые неиметь или использовать экземпляр), окно / представление «Переменные» не может найти их. Вы можете получить доступ к invididual статическим полям в окне / представлении 'Выражения' - хотя в стандартных (JDK) классах, которые я рассматривал, статические поля в основном являются константами, значение которых дано в исходном коде, таким образом, глядя наони с отладчиком не очень полезны.
Локальные переменные. Старые сборки Oracle, очевидно, скомпилированы с LineNumber (и SourceFile) отладочной информацией, но без LocalVariable отладочной информации. Это отдельные подопции;см. справочное сообщение или руководство по javac
. Без этой информации в файле классов отладчик не отображает локальные переменные или имена для параметров (он отображает значения для параметров, например arg0 arg1
и т. Д., Поскольку тип информация находится в основных данных файла класса).
Я не знаю, почему они это сделали;возможно, это был остаток от дней с открытым исходным кодом. Сборки Oracle для более новых версий (j9 и выше) и некоторых сборок OpenJDK, которые я мог легко проверить, do имеют LocalVariables. Вы можете попробовать один из них (использование более новой версии может зависеть в некоторой степени от вашей версии Eclipse).