static关键字

static关键字
static方法就是没有this的方法。
在static方法内部不能调用非静态方法,反过来是可以的。
而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。

Static变量在多次被调用时,其值不改变,这正是其区别于动态变量最大的区别和作用

开始是在了解static关键字
在《Java编程思想》P86页有这样一段话:
  “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
  这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是:
  方便在没有创建对象的情况下来进行调用(方法/变量)。
很显然,静态的出现是为了优化性能,毕竟不用new对象就可以直接调用方法,必然缩短运行时间;这是第一层;
那么,我在想,为什么static能达到这种效果?我们都知道,java程序的过程是,先编译再运行,先编译成class文件,再运行时加载入内存(也就是实例化),而我们都知道,static是最先加载入内存的,也就是说一个程序在运行时,最先为static开辟内存,那么,如果我们在静态方法中调用非静态方法,调用者先于被调用者,必然报错,所以,我们的问题也就得以解答了;
那么,我如果不调用静态方法和里面的非静态方法或变量,可以吗?答案显然是不行的,因为一个静态方法一定是最先加载入内存,也就是我们说的“实例化”(举例而已,千万千万别误会),那么如果静态方法里有非静态方法,理由同上,class文件都没加载,怎么new?
第三层:于是我联想到了main方法,我们都知道,psvm,但习以为常了都没注意到他其实也是个静态方法,于是我们最开始编程时候,其实写的都是静态程序咯;只不过main先加载,可能是设置了优先层级吧。。
此外,我曾经有个疑惑,就是我在一个项目里没有调用过的一个方法错了,结果其他类也无法编译运行,为啥??现在终于懂了,就是因为你在按下启动的一瞬间,其实ide为你做了两件事,编译-运行(还有个最前面的编码,在哪都行),只是太快没分开而已,然后,当你运行时,它必然是将整个项目编译运行,这样,看起来没调用的方法其实已经经历编译–实例化了,但您编译都出错,自然gg;

你可能感兴趣的:(static关键字)