Stack trace element in java

Class StackTraceElement

An element in a stack trace, as returned by Throwable.getStackTrace() . Each element represents a single stack frame. All stack frames except for the one at the top of the stack represent a method invocation. The frame at the top of the stack represents the execution point at which the stack trace was generated. Typically, this is the point at which the throwable corresponding to the stack trace was created.

Constructor Summary

StackTraceElement (String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)

Method Summary

Returns true if the specified object is another StackTraceElement instance representing the same execution point as this instance.

Returns the name of the class loader of the class containing the execution point represented by this stack trace element.

Returns the fully qualified name of the class containing the execution point represented by this stack trace element.

Returns the name of the source file containing the execution point represented by this stack trace element.

Returns the line number of the source line containing the execution point represented by this stack trace element.

Returns the name of the method containing the execution point represented by this stack trace element.

Returns the module name of the module containing the execution point represented by this stack trace element.

Returns the module version of the module containing the execution point represented by this stack trace element.

Returns true if the method containing the execution point represented by this stack trace element is a native method.

Methods declared in class java.lang.Object

Constructor Details

StackTraceElement

Creates a stack trace element representing the specified execution point. The module name and module version of the stack trace element will be null .

StackTraceElement

public StackTraceElement (String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)

Method Details

getFileName

Returns the name of the source file containing the execution point represented by this stack trace element. Generally, this corresponds to the SourceFile attribute of the relevant class file (as per The Java Virtual Machine Specification , Section 4.7.7). In some systems, the name may refer to some source code unit other than a file, such as an entry in source repository.

getLineNumber

Returns the line number of the source line containing the execution point represented by this stack trace element. Generally, this is derived from the LineNumberTable attribute of the relevant class file (as per The Java Virtual Machine Specification , Section 4.7.8).

Читайте также:  Date php минус день

getModuleName

Returns the module name of the module containing the execution point represented by this stack trace element.

getModuleVersion

Returns the module version of the module containing the execution point represented by this stack trace element.

getClassLoaderName

Returns the name of the class loader of the class containing the execution point represented by this stack trace element.

getClassName

Returns the fully qualified name of the class containing the execution point represented by this stack trace element.

getMethodName

Returns the name of the method containing the execution point represented by this stack trace element. If the execution point is contained in an instance or class initializer, this method will return the appropriate special method name, or , as per Section 3.9 of The Java Virtual Machine Specification .

isNativeMethod

Returns true if the method containing the execution point represented by this stack trace element is a native method.

toString

  • » com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101) » — See the description below.
  • » com.foo.loader/foo@9.0/com.foo.Main.run(Main.java) » — The line number is unavailable.
  • » com.foo.loader/foo@9.0/com.foo.Main.run(Unknown Source) » — Neither the file name nor the line number is available.
  • » com.foo.loader/foo@9.0/com.foo.Main.run(Native Method) » — The method containing the execution point is a native method.
  • » com.foo.loader//com.foo.bar.App.run(App.java:12) » — The class of the execution point is defined in the unnamed module of the class loader named com.foo.loader .
  • » acme@2.1/org.acme.Lib.test(Lib.java:80) » — The class of the execution point is defined in acme module loaded by a built-in class loader such as the application class loader.
  • » MyClass.mash(MyClass.java:9) » — MyClass class is on the application class path.

The first example shows a stack trace element consisting of three elements, each separated by «/» , followed by the source file name and the line number of the source line containing the execution point. The first element » com.foo.loader » is the name of the class loader. The second element » foo@9.0 » is the module name and version. The third element is the method containing the execution point; » com.foo.Main» » is the fully-qualified class name and » run » is the name of the method. » Main.java » is the source file name and » 101 » is the line number.

If a class is defined in an unnamed module then the second element is omitted as shown in » com.foo.loader//com.foo.bar.App.run(App.java:12) «.

If the class loader is a built-in class loader or is not named then the first element and its following «/» are omitted as shown in » acme@2.1/org.acme.Lib.test(Lib.java:80) «. If the first element is omitted and the module is an unnamed module, the second element and its following «/» are also omitted as shown in » MyClass.mash(MyClass.java:9) «.

The toString method may return two different values on two StackTraceElement instances that are equal, for example one created via the constructor, and one obtained from Throwable or StackWalker.StackFrame , where an implementation may choose to omit some element in the returned string.

Читайте также:  Show email in html

equals

Returns true if the specified object is another StackTraceElement instance representing the same execution point as this instance. Two stack trace elements a and b are equal if and only if:

 equals(a.getClassLoaderName(), b.getClassLoaderName()) && equals(a.getModuleName(), b.getModuleName()) && equals(a.getModuleVersion(), b.getModuleVersion()) && equals(a.getClassName(), b.getClassName()) && equals(a.getMethodName(), b.getMethodName()) equals(a.getFileName(), b.getFileName()) && a.getLineNumber() == b.getLineNumber() 

hashCode

Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2023, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.

Источник

Stack trace element in java

An element in a stack trace, as returned by Throwable.getStackTrace() . Each element represents a single stack frame. All stack frames except for the one at the top of the stack represent a method invocation. The frame at the top of the stack represents the execution point at which the stack trace was generated. Typically, this is the point at which the throwable corresponding to the stack trace was created.

Constructor Summary

Method Summary

Returns true if the specified object is another StackTraceElement instance representing the same execution point as this instance.

Returns the fully qualified name of the class containing the execution point represented by this stack trace element.

Returns the name of the source file containing the execution point represented by this stack trace element.

Returns the line number of the source line containing the execution point represented by this stack trace element.

Returns the name of the method containing the execution point represented by this stack trace element.

Returns true if the method containing the execution point represented by this stack trace element is a native method.

Methods inherited from class java.lang.Object

Constructor Detail

StackTraceElement

public StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber)

Method Detail

getFileName

Returns the name of the source file containing the execution point represented by this stack trace element. Generally, this corresponds to the SourceFile attribute of the relevant class file (as per The Java Virtual Machine Specification, Section 4.7.7). In some systems, the name may refer to some source code unit other than a file, such as an entry in source repository.

getLineNumber

Returns the line number of the source line containing the execution point represented by this stack trace element. Generally, this is derived from the LineNumberTable attribute of the relevant class file (as per The Java Virtual Machine Specification, Section 4.7.8).

Читайте также:  Java фреймворк для web

getClassName

Returns the fully qualified name of the class containing the execution point represented by this stack trace element.

getMethodName

Returns the name of the method containing the execution point represented by this stack trace element. If the execution point is contained in an instance or class initializer, this method will return the appropriate special method name, or , as per Section 3.9 of The Java Virtual Machine Specification.

isNativeMethod

public boolean isNativeMethod()

Returns true if the method containing the execution point represented by this stack trace element is a native method.

toString

  • «MyClass.mash(MyClass.java:9)» — Here, «MyClass» is the fully-qualified name of the class containing the execution point represented by this stack trace element, «mash» is the name of the method containing the execution point, «MyClass.java» is the source file containing the execution point, and «9» is the line number of the source line containing the execution point.
  • «MyClass.mash(MyClass.java)» — As above, but the line number is unavailable.
  • «MyClass.mash(Unknown Source)» — As above, but neither the file name nor the line number are available.
  • «MyClass.mash(Native Method)» — As above, but neither the file name nor the line number are available, and the method containing the execution point is known to be a native method.

equals

Returns true if the specified object is another StackTraceElement instance representing the same execution point as this instance. Two stack trace elements a and b are equal if and only if:

 equals(a.getFileName(), b.getFileName()) && a.getLineNumber() == b.getLineNumber()) && equals(a.getClassName(), b.getClassName()) && equals(a.getMethodName(), b.getMethodName()) 

hashCode

Источник

Помогите разобраться с StackTraceElement[]

Java-машина ведет запись всех вызовов функций. У нее есть для этого специальная коллекция – стек. Когда одна функция вызывает другую, Java-машина помещает в этот стек новый элемент StackTraceElement. Когда функция завершается этот элемент удаляется из стека. Таким образом, в этом стеке всегда хранится актуальная информация о текущем состоянии «стека вызовов функций»

 public static void main(String[] args) < method1(); >public static void method1() < method2(); >public static void method2() < method3(); >public static void method3() < StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); for (StackTraceElement element : stackTraceElements) < System.out.println(element.getMethodName()); >> 
getStackTrace method3 method2 method1 main 
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); 
//Cоздаём переменную типа StackTraceElement[] StackTraceElement[] stackTraceElements //Присваеваем ей ссылку на текущий поток и заносим в массив специальные элементы StackTrace Thread.currentThread().getStackTrace() 

Вопрос №1: каким образом в этом массиве StackTraceElement[] вся информация о вызываемых методах, если сказано, что после выполнения метода информация из стека удаляется? Вопрос №2: В одном из заданий просят вернуть имя метода, который его вызывает

 public static void main(String[] args) throws Exception < method1(); >public static String method1() < method2(); return Thread.currentThread().getStackTrace()[2].getMethodName(); >public static String method2() < method3(); return Thread.currentThread().getStackTrace()[2].getMethodName(); >public static String method3() < method4(); return Thread.currentThread().getStackTrace()[2].getMethodName(); >public static String method4() < method5(); return Thread.currentThread().getStackTrace()[2].getMethodName(); >public static String method5()
return Thread.currentThread().getStackTrace()[2].getMethodName(); 

если мы не создавали StackTraceElement[] . Значит ли это, что он неявно создается JVM при выполнении программы?

Источник

Оцените статью