首页 > Java > java教程 > 正文

Java静态动态的问题解决

黄舟
发布: 2017-09-19 11:42:18
原创
1906人浏览过

下面小编就为大家带来一篇详谈java静态动态的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Cannot make a static reference to the non-static field

静态方法中不能引用非静态成员变量及方法


class A {
  private int a = 1;

  public sttaic void main(String[] args){
    System.out.println(a);
  }
}
登录后复制

因为实例变量应该是具体对象的状态,应该先A a =  new A();然后System.out.println(a,a);

或者将变量改为static

立即学习Java免费学习笔记(深入)”;

No enclosing instance of type EventApp4 is accessible. Must qualify the allocation with an enclosing instance of type EventApp4 (e.g. x.new A() where x is an instance of EventApp4).

原因:内部类没有用static限定,所以是动态的,而我在main函数中new了这个内部类。为什么这样就出现问题了呢,因为静态的方法以及变量在类加载之时就已经进入内存了,但是非静态的方法和变量只能在实例化之后才会进入内存,所以在静态方法中new非静态的内部类就会出错,因为此时这个内部类还不存在呢。反之,在动态方法中new静态方法是不会出现错误的,原因同样,静态的在非静态的之前就已经存在了。

从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆内存中创建对象。所以说静态方法会随着类的加载而被加载。当你new一个对象时,该对象存在于对内存中,this关键字一般指该对象,但是如果没有new对象,而是通过类名调用该类的静态方法也可以。

遇到遇上问题时,有以下原则

1.在main中,使用静态方法静态变量静态类,即将变量、方法都限定为static

2.在main中,实例化本类或其他类(要使用的类)

3.将main中的语句放进构造函数中,在main中实例化本类,因为构造函数中可以使用本类的引用this

以上就是Java静态动态的问题解决的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号