19 轻松一点理解静态成员方法不能访问非静态成员变量

书本上上的回答:因为内存中是先有静态内容,再有非静态内容。

上面这个解释太抽象了。很难记得住,还是举个例子比较好。

新建一个类:Coder类

public class Coder {
    /**
     * 定义布尔型成员变量 "头秃"
     * 定义静态成员变量 "职业"
     */
    boolean 头秃;
    static String 职业 = "写代码";
}

我们知道,程序员不一定都秃顶,但职业肯定是写代码。

所以 【头秃】 是非静态的,由具体对象决定;
【职业】是静态的,跟具体对象无关。

我们再定义一个静态成员方法 【介绍自己】。

    public static void 介绍自己() {
        if (头秃) {
            System.out.println("我是一个秃顶程序员,我每天" + 职业);
        } else {
            System.out.println("我是一个有头发的程序员,我每天" + 职业);
        }
    }

很明显,这个静态方法逻辑上有错误:

我们知道,静态的成员方法是可以直接通过 【类.静态方法】 这种方式去调用的。
在这里,【头秃】是因人而异的,也就是说,是由具体对象决定的。
也就是说不能通过 【类.静态方法】 这种方法去得到结果。
================================================
退一万步讲,假设这个静态方法可以执行。
你让【头秃】这个变量在程序员这个类当中默认为true好还是false好?
如果默认为true,就是指程序员头都秃。。。
那可涉及职业歧视,是要被打死的。
所以还是别去贸然的得罪一个群体,看实际情况(个体)决定。

其实从这里我们也能跟明白内存先有静态内容,再有非静态内容的原因。
因为非静态都是跟具体某个对象相关,随意性比较大。
我们先把确定的搞定,再去解决不确定的。
也符合我们人类解决问题的规律。。。

还有一点注意:
静态方法中不能使用this。
this也是指具体的一个对象,跟上面情况一样。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值