• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
不一样的→妳
博客园    首页    新随笔    联系   管理    订阅  订阅

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

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

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 Specification http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html)的指针,所以可以在非静态方法中调用static方法。

 

 

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

posted @ 2017-12-07 08:29  不一样的→妳  阅读(191)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3