谁能想,最近小年轻看起了java基础;废寝忘食,发现了薄弱的地方,也就是几乎全部都要忘了。
这一天,看到了成员变量和局部变量的区别;脑瓜子渗出油才想到 作用范围和 所处位置不同。
这一个看就是个不着四六,七上八下,九不全十不足的年轻人啊。
通过一番简单的学习,有更多的知识日后可以被忘记了。
首先,不能简单的分为局部变量和成员变量:
分两种情况来讨论:
其一:如果是基本类型 可以分为三个方面
1). 所处位置不同
成员变量在方法外,类内
局部变量在方法内
2).作用范围不同
成员变量作用于整个类内
局部变量作用于当前方法内
3).是否有默认值
成员变量是有默认值
局部变量没有默认值
其二:如果是引用类型变量,可以分为三个方面
1).在内存的位置不同
成员变量子堆中
局部变量在栈中
2).执行时间不同
成员变量从类创建到销毁
局部变量方法开始到结束
3).是否需要初始化
成员变量不需要,也不建议初始化,可以后面需要的时候赋值
局部变量需要且必须有初始值,否则调用的时候报错
看完以上六点的人 : 成功的把别人的知识又学习了一遍 恭喜恭喜
但是小年轻锐利的眼光终究发现了些许什么…
为什么成员变量不需要初始化,而局部变量却需要。(这个是java的规定)
注:无论是基本类型还是引用类型,局部变量没有默认值和必须初始化都说明需要给局部变量赋值。
经过长达很多秒的思考查询后,大胆和有些许依据的想法就此出现。
首先上升到思想层面:一定是为了节约资源
按照要求其实成员变量大部分写的是会再多个方法内都需要调用的变量,局部变量都是方法自己用的。
按照这个情况,当加载类的时候同时会再堆中给成员变量开辟空间,并且有很大的可能性一个成员变量占据的了一个位置但是多次被调用,这样就会实现多次的重复使用,资源浪费减少。
而局部变量会再单独需要的时候开辟栈,用完就结束。
如果不是这样,而是把局部变量同类一起加载,会出现一个变量占据资源却不发挥作用的情况,资源浪费。 这可是极大的不符合地球长久不爆炸的基本思想。
上面也许说明了为什么局部变量没有默认值,那为什么必须又初始值?
那就要考虑每一次调用一个方法,局部变量就会占据栈中的一个位置,即使多个局部变量可以占据同一个内存地址,但是不同的方法需要的初始值不同,
所以每一次调用都让jvm进行一次初始化,这不是浪费jvm吃饭时间嘛。性能下降 直接给一个值 大家蒂花之秀 ,你好我好大家好 多好啊
浪费资源就意味着性能的降低啊 ,,这个可是要花时间钱的。
看到这里的客官,恭喜再一次浪费时间看到了一个不是完全靠谱的知识。