Почему вторая печать возвращает ноль?
Поскольку вы пытаетесь найти системное свойство, которое не существует.
Это не способ найтипуть к основному классу.
Что вам нужно сделать, это:
Получить полное (или каноническое) имя для класса;например,
String name = Main.class.getCanonicalName();
Сопоставьте это с путем к ресурсу для файла ".class".Вам необходимо:
- заменить все "."символы в полном имени класса с "/", а затем
- добавьте ".class".
Используйте getResource(resourcePath)
для поиска URL
.
Если полученный URL-адрес является URL-адресом «file:», вы можете использовать URL::toFile()
, чтобы получить путь в файловой системе.
Но если URL является URL "jar:" (как это будет, если вы загрузили класс из файла JAR), у класса не будет пути к файловой системе.
Обратите внимание, что getClassLoader().getResource("")
дает вам путь к корневому каталогу загрузчика классов.Это не путь к исходному классу.
И если вам нужно имя класса JVM, который вызывает ваш метод static void main(String[])
, то вы сможете получить его, используя Java 9+ StackWalker
класс ( javadoc ).Я думаю, вам нужно будет использовать опцию, чтобы показать скрытые рамки.