局部变量与成员变量

局部变量

定义在方法中的变量
属于方法,在栈内存的方法的栈帧中。
随方法的调用而产生,随方法的结束而消失
没有默认的初始化值,必须手动赋值后,才能使用

测试代码

//正确写法
int a = 10;
System.out.println(a);

//错误写法
// int a;
// long a;
// char a;
long a;
System.out.println(a);

错误写法抛出异常

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        The local variable a may not have been initialized

成员变量

定义在中成员位置的变量(类中方法外)
属于对象,在堆内存的对象中
随对象的创建而产生,随对象的消失而消失。
有初始值

  • 基本数据类型
    • 整数类型:0
    • 小数类型:0.0
    • 布尔类型:false
    • 字符类型:'\u0000' (Unicode值, 控制台输出的是空格)
  • 引用数据类型:null

测试代码

class Test {
    // 基本数据类型
    int i;
    long l;
    byte b;
    char c;
    // 引用类型
    String s;
    int[] a;
    
    // 扩展,数组 new 之后,在堆中 int 类型自动初始化为 0 。
    int[] extend = new int[5];

    public void outPut(){
        System.out.println("int--" + i);
        System.out.println("long--" + l);
        System.out.println("byte--" + b);
        System.out.println("char--" + c + "占位专用");
        System.out.println("String--" + s + "占位专用");
        System.out.println("数组--" + a);
        System.out.println("数组 new 之后,堆中int类型初始化为0--" + Arrays.toString(a));
    }

}

测试输出

int--0
long--0
byte--0
char-- 占位专用
String--null占位专用
数组--null
数组 new 之后,堆中int类型初始化为0--[0, 0, 0, 0, 0]

你可能感兴趣的:(局部变量与成员变量)