成员变量和局部变量的区别

成员变量和局部变量的区别

1.成员变量可以被publicprotectprivatestatic等修饰符修饰,而局部变量不能被控制修饰符及static修饰;两者都可以定义成final

2.成员变量存储在堆,局部变量存储在栈

3.存在时间不同

4.成员变量有默认值,(被final修饰且没有static的必须显式赋值),局部变量不会自动赋值

-------------------------------------------------------------------------------------------------------------

顾名思意了

什么是局部,方法内部,块内部都是局部,执行指令退出那个局部,局部变量自动清除

 

比如方法中,不用说

块中

{

int i=0; //这是一个局部变量,它的作用范围就在其中 

}

 

成员变量就会涉及到谁的成员,类的成员?实例的成员?

 

class A{

int i=0; //实例的成员

static j=1;//类的成员

}

 

static 的差别,是否依赖于实例而存在

----------------------------------------------------------------------------------------------------------

成员变量:作为类的成员而存在,直接存在于类中。

局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。

局部变量在使用前必须被程序员主动的初始化,和此形成对比,系统中的成员变量则会被系统提供一个默认的初始值。所以在语法上,类的成员变量能够定义后直接使用,而局部变量在定义后先要赋初值,然后才能使用。

### Java 成员变量局部变量区别及用法 #### 一、定义作用域 成员变量是指在类中定义但在方法之外的变量,属于类的一部分。它们的作用域覆盖整个类,可以通过对象访问[^1]。 局部变量是在方法内部、构造函数或代码块中定义的变量,仅在其所在的范围内有效[^2]。 --- #### 二、内存分配生命周期 ##### 1. **成员变量** - 存储位置:堆内存。 - 生命周期:对于实例变量,其生命周期所属的对象一致;对于静态变量,则其所在类的加载时间相同,直到类被卸载为止[^4]。 ##### 2. **局部变量** - 存储位置:栈内存。 - 生命周期:从变量声明处开始,到方法、构造函数或代码块执行完毕时结束。每次进入该范围时,局部变量都会重新创建[^4]。 --- #### 三、默认值 ##### 1. **成员变量** - 编译器会自动为未初始化的成员变量赋予默认值: - 数值型(如 `int`, `double`)默认为 `0` 或 `0.0`。 - 引用类型(如 `String`, 自定义对象)默认为 `null`。 - 布尔型 (`boolean`) 默认为 `false`[^1]。 ##### 2. **局部变量** - 局部变量不会被编译器自动初始化,默认情况下没有任何初始值。因此,在使用前必须显式赋值[^3]。 --- #### 四、示例代码 以下是一个综合展示成员变量局部变量区别的代码示例: ```java public class VariableExample { // 成员变量 private String name; private int age; // 构造方法中的局部变量 public VariableExample(String name, int age) { this.name = name; // 对成员变量进行赋值 this.age = age; // 对成员变量进行赋值 int num3 = 20; // 栈中分配的局部变量 System.out.println("Constructor local variable: " + num3); } // 方法中的局部变量 public void methodA() { int num1 = 10; // 栈中分配的局部变量 String str = "Hello, world!"; // 栈中分配的局部变量 System.out.println("Method A local variables:"); System.out.println("num1: " + num1); System.out.println("str: " + str); // 打印成员变量 System.out.println("Member variables (name and age):"); System.out.println("Name: " + this.name); System.out.println("Age: " + this.age); } // 带参数的方法中的局部变量 public void methodB(int param) { // 参数也是局部变量 int sum = param + 10; // 栈中分配的局部变量 System.out.println("Sum of parameter and 10: " + sum); } public static void main(String[] args) { VariableExample example = new VariableExample("John Doe", 30); example.methodA(); example.methodB(5); // 调用带参数的方法 } } ``` 运行结果如下: ``` Constructor local variable: 20 Method A local variables: num1: 10 str: Hello, world! Member variables (name and age): Name: John Doe Age: 30 Sum of parameter and 10: 15 ``` --- #### 五、不同类型的变量在 JVM 中的存储方式 ##### 1. **基本类型** - 成员变量存放在堆内存中。 - 局部变量存放在栈内存中。 ##### 2. **引用类型** - 变量本身(即引用地址)仍然遵循上述规则:成员变量位于堆内存,局部变量位于栈内存。 - 实际对象则始终存储在堆内存中,无论它是通过成员变量还是局部变量引用的。 --- #### 六、总结 成员变量局部变量的主要区别在于作用域、生命周期、默认值以及存储位置等方面。合理区分两者的用途有助于编写更加高效且易于维护的代码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值