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方法。

 

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

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在 该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是 说,当一个static方法被调用...
  • z10z32
  • z10z32
  • 2017年03月15日 19:12
  • 842

是否可以从一个static方法内部调用一个非static方法?

不可以。因为非static方法属于某个对象,也叫实例方法,必须创建一个对象后,才可以调用该对象的该非static方法。 而static方法(静态方法)也叫类方法,属于某个类,可以直接通过类名调用,不...
  • weixin_36513603
  • weixin_36513603
  • 2017年01月03日 23:47
  • 307

Java不同类方法的调用以及static方法小解

虽然很基础,但我还是写一下. 定义两个类:TestMethod和TestMet,TestMethod内容如下: package test; public class TestMethod { ...
  • kururunga
  • kururunga
  • 2017年03月09日 11:12
  • 1310

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

* 问题:是否可以从一个static方法内部发出对非static方法的调用?  *  * 答:不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,  *         ...
  • u012110719
  • u012110719
  • 2015年06月03日 21:28
  • 8725

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

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

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

非static方法是要与对象关联在一起的,必须创建一个对象之后才能
  • u010139093
  • u010139093
  • 2014年04月30日 11:33
  • 1329

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

我们都知道,静态static方法中不能调用非静态non-static方法,准确地说是不能直接调用non-static方法。但是可以通过将一个对象的引用传入static方法中,再去调用该对象的non-s...
  • u010147215
  • u010147215
  • 2016年05月08日 16:53
  • 14468

Java中static方法和普通方法的区别

在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段。 注意:非静态方法既可以访问静态数据成...
  • qq_28511781
  • qq_28511781
  • 2017年05月08日 13:36
  • 5100

static三种用法

1.用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值,这个方法称为静态函数: private void s() { static int a=...
  • q277055799
  • q277055799
  • 2012年09月09日 14:30
  • 2197

java提高篇(六)-----关键字static

一、 static代表着什么        在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰...
  • chenssy
  • chenssy
  • 2013年10月24日 20:07
  • 8432
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中的static方法调用非static方法
举报原因:
原因补充:

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