当前位置:编程学习 > JAVA >>

谁跟我说说 this 引用 调用 自己的静态方法有啥问题?

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

本质上是一样的,编译器编译后也是一模一样的 --------------------编程问答-------------------- 楼上的兄弟,这方面有什么官方文档或者书籍能参考下吗?
我知道C++ 对于静态方法的识别,但是对Java这玩意,没做那么深的研究。 --------------------编程问答--------------------

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来调用,结果一模一样 --------------------编程问答-------------------- 调用的结果是都一样了,都完成相同的功能。
但是能过类.静态方法不需要创建对象,JVM只需要把class加载进来就可以。能过对象.静态方法肯定要创建对象。
如果多次调用,就要多次创建对象;用类.静态方法就都不需要创建对象了。
一些公用的方法可以写成static的,这样调用起来就方法,但也要考虑不用太多,毕竟静态的常驻内常,会一直占用资源,而对象用过后可以被回收掉。 --------------------编程问答--------------------
引用楼主  的回复:
说明白了,200分奉上,还是这样调和className.静态方法 在编译器和JVM看来是完全一样的。
没有任何的效率上的问题。


效率上确实没有任何差异。

我认为问题主要是容易误导别人,也就是说后来接手维护的人,看到this往往第一反应是普通成员函数,而非静态函数。那么他可能会认为该函数仅作用于当前对象,但实际上该函数可能是对这个类产生更广泛层面的影响。 --------------------编程问答-------------------- 一样的
首先,在一个类内部,this.xxx()调用方法可以去掉this,即相当于xxx()调用
如果xxx是static的,那就是调用static方法,是非static的,就调用非static方法
所以this有无并没有关系,同样的一个类内部,调用静态方法,类名有无也没关系
3L已经给出javap编译成为指令的代码比较,可以看出没区别
既然在同一个类内部,this或类名,省略与否因个人编程喜好而定(当然某种情况下是不能省),编译器是不会因这些喜好而编译结果不同的,那样的话,对于编程者来说就失去了一定的自由,因为必须按照编译器的喜好去变成而不是按个人喜好编程了。
--------------------编程问答--------------------
引用 3 楼  的回复:
Java code

class A{
    
    static void f(){
        
    }
    
    void ff(){
        A a = null;
        this.f();
        A.f();
        a.f();
    }
}


此代码编译后,再用javap查看字节码
Java code

  voi……


3楼已经说的很详细了。 --------------------编程问答-------------------- 看着不爽 容易歧义 (理论上的) 我偶尔也写this的 --------------------编程问答-------------------- 不懂,关注: --------------------编程问答--------------------
引用 6 楼  的回复:
一样的
首先,在一个类内部,this.xxx()调用方法可以去掉this,即相当于xxx()调用
如果xxx是static的,那就是调用static方法,是非static的,就调用非static方法
所以this有无并没有关系,同样的一个类内部,调用静态方法,类名有无也没关系
3L已经给出javap编译成为指令的代码比较,可以看出没区别
既然在同一个类内部,this或类名,省略与否因个……
宝哥 说的很清楚了,this  这个东西用起来,只是个人的习惯,当然有的地方不能省……至于性能上,个人觉得没什么区别 --------------------编程问答-------------------- this相当于一个对象,在一个类内部,constructor构造方法构造了一个对象,this.staticMethod()相当于调用,而静态方法可以直接用className.staticMethod()调用,所以两个都可以。 --------------------编程问答-------------------- 一样一样的~~~~~~

除非有特殊需求 --------------------编程问答-------------------- 好像都行,不过一般都建议用类名点 --------------------编程问答-------------------- --------------------编程问答-------------------- 从友好的角度讲

静态方法属于整个类,而不某个具体的实例(this)
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,