JAVA中的static方法调用非static方法

转载 2012年03月21日 22:33:43

转自:http://blog.csdn.net/jc_njj/article/details/5102556

1、由JVM的执行机制决定了在static方法中是不能直接调用该类的其它非static方法的。

  因为类方法(static方法)执行的时候,其所在的堆栈中是没有指向对象的引用的任何信息的,而非static方法在调用的时候又必须要知道调用该方法的对象的引用。所以从这里可以看出,static方法中是没有办法直接调用非static方法的。

  从另外一方面来讲,static方法中是不存在this的,而this是一个很重要的指向对象的引用的关键字(每个非static方法中都应该存在的,并且指向了调用该方法的对象的引用;非static方法调用改类其他方法的时候实际上是用到了this.[Method])。所以没有this的static方法是不可能直接调用该类中的非static方法的。

 

2、static方法中可以通过创建(new)该类的引用或者在调用static方法的时候传递一个对象的引用过去,这两种方法来调用非static方法。

  典型的例子就是static void main()方法,在这个static方法中可以看到,会创建任意的实例,然后通过这些实例来调用所属类的非静态方法。

 

3、static方法是在编译的时候确定的,在类装入内存的时候也同时装入内存了。而非static方法是在类的实例化的时候装入内存的,其必须依赖于类的实例。

实例在装入堆栈的时候是会附加上指向method area(具体的可以参看JVM Specificationhttp://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html)的指针,所以可以在非静态方法中调用static方法。

 

相关文章推荐

JAVA中的static调用非static方法的几点注意

1、由JVM的执行机制决定了在static方法中是不能直接调用改类的其它非static方法的。   因为类方法(static方法)执行的时候,其所在的堆栈中是没有指向对象的引用的任何信息的,而非st...
  • jc_njj
  • jc_njj
  • 2009-12-30 00:47
  • 2176

面试题:是否可以从一个static方法内部发出对非static方法的调用?

* 问题:是否可以从一个static方法内部发出对非static方法的调用?  *  * 答:不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,  *         ...

静态方法中调用非静态方法

我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法。但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-s...

Java中常用的内存区域 及其 static 方法的调用

在Java中主要存在4块内存空间,这些内存空间的名称及作用如下。 (1)  栈内存空间: 保存所有的对象名称(更准确地说是保存了应用的堆内存空间的地址) (2)  堆内存空间: 保存每个对象的具体...

黑马程序员——Java基础——构造方法,static关键字,以及继承的详解

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 构造方法 构造方法作用概述                      ...

static方法内部是否可以发出对非static方法的调用?

非static方法是要与对象关联在一起的,必须创建一个对象之后才能

java中静态方法中调用非静态方法

我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法。但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-s...

Java static修饰方法

java静态代码块和静态方法的区别和调用顺序、static用法

今天突然有疑问Java类中静态方法和static代码块哪个先执行,所以查了下资料,以下是网上看到的比较详细的一篇博文,感谢博主。 原文链接:http://blog.sina.com.cn/s/blo...
  • zlxtk
  • zlxtk
  • 2017-01-18 10:17
  • 159
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)