书本上上的回答:因为内存中是先有静态内容,再有非静态内容。
上面这个解释太抽象了。很难记得住,还是举个例子比较好。
新建一个类:Coder类
public class Coder {
/**
* 定义布尔型成员变量 "头秃"
* 定义静态成员变量 "职业"
*/
boolean 头秃;
static String 职业 = "写代码";
}
我们知道,程序员不一定都秃顶,但职业肯定是写代码。
所以 【头秃】 是非静态的,由具体对象决定;
【职业】是静态的,跟具体对象无关。
我们再定义一个静态成员方法 【介绍自己】。
public static void 介绍自己() {
if (头秃) {
System.out.println("我是一个秃顶程序员,我每天" + 职业);
} else {
System.out.println("我是一个有头发的程序员,我每天" + 职业);
}
}
很明显,这个静态方法逻辑上有错误:
我们知道,静态的成员方法是可以直接通过 【类.静态方法】 这种方式去调用的。
在这里,【头秃】是因人而异的,也就是说,是由具体对象决定的。
也就是说不能通过 【类.静态方法】 这种方法去得到结果。
================================================
退一万步讲,假设这个静态方法可以执行。
你让【头秃】这个变量在程序员这个类当中默认为true好还是false好?
如果默认为true,就是指程序员头都秃。。。
那可涉及职业歧视,是要被打死的。
所以还是别去贸然的得罪一个群体,看实际情况(个体)决定。
其实从这里我们也能跟明白内存先有静态内容,再有非静态内容的原因。
因为非静态都是跟具体某个对象相关,随意性比较大。
我们先把确定的搞定,再去解决不确定的。
也符合我们人类解决问题的规律。。。
还有一点注意:
静态方法中不能使用this。
this也是指具体的一个对象,跟上面情况一样。