当前位置:网站首页>【成员变量和局部变量】
【成员变量和局部变量】
2022-04-22 06:20:00 【Vi---Rum】
-
成员变量 在类中定义,用来描述对象将要有什么
-
局部变量 在类的方法中定义,在方法中临时保存数据
-
同名变量不同
“在同一个方法中,不允许有同名的局部变量”
“在不同的方法中,可以有同名的局部变量” -
成员变量和局部变量的区别
1)作用域不同
“局部变量的作用域仅限于定义它的方法”
“成员变量的作用域在整个类内部都是可见的”
2)初始值不同
“成员变量有默认的初始值”
“局部变量没有默认的初始值,必须自行设定初始值”
3)存储位置不同
“成员变量是在对象创建以后存在于堆中,对象回收时,成员变量消失”
“局部变量是在方法被调用时存在于栈中,方法调执行结束,从栈中清除”
4)生命周期不同
“对象的创建而创建,对象回收时,成员变量消失”
“随着方法的调用被创建,方法执行结束,从栈中清除”
public class Variable {
/** * 成员变量 */
public int count;
public int x;
public static int y;
public void fun01() {
int a = 10;
System.out.println("fun01()中a的值 >>> " + a);
}
public void fun02() {
int a = 20;
System.out.println("fun02()中a的值 >>> " + a);
}
public void fun03() {
int a = 30;
int b;
System.out.println("fun03()中a的值 >>> " + a);
// The local variable b may not have been initialized
// java: 可能尚未初始化变量b
// 局部变量 如果被调用初始化
// System.out.println("fun03()中b的值 >>> " + b);
}
public void fun04() {
System.out.println("成员变量count的值 >>> " + count);
}
public void fun05() {
System.out.println("成员变量count的值 >>> " + count++);
}
public void fun06() {
System.out.println("成员变量count的值 >>> " + ++count);
}
public void fun07(){
System.out.println("非静态成员变量x的值 >>> " + ++x);
System.out.println("静态成员变量y的值 >>> " + ++y);
}
}
public class VariableTest {
@Test
public void test01(){
Variable variable = new Variable();
// fun01()中a的值 >>> 10
variable.fun01();
// fun02()中a的值 >>> 20
variable.fun02();
// fun03()中a的值 >>> 30
variable.fun03();
// 成员变量count的值 >>> 0
variable.fun04();
// 成员变量count的值 >>> 0
variable.fun05();
// 成员变量count的值 >>> 2
variable.fun06();
}
@Test
public void test02(){
Variable variable = new Variable();
// 成员变量count的值 >>> 1
variable.fun06();
// 成员变量count的值 >>> 2
variable.fun06();
}
@Test
public void test03(){
Variable variable01 = new Variable();
Variable variable02 = new Variable();
// 成员变量count的值 >>> 1
variable01.fun06();
// 成员变量count的值 >>> 2
variable01.fun06();
// 成员变量count的值 >>> 1
variable02.fun06();
}
@Test
//重点:可能不好理解,多运行几遍,试试Debug看看过程
//注意:非静态成员变量只能在对象的内部共享数据
// 静态成员变量可以在多个对象之间共享数据
public void test04(){
Variable variable01 = new Variable();
Variable variable02 = new Variable();
// 非静态成员变量x的值 >>> 1
// 静态成员变量y的值 >>> 1
variable01.fun07();
// 非静态成员变量x的值 >>> 1
// 静态成员变量y的值 >>> 2
//为什么y的值输出是二呢
//因为静态y的初始值在另外的区域进行赋值,并且可以进行多个对象赋值,刚刚01进行++y,等于1了,因此这次在调用的时候就是1++,因此是2
variable02.fun07();
// 下面的非静态x值为什么是2呢,因为同一个对象调用了两次
// 非静态成员变量x的值 >>> 2
// 静态成员变量y的值 >>> 3
variable01.fun07();
// 非静态成员变量x的值 >>> 2
// 静态成员变量y的值 >>> 4
variable02.fun07();
}
}
版权声明
本文为[Vi---Rum]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_54371657/article/details/124304473
边栏推荐
猜你喜欢

Definition and difference between rewriting and overloading

B. Ball Dropping (简单几何计算 / 相似三角形) (2021牛客暑期多校训练营1)

The system log file is too large

Detailed explanation of linked list

APC(三)

并发编程的艺术(4):浅谈wait/notify、park/unpark的使用和原理

The way to learn the strongest operator (detailed explanation of C language)

HDU Ice_ Cream's world I

L2-004 is this a binary search tree? (first order input & judgment search Binary Tree & second order output)

Cache hit rate of sequential table
随机推荐
使用使用使用
三栏布局(中间定宽两边自适应 和 两边定宽中间自适应)
Bidirectional circular linked list (see details)
强网杯 2019 随便注
Pointer structure const summary
Dom 文档对象模型
系统日志收集系列
The best way to learn
1232. Minimum number of arrows for exploding balloons
VAD 虚拟内存
Instructions and examples of instanceof
Codeforces Round #780 (Div. 3)
H.Happy Number (进制转换/第n个特殊数)(2021牛客暑期多校训练营9 )
Like fuzzy query of Android room database
Redis的设计与实现(1):了解数据结构与对象
189. Rotation array
Recursive reverse linked list
并发编程的艺术(5):ReentrantLock的使用
并发编程的艺术(4):浅谈wait/notify、park/unpark的使用和原理
Art de la programmation simultanée (9): utilisation finale et principes