在成员方法中获取类名、方法名、行数

简介:

在实例方法中如何获取该方法所属的类名、方法名、行数呢?

例子项目有两个类:

Java代码   收藏代码
  1. package com.jn.bean;  
  2.   
  3. public class Student {  
  4.     public String method2(int age,String name) {  
  5.         System.out.println("execute....");  
  6.         Class clazz = this.getClass();  
  7.         String className = clazz.getCanonicalName();/* com.jn.bean.Student */  
  8.         String classSimpleName = clazz.getSimpleName();  
  9.         Object[] objs = clazz.getSigners();  
  10.         //当前的线程  
  11.         Thread currentThread=Thread.currentThread();  
  12.         //当前的线程名称  
  13.         String threadName =currentThread .getName();  
  14.         StackTraceElement stackElement=currentThread.getStackTrace()[1];  
  15.         //当前的方法名  
  16.         String methodName=stackElement.getMethodName();  
  17.         //当前的文件名  
  18.         String filename=stackElement.getFileName();  
  19.         int lineNum=stackElement.getLineNumber();  
  20.         System.out.println("class name:\t\t" + className);  
  21.         System.out.println("class simple name:\t" + classSimpleName);  
  22.         System.out.println("thread name:\t\t" + threadName);  
  23.         System.out.println("method name:\t\t"+methodName);  
  24.         System.out.println("file name:\t\t"+filename);  
  25.         System.out.println("line number:\t\t"+lineNum);  
  26.         System.out.println("----------------------------------\n");  
  27.         System.out.println("objs:" + objs);  
  28.         if (objs != null) {  
  29.             for (int i = 0; i < objs.length; i++) {  
  30.                 Object object = objs[i];  
  31.                 System.out.println(object);  
  32.             }  
  33.         }  
  34.         return "success";  
  35.     }  
  36. }  
  37.   
  38. package com.jn.main;  
  39.   
  40. import com.jn.bean.Student;  
  41.   
  42. public class Main2 {  
  43.     public static void main(String[] args) {  
  44.         Student student=new Student();  
  45.         student.method2(1,null);  
  46.     }  
  47. }  

 运行结果

 

项目结构如下:

 

总结

(1)在实例方法中获取类名

Class clazz = this.getClass();//因为是实例方法,所以可以用this

String className = clazz.getCanonicalName();/* com.jn.bean.Student */

String classSimpleName = clazz.getSimpleName();

 

(2)获取方法名

//当前的线程

Thread currentThread=Thread.currentThread();

StackTraceElement stackElement=currentThread.getStackTrace()[1];

//当前的方法名

String methodName=stackElement.getMethodName();

 

(3)获取当前行数

//当前的线程

Thread currentThread=Thread.currentThread();

StackTraceElement stackElement=currentThread.getStackTrace()[1];

int lineNum=stackElement.getLineNumber();

相关文章
|
5月前
|
设计模式 算法 安全
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
117 1
|
5月前
|
C++
C++ 类的访问修饰符:深入解析
C++ 类的访问修饰符:深入解析
38 1
|
11月前
|
Java 编译器
【继承顺序和方式,子类构造方法,protected 关键字,final 关键字】
【继承顺序和方式,子类构造方法,protected 关键字,final 关键字】
41 0
|
XML Java Maven
可以让反射获取到方法参数实际的变量名设置
可以让反射获取到方法参数实际的变量名设置
153 0
|
Java C++
C++类中在构造器中调用本类的另外构造器
C++类中在构造器中调用本类的另外构造器
93 0
|
Java Spring
父类强制转换为子类的作用
父类强制转换为子类的作用
203 0
self,和类实例化加不加括号的理解
# class Dog(object): # def talk(self): # print('汪汪~~~') # print(self) # self就是对象,默认将对象传递到类方法,self不需要程序手动传递 # # erha = Dog() # talk是一个函数,是类里面的函数,只有对象能使用:对象名.
1143 0
父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办?
父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办? /* 父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办?   法1:子类的构造方法通过 super(...); 去显示调用父类的带参构造方法。
1162 0
|
移动开发
【Exception】查看异常出现在具体的文件名/类名/方法名/具体行号
今天在处理异常日志保存过程中,想要获取到异常抛出在具体在那个文件,哪个类下的哪个方法中的具体第几行,所以具体实现如下 try{ Integer adminID = Integer.
1324 0