职位关键字 工作地点
工作名称 公司名称 校园招聘
中国最好的工作搜索引擎!
  回复留言  
  java中的static不能引用非static成员方法
作者: pigwen521  01-01 08:00   回复  
 java中的static不能引用非static成员方法,我看到下面这程序有点不解,请高手指点下哟。(问题看程序的注释)说祥细点哟

class a

{

public void p()

...........

}

public class b

{

public static void main(String args[])

{

a p1=new a();

p1.p();//这个P()不就是非static成员方法吗?,不也被static // void main()这个static方法引用了吗?为什么这样运行程 //序是没有错的。

}

}

  回复:java中的static不能引用非static成员方法
作者: yxjiang  01-01 08:00   回复  
 public static void main(String args[])是程序的入口函数。



每一个程序执行的时候都对应一个虚拟机(你应该听说过虚拟机吧),虚拟机会首先找到类文件(class后缀,在这里就是a.class),然后虚拟机会对导入的class文件进行提取,得到其中的类型信息放入到方法区中(方法区暂时不用管,你就当成把这些信息成放到一个特定的地方),然后通过类的二进制文件找到这种main方法(就是最开始说到的那个)。



另外你说的那个其实不是static调用非static,因为在main方法中,你已经实例化了一个对象了,是通过对象调用的这个方法,而不是在static中直接调用的。



希望对你有帮助,你可以先看看Bruce Eckel的《Thinking in Java》,中英文都不错,有了一个大概的了解后,就可以继续看《深入Java虚拟机》,这样就有一个全面的对java的了解了,当然,如果要深刻理解,编程是少不了的。如果有精力,可以看看API的源代码,以及API附带的例子,都是很经典的。不过对于一般的开发来说也个就不是太必要了。

  回复:java中的static不能引用非static成员方法
作者: gegeta各各他  05-03 11:01   回复  
 lgexe - 试用期 一级答得也不错,学习中

  回复:java中的static不能引用非static成员方法
作者: 足球10号  05-03 11:01   回复  
  好像是不能吧

  回复:java中的static不能引用非static成员方法
作者: lonelybat  05-03 11:01   回复  
  p1是a的一个实力化对象,它当然可以去访问他自己的成员方法。这个非静态的p()方法并不是被main方法调用的。

  回复:java中的static不能引用非static成员方法
作者: lgexe  05-03 11:01   回复  
  ----------------------------------------

a p1=new a(); //声明定义对象p1。

p1.p();//执行对象p1的方法p()。

----------------------------------------

以上这些和楼主所说的不是一回事。

另外,执行一个方法,是执行一个对象的方法(非静态),如果这个对象实际存在就可以通过“对象.方法()”的形式来执行该方法。而静态方法是不需要对象存在的,相当于在java启动的时候就直接定义了一个能执行该静态方法的对象,要调用该静态方法,直接用“类名.静态方法名()”就可以执行。

就如果程序写成下面这样就是楼主所说的问题了:



----------------------------------------

public class b {

public static void x() {

p();//相当于this.p(),但x是静态方法,该方法被执行的时候,并没有任何b类型的对象被创建,编译器不知道你要执行哪个对象的p()。出错。

}

public void q() {

p(); //q()被执行的时候,相当于某个对象的q()被执行,此时该对象已经存在是前提条件,在方法中再调用该对象的另一方法p()是可以的。不会出错。

}

public void p() {

...........

}



}

标 题:
内 容:
用户名:
 游客
 
 
Copyright©2005-2007, 版权所有 WWW.JOBMET.COM
ICP证:京ICP备06019556号