1.
new Exception().printStackTrace(printStream)Печатает стек-трейс в текстовом виде в поток. Первой строкой выводится
toString() объекта Exception, далее стек вызовов до места создания исключения. Соответственно, из потока нужно будет достать и распарсить вторую строку. В зависимости от JVM формат вывода может отличаться.2.
Thread.currentThread().getStackTrace()3.
new Exception().getStackTrace()Более красивые способы. Возвращают уже массив готовых объектов-фреймов, нужно только взять первый элемент. Эти вызовы дорогие, они всегда загружают весь стек, даже если нужен первый фрейм. От класса-владельца метода в возвращаемом
StackTraceElement доступна только строка имени, для доступа через Reflection придется загружать его вручную.4.
StackWalker.getInstance(options, depth).walk(s -> ...)Самый продвинутый способ, доступный с Java 9 – специально предназначенный для этого класс. Параметрами метода
getInstance() можно ограничивать необходимую глубину и детализацию стека. Результаты – экземпляры StackFrame – содержат готовый для рефлекшна Class<?> вызывающего объекта.