精华内容
下载资源
问答
  • 为什么可以通过类名调用静态方法?

    千次阅读 2018-05-03 21:00:21
    JVM加载类: 所有的类都是在对其第一次使用时,动态加载到JVM中的。当程序创建第一个类的静态成员的引用时,就会加载这个类,进而可以得到该类的类型信息,而类型信息可以在...为什么通过类名可以调用静态方法? ...

    JVM加载类:
    所有的类都是在对其第一次使用时,动态加载到JVM中的。当程序创建第一个类的静态成员的引用时,就会加载这个类,进而可以得到该类的类型信息,而类型信息可以在程序运行时发现和使用类型信息。这个证明构造器也是类的静态方法,即使在构造器之前并没有使用static关键字。因此,使用new操作符创建类的新对象也会被当做对类的静态成员的引用。

    为什么通过类名可以调用静态方法?
    静态变量在类的初始化一次后,系统就不会为该变量开辟新的内存空间。而每new一个类的对象,系统就会重新在堆内存中开辟一个新空间来存放该类的实例对象,并且栈中也会有一个新的引用变量去指向它。 静态方法也是类似,但是有一点要强调,静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象先加载进内存,而这个时候可能其它的非静态方法或者变量还没有被加载进来。

    展开全文
  • 主要介绍了JAVA 开发之用静态方法返回类名的实例详解的相关资料,这里主要说明使用异常来得到类名,希望能帮助到大家,需要的朋友可以参考下
  • 静态方法不与特定实例关联,不能引用this,要得到当前类名,没有直接的办法。 通过查资料和试验,可以用下面几种方式: 1 public static void testGetClassName() 2 { 3 // 方法1:通过SecurityManager的...

    静态方法不与特定实例关联,不能引用this,要得到当前类名,没有直接的办法。
    通过查资料和试验,可以用下面几种方式:

    复制代码
     1  public static void testGetClassName()
     2      {
     3          // 方法1:通过SecurityManager的保护方法getClassContext()
     4          String clazzName = new SecurityManager()
     5          {
     6              public String getClassName()
     7              {
     8                  return getClassContext()[1].getName();
     9              }
    10          }.getClassName();
    11          System.out.println(clazzName);
    12          // 方法2:通过Throwable的方法getStackTrace()
    13          String clazzName2 = new Throwable().getStackTrace()[1].getClassName();
    14          System.out.println(clazzName2);
    15          // 方法3:通过分析匿名类名称()
    16          String clazzName3 = new Object()    {
    17              public String getClassName()
    18              {
    19                  String clazzName = this.getClass().getName();
    20                  return clazzName.substring(0, clazzName.lastIndexOf('$'));
    21              }
    22          }.getClassName();
    23          System.out.println(clazzName3);
    24      }
    复制代码

    分别调用10万次,
        方法1:219ms
        方法2:953ms
        方法3:31ms
    比较:
        1)方法1不知有没有什么使用限制?
        2)方法2通过异常机制获取调用栈,性能最差,但能提供其它方法所不具有的功能,还可以获取方法名,行号等等;但这么使用多少有点不太常规;
        3)方法3只是简单分析了一下匿名类的名称,显然要简单多,事实上性能也是最高的;

    转载:http://blog.csdn.net/liuwyong11/article/details/5347343

    展开全文
  • Java代码获取当前类名方法

    千次阅读 2018-12-20 08:38:21
    静态方法:this.getClass().getName(); 静态方法:Thread.currentThread().getStackTrace()[1].getClassName(); private static void getString() { Thread thread = Thread.currentThread(); // 获取当前线程 ...

    1、获取类名

    1. 非静态方法:this.getClass().getName();
    2. 静态方法:Thread.currentThread().getStackTrace()[1].getClassName();
    private static void getString() {
            Thread thread = Thread.currentThread(); // 获取当前线程
    
            StackTraceElement[] trace = thread.getStackTrace(); // 获取当前线程的栈快照(入栈方法的数据)
            String methodName = trace[1].getClassName(); // 获取当前方法所在的类名
        }

     

    2、获取当前执行的方法名

    private static void getString() {
            Thread thread = Thread.currentThread(); // 获取当前线程
    
            StackTraceElement[] trace = thread.getStackTrace(); // 获取当前线程的栈快照(入栈方法的数据)
    
            System.out.println(trace[1].getFileName()); // 获取当前方法的文件名
            System.out.println(trace[1].getLineNumber()); // 获取当前方法的行号
            System.out.println(trace[1].getMethodName()); // 获取当前方法的名称
        }

     

    1. Thread.currentThread():获取当前正在执行的线程对象
    2. Thread.currentThread().getStackTrace():获取当前线程栈空间的快照(一个数组,包含所有当前时刻所有入栈执行的方法信息)
       

     

     

     

    展开全文
  • 在java静态方法中获取当前类名

    千次阅读 2016-03-07 21:57:56
    生成日志或调试消息时,通常希望包含当前类名,如 ...此时,getClass调用的是this.getClass(),但静态方法中没有this,所以应该使用 new Object(){}.getClass.getEnclosingClass(); 这里,new Object

    生成日志或调试消息时,通常希望包含当前类名,如

    System.out.println(“something awful happened in “+getClass());

    此时,getClass调用的是this.getClass(),但静态方法中没有this,所以应该使用

    new Object(){}.getClass.getEnclosingClass();

    这里,new Object()会建立一个Object的匿名子类的一个匿名对象,getEnclosingClass则得到其外围类,即包含这个静态方法的类。

    展开全文
  • java中快速获取当前类名方法

    千次阅读 2019-06-19 20:28:24
    Java获取当前类名的两种方法 适用于非静态方法:this.getClass().getName() 适用于静态方法:Thread.currentThread().getStackTrace()[1].getClassName()
  • java中用静态方法返回类名

    千次阅读 2007-05-25 13:39:00
    54powerman最初碰到这个问题,首先想到的是getClass()方法,如下尝试:public static String getClassName(){...//静态方法中不可访问变量 this return className;}结果失败。偶然发现有人利用异常处理可以获得,真是
  • 在一个类A中,如果要得到类名,可以用this.getClass().getSimpleName(),但如果在其它类B中,想得到类A的名称,得在A类中得到类名然后再传值给B,这样在类A中就得增加一些代码,但在使用testng时,测试类中不需要...
  • System.Diagnostics.StackTracest=newSystem.Diagnostics.StackTrace(); stringname=st.GetFrame(1)....在静态函数中可以用此名称作为事件的发送者 如: DxMessageHelper.DxSendMessage(callName,getTaskMsg); ...
  • 静态方法中获取当前类/类名

    千次阅读 2012-07-16 13:39:01
    class { public static void main(String[] args) { System.out.println(getClassForStatic().getName()); System.out.println... * 利用匿名类在静态方法中获取当前类,弥补静态方法中不
  • 静态方法不与特定实例关联,不能引用this,要得到当前类名,没有直接的办法。 通过查资料和试验,可以用下面几种方式: 1 public static void testGetClassName() 2 { 3 // 方法1:通过SecurityManager的...
  • java中在静态方法中动态获取当前类的类名或者动态获取当前类的类名付给一个静态变量,典型的列子就是在使用logger记录日志的时候,我们需要将需要log的类的类名固定的写出来,例如:  protected static final ...
  • Java中获取当前类名方法名等

    千次阅读 2014-08-28 17:46:37
    方法一:
  • //非静态方法中获取类名  string className2 = MethodBase.GetCurrentMethod().ReflectedType.FullName;//静态方法中的获取类名  Console.WriteLine("3:__;类名"+className1+"_"+ className2);  return "3:__...
  • 静态方法里,怎么能得到调用者的类名? 比如我有一个静态方法: public class myClass { public void fun() { xhelper.helpM(); } } public class xhelper { public static void helpM() { ...
  • 通常在打印日志的时候需要输出类名,普通类可以用this.getClass(),但是静态类没有this,直接写类名耦合度高。 参考了: ... 最有价值的回答: ...So, we have a situati...
  • 在 JAVA 程序有时需要获取当前代码位置, 于是就利用 Thread.currentThread().getStackTrace() 写了下面这个工具类, 用来获取当前执行位置处代码的文件名/类名/方法名/行号. 当然通过 new Throwable().getStackTrace...
  • 面相对象程序设计中,类...静态方法可以由类名或对象名进行调用。python staticmethod and classmethodThough classmethod and staticmethod are quite similar, there's a slight difference in usage for both ...
  • 原文在这里! 使用static修饰的静态方法是属于整个类的...在引用静态方法时,可以使用对象名加前缀,也可以使用类名加前缀。eg. classA 实例化了一个对象objectA, classA中定义了一个静态方法:run( ). 则可使用 clas
  • public class Test2 {  public static void main(String[] args) {  Test.show();//ddd  } } public abstract class Test { ...可以这样理解:抽象类中除了可以在类中定义抽象方法外和普通类毫无区别.  
  • 使用static修饰的静态方法是属于整个类的类...在引用静态方法时,可以使用对象名加前缀,也可以使用类名加前缀。eg. classA 实例化了一个对象objectA, classA中定义了一个静态方法:run( ). 则可使用 classA.run

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,594
精华内容 49,037
关键字:

获得类名静态方法