java.lang.StackTraceElement类

StackTraceElement简介

public final class StackTraceElement

  extends 
  Object     

  implements 
  Serializable

堆栈跟踪中的元素,它由 Throwable.getStackTrace() 返回。每个元素表示单独的一个堆栈帧。所有的堆栈帧(堆栈顶部的那个堆栈帧除外)都表示一个方法调用。堆栈顶部的帧表示生成堆栈跟踪的执行点。通常,这是创建对应于堆栈跟踪的 throwable 的点。

方法摘要
boolean equals(Object obj)
如果指定的对象是另一个 StackTraceElement 实例,并且该对象表示的执行点与该实例的相同,则返回 ture。
String getClassName()
返回类的完全限定名,该类包含由该堆栈跟踪元素所表示的执行点。
String getFileName()
返回源文件名,该文件包含由该堆栈跟踪元素所表示的执行点。
int getLineNumber()
返回源行的行号,该行包含由该堆栈该跟踪元素所表示的执行点。
String getMethodName()
返回方法名,此方法包含由该堆栈跟踪元素所表示的执行点。
int hashCode()
返回此堆栈跟踪元素的哈希码值。
boolean isNativeMethod()
如果包含由该堆栈跟踪元素所表示的执行点的方法是一个本机方法,则返回 true。
String toString()
返回表示该堆栈跟踪元素的字符串。

代码演示

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;


public class MainActivity extends Activity implements View.OnClickListener {

    Button btnTest;

    private final static String TAG = "test";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnTest = (Button) findViewById(R.id.btn_test);
        btnTest.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_test) {
            method();
        }
    }

    public void method() {
        // 获取当前线程的堆栈跟踪元素
        StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
        // 遍历获取到的堆栈跟踪元素
        for (int i = 0; i < stacks.length; i++) {
            Log.i(TAG, "------------------element" + i + "-----------------");
            Log.i(TAG, stacks[i].getFileName() + "");
            Log.i(TAG, stacks[i].getClassName() + "");
            Log.i(TAG, stacks[i].getMethodName() + "");
            Log.i(TAG, stacks[i].getLineNumber() + "");
        }
    }
}

布局文件中只有一个id为btn_test的Button,这里就不粘了。执行上述的代码可得到如下Log:

08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element0-----------------
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ VMStack.java
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ dalvik.system.VMStack
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ getThreadStackTrace
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ -2
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element1-----------------
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ Thread.java
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ java.lang.Thread
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ getStackTrace
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ 579
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element2-----------------
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ MainActivity.java
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ com.lyong.coreandroid.MainActivity
08-06 11:20:35.407  14595-14595/com.lyong.coreandroid I/test﹕ method
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ 34
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element3-----------------
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ MainActivity.java
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ com.lyong.coreandroid.MainActivity
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ onClick
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ 28
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element4-----------------
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ View.java
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ android.view.View
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ performClick
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ 4444
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element5-----------------
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ View.java
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ android.view.View$PerformClick
08-06 11:20:35.427  14595-14595/com.lyong.coreandroid I/test﹕ run
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 18440
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element6-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ Handler.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ android.os.Handler
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ handleCallback
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 733
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element7-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ Handler.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ android.os.Handler
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ dispatchMessage
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 95
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element8-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ Looper.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ android.os.Looper
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ loop
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 136
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element9-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ActivityThread.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ android.app.ActivityThread
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ main
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 5047
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element10-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ Method.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ java.lang.reflect.Method
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ invokeNative
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ -2
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element11-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ Method.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ java.lang.reflect.Method
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ invoke
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 515
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element12-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ZygoteInit.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ com.android.internal.os.ZygoteInit$MethodAndArgsCaller
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ run
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 806
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element13-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ZygoteInit.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ com.android.internal.os.ZygoteInit
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ main
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ 622
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ ------------------element14-----------------
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ NativeStart.java
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ dalvik.system.NativeStart
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ main
08-06 11:20:35.437  14595-14595/com.lyong.coreandroid I/test﹕ -2
08-06 11:21:35.787  14595-14595/com.lyong.coreandroid W/IInputConnectionWrapper﹕ getCursorCapsMode on inactive InputConnection
08-06 11:26:20.417  14595-14595/com.lyong.coreandroid I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@42ec4400 time:71641141

根据日志可以清晰的看到,下标为2的信息就是我们自己所写代码的信息。xUtils的Log工具类就使用到了这个类,可以输出tag为”类名.方法名(line:行号)“格式的Log,例如:MainActivity.method(line:34)

第一篇技术文章就写到这里,之后会更加努力,写出更完善、更详细的文章。

你可能感兴趣的:(对象,Class,栈)