Module  java.base
软件包  java.lang

Class StackTraceElement

  • All Implemented Interfaces:
    Serializable


    public final class StackTraceElement
    extends Object
    implements Serializable
    堆栈跟踪中的一个元素,由Throwable.getStackTrace()返回。 每个元素表示单个堆栈帧。 堆栈顶部除堆栈之外的所有堆栈都表示方法调用。 堆栈顶部的帧表示生成堆栈跟踪的执行点。 通常,这是创建与堆栈跟踪相对应的throwable的点。
    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • 方法摘要

      所有方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      boolean equals​(Object obj)
      如果指定的对象是另一个表示与该实例相同的执行点的 StackTraceElement实例,则返回true。
      String getClassLoaderName​()
      返回包含由此堆栈跟踪元素表示的执行点的类的类加载器的名称。
      String getClassName​()
      返回包含由该堆栈跟踪元素表示的执行点的类的完全限定名称。
      String getFileName​()
      返回包含由该堆栈跟踪元素表示的执行点的源文件的名称。
      int getLineNumber​()
      返回包含由该堆栈跟踪元素表示的执行点的源行的行号。
      String getMethodName​()
      返回包含由该堆栈跟踪元素表示的执行点的方法的名称。
      String getModuleName​()
      返回包含由该堆栈跟踪元素表示的执行点的模块的模块名称。
      String getModuleVersion​()
      返回包含由该堆栈跟踪元素表示的执行点的模块的模块版本。
      int hashCode​()
      返回此堆栈跟踪元素的哈希码值。
      boolean isNativeMethod​()
      如果包含由此堆栈跟踪元素表示的执行点的方法是本机方法,则返回true。
      String toString​()
      返回此堆栈跟踪元素的字符串表示形式。
    • 构造方法详细信息

      • StackTraceElement

        public StackTraceElement​(String declaringClass,
                                 String methodName,
                                 String fileName,
                                 int lineNumber)
        创建表示指定执行点的堆栈跟踪元素。 堆栈跟踪元素的module namemodule version将为null
        参数
        declaringClass - 包含由堆栈跟踪元素表示的执行点的类的完全限定名称
        methodName - 包含由堆栈跟踪元素表示的执行点的方法的名称
        fileName - 包含由堆栈跟踪元素表示的执行点的文件的名称,如果此信息不可用, null
        lineNumber - 包含由此堆栈跟踪元素表示的执行点的源行的行号,如果此信息不可用,则为负数。 值-2表示包含执行点的方法是本地方法
        异常
        NullPointerException - 如果 declaringClassmethodName为空
        从以下版本开始:
        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
    • 方法详细信息

      • 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
        另请参见:
        Module.getName()
      • getModuleVersion

        public String getModuleVersion​()
        返回包含由该堆栈跟踪元素表示的执行点的模块的模块版本。
        结果
        Module的模块版本包含由该堆栈跟踪元素表示的执行点; null如果模块版本不可用。
        从以下版本开始:
        9
        另请参见:
        ModuleDescriptor.Version
      • getClassLoaderName

        public String getClassLoaderName​()
        返回包含由此堆栈跟踪元素表示的执行点的类的类加载器的名称。
        结果
        包含由该堆栈跟踪元素表示的执行点的类的类加载器的名称; 如果类加载器未命名, null
        从以下版本开始:
        9
        另请参见:
        ClassLoader.getName()
      • getClassName

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

        public String getMethodName​()
        返回包含由该堆栈跟踪元素表示的执行点的方法的名称。 如果执行点包含在实例或类初始化程序中,则该方法将返回相应的特殊方法名称 <init><clinit> ,如“Java虚拟机规范”第3.9节所述。
        结果
        包含由该堆栈跟踪元素表示的执行点的方法的名称。
      • isNativeMethod

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

        public String toString​()
        返回此堆栈跟踪元素的字符串表示形式。
        重写:
        toStringObject
        API Note:
        此字符串的格式取决于实现,但以下示例可能被视为典型的:
        • 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) ”所示。

        如果类加载器是一个built-in class loader或者没有命名,那么第一个元素及其以下的"/"被省略,如“ acme@2.1/org.acme.Lib.test(Lib.java:80) ”所示。 如果省略第一个元素,并且模块是未命名的模块,则第二个元素及其以下的"/"也被省略,如“ MyClass.mash(MyClass.java:9) ”所示。

        toString方法可以在两个返回两个不同的值StackTraceElement实例是equal ,例如一种通过构造创建,并且从获得的一个ThrowableStackWalker.StackFrame ,其中一个实现可以选择省略一些元件返回的字符串英寸

        结果
        对象的字符串表示形式。
        另请参见:
        Throwable.printStackTrace()
      • 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
        重写:
        equalsObject
        参数
        obj - 要与此堆栈跟踪元素进行比较的对象。
        结果
        如果指定的对象是另一个表示与该实例相同的执行点的 StackTraceElement实例,则为true。
        另请参见:
        Object.hashCode()HashMap