谁跟我说说 this 引用 调用 自己的静态方法有啥问题? 说明白了,200分奉上,还是这样调和className.静态方法 在编译器和JVM看来是完全一样的。没有任何的效率上的问题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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的,这样调用起来就方法,但也要考虑不用太多,毕竟静态的常驻内常,会一直占用资源,而对象用过后可以被回收掉。 效率上确实没有任何差异。我认为问题主要是容易误导别人,也就是说后来接手维护的人,看到this往往第一反应是普通成员函数,而非静态函数。那么他可能会认为该函数仅作用于当前对象,但实际上该函数可能是对这个类产生更广泛层面的影响。 一样的首先,在一个类内部,this.xxx()调用方法可以去掉this,即相当于xxx()调用如果xxx是static的,那就是调用static方法,是非static的,就调用非static方法所以this有无并没有关系,同样的一个类内部,调用静态方法,类名有无也没关系3L已经给出javap编译成为指令的代码比较,可以看出没区别既然在同一个类内部,this或类名,省略与否因个人编程喜好而定(当然某种情况下是不能省),编译器是不会因这些喜好而编译结果不同的,那样的话,对于编程者来说就失去了一定的自由,因为必须按照编译器的喜好去变成而不是按个人喜好编程了。 看着不爽 容易歧义 (理论上的) 我偶尔也写this的 宝哥 说的很清楚了,this 这个东西用起来,只是个人的习惯,当然有的地方不能省……至于性能上,个人觉得没什么区别 this相当于一个对象,在一个类内部,constructor构造方法构造了一个对象,this.staticMethod()相当于调用,而静态方法可以直接用className.staticMethod()调用,所以两个都可以。 从友好的角度讲静态方法属于整个类,而不某个具体的实例(this) 关于IP组播客户端运行总是卡死的问题,各位大神帮帮忙!急! JTree问题 急!急! Socket 怎么send 一个大于127的byte 方法覆盖的一个小疑点 JPanel上面的键盘事件监听 多线程与异常 一直困扰的一个问题:关于解析html网页的问题 解析出其中的时间 请教:InputStream.read(byte[])中,参数为字节数组,可以不定义成固定长度吗? JB7的使用 请教关于读TXT档 抓字串 计算次数 写出TXT档 谁有JDBC访问MDB的第三方jar开发包,完整版的。高分重谢
和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的,这样调用起来就方法,但也要考虑不用太多,毕竟静态的常驻内常,会一直占用资源,而对象用过后可以被回收掉。
效率上确实没有任何差异。我认为问题主要是容易误导别人,也就是说后来接手维护的人,看到this往往第一反应是普通成员函数,而非静态函数。那么他可能会认为该函数仅作用于当前对象,但实际上该函数可能是对这个类产生更广泛层面的影响。
首先,在一个类内部,this.xxx()调用方法可以去掉this,即相当于xxx()调用
如果xxx是static的,那就是调用static方法,是非static的,就调用非static方法
所以this有无并没有关系,同样的一个类内部,调用静态方法,类名有无也没关系
3L已经给出javap编译成为指令的代码比较,可以看出没区别
既然在同一个类内部,this或类名,省略与否因个人编程喜好而定(当然某种情况下是不能省),编译器是不会因这些喜好而编译结果不同的,那样的话,对于编程者来说就失去了一定的自由,因为必须按照编译器的喜好去变成而不是按个人喜好编程了。