【第22期】观点:IT 行业加班,到底有没有价值?

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方法是要与对象关联在一起的,必须创建一个对象后,  *         ...

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

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

利用Spring的ApplicationEvent执行自定义方法

在Spring中已经定义了五个标准事件,分别介绍如下:  1)ContextRefreshedEvent:当ApplicationContext初始化或者刷新时触发该事件。  2)ContextC...

Java设计模式之单例模式

Java单例模式是一种常见且较为简单的设计模式。单例模式,顾名思义一个类仅能有一个实例,并且向整个系统提供这一个实例。 单例模式的特点: 单例类仅能有一个实例单例类必须为自己创建实例单例类必须向外...

Java中遍历数组的三种方式复习

1 for循环遍历 通常遍历数组都是使用for循环来实现。遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。 程序示例: package captai...

Java中创建线程的两种方式及线程的状态复习

1 多线程概述 Java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发执行,这种机制被称为多线程。一个线程是进程中的执行流程,一个进程中可以同时包括多个线...

java中static{}语句块详解

原文地址:http://blog.csdn.net/lubiaopan/article/details/4802430     感谢原作者! static{}(即static块),会...

java 调用静态方法和实例(对象)方法的区别

静态方法和实例(对象)方法的区别主要体现在两个方面:   区别1: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是...

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

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

Java的static方法为什么不允许直接使用非static的变量

在学习java时我们都知道: 1. 非静态方法可以访问类中非static和static的变量         2.静态方法只能直接访问静态变量 例如: public class Test ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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