java 图说 全局变量 成员变量 静态变量 实例变量 局部变量 的关系和区别
版权声明:Hi,屏幕前的猿你好,此篇博文中的内容如帮到你,请一定不能吝啬帮我点赞,评论,关注,帮我来个全套大保健呢!我愿与你一同成长变强,得到技术加持,祈愿! https://blog.****.net/ted_cs/article/details/82493443
lalala.大家好,我是佛系码农 Ted,一个和你一样渴望成为大牛的low级程序员!
刚入门java时,对这些个各种名称的变量名搞得晕头转向,而在网上搜资料呢,大家 讲的是东一块西一块,很不成体系,所以特别整理出我自己的东西,希望能帮到正在迷惑的其他猿们啊~~
直接上图,你就会恍然大悟了
例 1
public class Demo01 {
static int j=10;
public static void main(String[] args) {
int test = test();
System.out.println(test);
System.out.println(Demo01.j);
}
public static int test(){
Demo01.j=1;
System.out.println(j);
return j;
}
}
输出
1 1
2 1
3 1
分析
在调取test()方法后,对静态变量 j 重新赋值, 赋值后,跳出方法,打印 j 的值,发现已经更改
那是因为被static 修饰过的变量 ,存放在方法区中,一旦更改,原值就会被覆盖(不同成员变量,更改变量值后,不影响原值)
另外,今天有看到有个说,在静态方法中的变量也是静态变量. 这个说法是完全错误的.首先, 方法中的变量存在栈中,而静态变量申明在类中,方法外,变量值存在方法区中.
例 2
public class Demo01 {
int i=1;
}
public class Demoo2 {
public static void main(String[] args) {
Demo01 demo01 = new Demo01();
System.out.println(demo01);
Demo01 test = test(demo01);
System.out.println(demo01 );
}
public static Demo01 test(Demo01 demo01){
demo01.i=15;
return demo01;
}
执行结果
1 [email protected]
2 [email protected]
分析
当在test()方法中传入引用类型demo01时,相当于把new Demo01()在堆中的引用地址值给了它, 可以通过demo01. (点)调用类中的属性,对堆中共有的内存进行修改.
ps :当方法中传入引用类型时,堆中对象的引用地址值会指向(这里的指向并非真正意思上的指向,因为java淡化指针的概念,其实只将引用地址值给到了test()方法)多个对象
---------------------
作者:_大帅_
来源:****
原文:https://blog.****.net/ted_cs/article/details/82493443
版权声明:本文为博主原创文章,转载请附上博文链接!