Module java.base
Package java.lang

Class StackTraceElement

java.lang.Object
java.lang.StackTraceElement
所有已实现的接口:
Serializable

public final class StackTraceElement extends Object implements Serializable
堆栈跟踪中的一个元素,由Throwable.getStackTrace()返回。每个元素代表一个单独的堆栈帧。除了堆栈顶部的帧之外的所有堆栈帧都代表一个方法调用。堆栈顶部的帧代表生成堆栈跟踪的执行点。通常,这是生成与堆栈跟踪对应的throwable的点。
自版本:
1.4
参见:
  • Constructor Summary

    Constructors
    Constructor
    Description
    StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber)
    创建表示指定执行点的堆栈跟踪元素。
    StackTraceElement(String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)
    创建表示指定执行点的堆栈跟踪元素。
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    equals(Object obj)
    如果指定的对象是另一个表示与此实例相同执行点的StackTraceElement实例,则返回true。
    返回包含由此堆栈跟踪元素表示的执行点的类加载器的名称。
    返回包含由此堆栈跟踪元素表示的执行点的类的完全限定名称。
    返回包含由此堆栈跟踪元素表示的执行点的源文件的名称。
    int
    返回包含由此堆栈跟踪元素表示的执行点的源行的行号。
    返回包含由此堆栈跟踪元素表示的执行点的方法的名称。
    返回包含由此堆栈跟踪元素表示的执行点的模块的名称。
    返回包含由此堆栈跟踪元素表示的执行点的模块的版本。
    int
    返回此堆栈跟踪元素的哈希码值。
    boolean
    如果包含由此堆栈跟踪元素表示的执行点的方法是本地方法,则返回true。
    返回此堆栈跟踪元素的字符串表示形式。

    Methods declared in class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • StackTraceElement

      public StackTraceElement(String declaringClass, String methodName, String fileName, int lineNumber)
      创建表示指定执行点的堆栈跟踪元素。堆栈跟踪元素的模块名称模块版本将为null
      参数:
      declaringClass - 包含由堆栈跟踪元素表示的执行点的类的完全限定名称
      methodName - 包含由堆栈跟踪元素表示的执行点的方法的名称
      fileName - 包含由堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用,则为null
      lineNumber - 包含由此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。值为-2表示包含执行点的方法是本地方法
      抛出:
      NullPointerException - 如果declaringClassmethodName为null
      自版本:
      1.5
    • StackTraceElement

      public StackTraceElement(String classLoaderName, String moduleName, String moduleVersion, String declaringClass, String methodName, String fileName, int lineNumber)
      创建表示指定执行点的堆栈跟踪元素。
      参数:
      classLoaderName - 如果包含由堆栈跟踪元素表示的执行点的类的类加载器具有名称,则为类加载器名称;否则为null
      moduleName - 如果包含由堆栈跟踪元素表示的执行点的类所在的模块具有名称,则为模块名称;否则为null
      moduleVersion - 如果包含由堆栈跟踪元素表示的执行点的类所在的具有版本的命名模块,则为模块版本;否则为null
      declaringClass - 包含由堆栈跟踪元素表示的执行点的类的完全限定名称
      methodName - 包含由堆栈跟踪元素表示的执行点的方法的名称
      fileName - 包含由堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用,则为null
      lineNumber - 包含由此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。值为-2表示包含执行点的方法是本地方法
      抛出:
      NullPointerException - 如果declaringClassnullmethodNamenull
      自版本:
      9
  • Method Details

    • getFileName

      public String getFileName()
      返回包含由此堆栈跟踪元素表示的执行点的源文件的名称。通常,这对应于相关class文件的SourceFile属性(根据Java虚拟机规范4.7.7节)。在某些系统中,该名称可能指的是除文件之外的某个源代码单元,例如源代码库中的条目。
      返回:
      包含由此堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用,则为null
    • getLineNumber

      public int getLineNumber()
      返回包含由此堆栈跟踪元素表示的执行点的源行的行号。通常,这是从相关class文件的LineNumberTable属性派生的(根据Java虚拟机规范4.7.8节)。
      返回:
      包含由此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。
    • getModuleName

      public String getModuleName()
      返回包含由此堆栈跟踪元素表示的执行点的模块的名称。
      返回:
      包含由此堆栈跟踪元素表示的执行点的Module的模块名称;如果模块名称不可用,则为null
      自版本:
      9
      参见:
    • getModuleVersion

      public String getModuleVersion()
      返回包含由此堆栈跟踪元素表示的执行点的模块的模块版本。
      返回:
      包含由此堆栈跟踪元素表示的执行点的Module的模块版本;如果模块版本不可用,则为null
      自版本:
      9
      参见:
    • getClassLoaderName

      public String getClassLoaderName()
      返回包含由此堆栈跟踪元素表示的执行点的类的类加载器的名称。
      返回:
      包含由此堆栈跟踪元素表示的执行点的类的类加载器的名称;如果类加载器未命名,则为null
      自版本:
      9
      参见:
    • getClassName

      public String getClassName()
      返回包含由此堆栈跟踪元素表示的执行点的类的完全限定名称。
      返回:
      包含由此堆栈跟踪元素表示的执行点的Class的完全限定名称。
    • getMethodName

      public String getMethodName()
      返回包含由此堆栈跟踪元素表示的执行点的方法的名称。如果执行点包含在实例或类初始化程序中,则此方法将返回适当的特殊方法名称,如"<init>""<clinit>",根据Java虚拟机规范3.9节。
      返回:
      返回包含由此堆栈跟踪元素表示的执行点的方法的名称。
    • isNativeMethod

      public boolean isNativeMethod()
      如果包含由此堆栈跟踪元素表示的执行点的方法是本地方法,则返回true。
      返回:
      如果包含由此堆栈跟踪元素表示的执行点的方法是本地方法,则返回true
    • toString

      public String toString()
      返回此堆栈跟踪元素的字符串表示形式。
      覆盖:
      toString 在类 Object
      API注释:
      此字符串的格式取决于实现,但以下示例可视为典型:
      • "com.foo.loader/foo@9.0/com.foo.Main.run(Main.java:101)" - 请参阅下面的描述。
      • "com.foo.loader/foo@9.0/com.foo.Main.run(Main.java)" - 行号不可用。
      • "com.foo.loader/foo@9.0/com.foo.Main.run(Unknown Source)" - 既没有文件名也没有行号可用。
      • "com.foo.loader/foo@9.0/com.foo.Main.run(Native Method)" - 包含执行点的方法是本地方法。
      • "com.foo.loader//com.foo.bar.App.run(App.java:12)" - 执行点的类在名为com.foo.loader的类加载器的未命名模块中定义。
      • "acme@2.1/org.acme.Lib.test(Lib.java:80)" - 执行点的类在由内置类加载器加载的acme模块中定义,例如应用程序类加载器。
      • "MyClass.mash(MyClass.java:9)" - MyClass类在应用程序类路径上。

      第一个示例显示了由三个元素组成的堆栈跟踪元素,每个元素由"/"分隔,后跟包含执行点的源行的源文件名和行号。第一个元素"com.foo.loader"是类加载器的名称。第二个元素"foo@9.0"是模块名称和版本。第三个元素是包含执行点的方法;"com.foo.Main"是完全限定的类名,"run"是方法的名称。"Main.java"是源文件名,"101"是行号。

      如果类在一个未命名模块中定义,则如"com.foo.loader//com.foo.bar.App.run(App.java:12)"所示,第二个元素将被省略。

      如果类加载器是一个内置类加载器或者没有名称,则第一个元素及其后的"/"将被省略,如"acme@2.1/org.acme.Lib.test(Lib.java:80)"所示。如果省略第一个元素且模块是未命名模块,则也将省略第二个元素及其后的"/",如"MyClass.mash(MyClass.java:9)"所示。

      toString方法可能会在两个StackTraceElement实例上返回两个不同的值,这两个实例通过构造函数创建,一个通过ThrowableStackWalker.StackFrame获取,其中实现可能选择在返回的字符串中省略一些元素。

      返回:
      对象的字符串表示形式。
      参见:
    • equals

      public boolean equals(Object obj)
      如果指定的对象是另一个表示与此实例相同执行点的StackTraceElement实例,则返回true。两个堆栈跟踪元素ab仅在以下情况下相等:
      
           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()
      
       
      其中equals具有Objects.equals的语义。
      覆盖:
      equals 在类 Object
      参数:
      obj - 与此堆栈跟踪元素进行比较的对象。
      返回:
      如果指定的对象是另一个表示与此实例相同执行点的StackTraceElement实例,则返回true。
      参见:
    • hashCode

      public int hashCode()
      返回此堆栈跟踪元素的哈希码值。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见: