成员变量:定义在类中的变量。
局部变量:定义在方法中的变量。

成员变量与局部变量的区别:

1、应用范围

成员变量在整个类中有效

局部变量只在其声明的方法中有效

2、生命周期

成员变量:它属于对象,它随着对象的创建而创建,随着对象的消失而消失

局部变量:使用完马上释放空间

看段代码

void show(int id){
        for (int i = 0; i < 10; i++) {         
           for (int j = 0; j < 10; j++) {
                System.out.println(id);
            }
        }
    }

这里的id,i,j都是在方法内声明的,因此都是局部变量

id在show方法被调用时它的生命周期开始,方法结束时id消失

j当里层for循环执行时生命周期开始,当里层for结束,j消失

3、存储位置

成员变量属于对象,它存储在堆内,堆内的实体,当没有引用指向其时,才被垃圾回收处理。

局部变量存在于栈内存中,当不在使用时,马上就会被释放。

4、初始值

成员变量它存储在堆中,如果没有赋初值,它有默认值

  • 整数byte,short,int,long = 0
  • char = ‘\u0000’
  • boolean = false
  • String = null
  • float,double = 0.0

局部变量要想使用必须手动初始化

注意事项:

局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

内存分析

class Car {
    //汽车应该具备的属性
    String color;
    //汽车具备的颜色
    int num;    
    //汽车跑的行为
    public void run(){
        System.out.println(color + "的车,轮胎数: " + num + "个,跑起来了");
    }
}

public class CarDemo {
    public static void main(String[] args) {
        //创建实体
        Car car = new Car();
        car.color = "red";
        car.num = 4;        
        //指挥车运行,调用格式:对象.对象成员
        car.run();
    }
}

java 局部变量 引用 java的局部变量和成员变量_局部变量


这里car其实是对象的引用,它存储的是一地址,这个地址指向了堆里的一块内存。这里的color和num都是成员变量,null和0是它们的默认值,”red”和4是赋给它们的初始值。

最后再来看个例子

class Variable {
    int a; //成员变量a,默认值是0

    public void test() {
        int b = 20;//局部变量b,没有默认值,需要初始化
        System.out.println(b);//20        
        int a = 50;//局部变量a,和成员变量a的名称相同
        System.out.println(a);//50
    }
} 
class VariableDemo {
    public static void main(String[] args) {
        Variable variable = new Variable();

        System.out.println(variable.a); //0,variable.a访问成员变量

        variable.test();//调用成员方法             
    }
}

代码执行结果:

java 局部变量 引用 java的局部变量和成员变量_java 局部变量 引用_02

今天就分享到这,后续会继续分享,敬请期待!