说明白了,200分奉上,还是这样调和className.静态方法 在编译器和JVM看来是完全一样的。
没有任何的效率上的问题。

解决方案 »

  1.   

    obj.staticMethod()
    和Class.staticMethod()本质上是一样的,编译器编译后也是一模一样的
      

  2.   

    楼上的兄弟,这方面有什么官方文档或者书籍能参考下吗?
    我知道C++ 对于静态方法的识别,但是对Java这玩意,没做那么深的研究。
      

  3.   


    class A{

    static void f(){

    }

    void ff(){
    A a = null;
    this.f();
    A.f();
    a.f();
    }
    }此代码编译后,再用javap查看字节码  void ff();
        Code:
           0: aconst_null   
           1: astore_1      
           2: invokestatic  #16                 // Method f:()V
           5: invokestatic  #16                 // Method f:()V
           8: invokestatic  #16                 // Method f:()V
          11: return        
    3句不同的语句,分别通过this,通过类,通过null来调用,结果一模一样
      

  4.   

    调用的结果是都一样了,都完成相同的功能。
    但是能过类.静态方法不需要创建对象,JVM只需要把class加载进来就可以。能过对象.静态方法肯定要创建对象。
    如果多次调用,就要多次创建对象;用类.静态方法就都不需要创建对象了。
    一些公用的方法可以写成static的,这样调用起来就方法,但也要考虑不用太多,毕竟静态的常驻内常,会一直占用资源,而对象用过后可以被回收掉。
      

  5.   


    效率上确实没有任何差异。我认为问题主要是容易误导别人,也就是说后来接手维护的人,看到this往往第一反应是普通成员函数,而非静态函数。那么他可能会认为该函数仅作用于当前对象,但实际上该函数可能是对这个类产生更广泛层面的影响。
      

  6.   

    一样的
    首先,在一个类内部,this.xxx()调用方法可以去掉this,即相当于xxx()调用
    如果xxx是static的,那就是调用static方法,是非static的,就调用非static方法
    所以this有无并没有关系,同样的一个类内部,调用静态方法,类名有无也没关系
    3L已经给出javap编译成为指令的代码比较,可以看出没区别
    既然在同一个类内部,this或类名,省略与否因个人编程喜好而定(当然某种情况下是不能省),编译器是不会因这些喜好而编译结果不同的,那样的话,对于编程者来说就失去了一定的自由,因为必须按照编译器的喜好去变成而不是按个人喜好编程了。
      

  7.   

    看着不爽 容易歧义 (理论上的) 我偶尔也写this的
      

  8.   

    宝哥 说的很清楚了,this  这个东西用起来,只是个人的习惯,当然有的地方不能省……至于性能上,个人觉得没什么区别
      

  9.   

    this相当于一个对象,在一个类内部,constructor构造方法构造了一个对象,this.staticMethod()相当于调用,而静态方法可以直接用className.staticMethod()调用,所以两个都可以。
      

  10.   

    从友好的角度讲静态方法属于整个类,而不某个具体的实例(this)