为了账号安全,请及时绑定邮箱和手机立即绑定

为什么普通成员方法可以直接访问非静态变量,而静态方法不能直接访问非静态变量?

为什么普通成员方法可以直接访问非静态变量,而静态方法不能直接访问非静态变量?

放__空 2016-09-22 01:25:07
那岂不是没有非静态变量和静态变量之分了,非静态变量也能被同类中的所有方法访问?
查看完整描述

7 回答

?
若不极致便平庸

TA贡献1条经验 获得超1个赞

静态变量在类被调用的时候,它就已经存在了.地址名就是静态变量名(换句话说就是类已经帮你把它实例化好了,不用你再动手用对象去实例化了),所以普通成员方法(非静态方法)和静态方法都可直接访问调用静态变量.因为它已经创建好摆在那里了.然而非静态变量与静态变量不同的是它是虚无的,它需要对象去创建出来.所以没办法直接访问.那问题来了,说没办法直接访问,但为什么在普通成员方法中可以直接访问非静态变量呢?哈哈,你想一想,你如果想调用普通成员方法之前要干嘛?当然要new一个对象出来啊,这个new出来的对象就帮你在实例化方法的同时,把方法中的非静态变量也实例化了。(最后补充一句,被调用的类只是张图纸而已,不要把类当成程序)

查看完整回答
1 反对 回复 2016-10-07
  • 若不极致便平庸
    若不极致便平庸
    静态变量和非静态变量(成员变量)本质上的不同有两点:第一点,静态变量从类被调用之初它就在内存中找了一个位置住下了.而非静态变量还在类这张图纸上,虚无着,没在内存中找位置.只有当一个对象去调用它,它才会在内存中找一个位置住下. 第二点,静态变量在内存中的位置住下了,所有的对象调用他都是在同一个内存地址.所以当有一个对象改变静态变量值时,所有对象调用的静态变量的值都跟着变.而成员变量不同,因为它被一个对象调用就是一个新的不同的位置,A对象一个位置,B对象又是另一个位置,所以A只能改变A成员变量的值,B只能改变B成员变量的值,他们之间互不影响,因为位置不同.
?
大咪

TA贡献785条经验 获得超332个赞

正如1L所说,你得普通方法对象对应非静态变量的时候可以说是一对一,就是都是在这一个对象里,而静态方法去访问非静态变量就是一对多,因为静态方法是属于类的,那你这个类里可以有多个对象呀,那假如我访问的是我类中并没有实例化的对象(内存不存在的),那就会保存了呀……

查看完整回答
1 反对 回复 2016-09-22
  • 放__空
    放__空
    不懂,我的问题来源是看了java第二季的1-9 Java 中的 static 使用之静态方法的第1,2个知识点,
  • 大咪
    大咪
    要是刚学习的话是不太好理解,暂时就先当做概念记吧,要是记不住的话就可以先记住实例的定义方法,就是你说的1-9的那个例子,调用错了无非就是会报错呗。。。等以后学的多了再回来思考思考自然而然就懂了
  • 放__空
    放__空
    好吧,谢谢
点击展开后面1
?
weixin_慕桂英2009959

TA贡献1条经验 获得超0个赞

1.静态方法和静态变量在类初始化时已经分配内存,已经存在,因此随时可以调用。2.非静态方法和非静态变量在类初始化时不存在,只有类实例化成对象时才分配内存而存在。3.普通成员方法可以调用静态和非静态变量,调用静态原因看第一条;普通成员方法在调用非静态变量时,必须先满足实例化才能调用普通成员方法,一旦实例化,那非静态变量也就分配到内存了(原因看第二条)。所以系统不担心你在普通成员方法中调用非静态变量,因为你要用普通成员方法的前提就是实例化,实例化就满足了第二条规则。

查看完整回答
反对 回复 2019-04-12
?
别惹IT男

TA贡献2条经验 获得超1个赞



我同意一楼的答案

查看完整回答
反对 回复 2016-10-02
?
qq_昼绽_0

TA贡献82条经验 获得超17个赞

因为加载顺序,静态方法先加载,当然拿不到

查看完整回答
反对 回复 2016-09-22
?
7842659

TA贡献1条经验 获得超1个赞

我理解的是, 因为静态的 比 非静态的 先加载到内存,所以静态加载完了,非静态太的在加载, 静态的掉不到非静态的东西,因为非静态的还没有加载到内存

查看完整回答
1 反对 回复 2016-09-22
  • 若不极致便平庸
    若不极致便平庸
    额,你这个理解不对,不是静态比非静态先加载到内存,而是非静态的东西在没有对象调用他们之前根本不加载到内存。
?
ziom

TA贡献948条经验 获得超1109个赞

因为非静态成员属于对象,静态成员属于类。

查看完整回答
1 反对 回复 2016-09-22
  • 7 回答
  • 2 关注
  • 4016 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信