跳转至

Java 变量类型⚓︎

约 752 个字 26 行代码 预计阅读时间 4 分钟

Java 语言支持的变量类型有:

  • 局部变量(Local Variables)
  • 成员变量或实例变量(Instance Variables)
  • 静态变量或类变量(Class Variables)
  • 参数变量(Parameters)

从 作用域、生命周期、初始化、声明、赋值、限制、内存管理、垃圾回收、重用、参数和返回值 十个维度讲解。

/*一个涵盖所有类型变量的程序*/
public class RunoobTest {
    // 成员变量
    private int instanceVar;
    // 静态变量
    private static int staticVar;

    public void method(int paramVar) {
        // 局部变量
        int localVar = 10;

        // 使用变量
        instanceVar = localVar;
        staticVar = paramVar;

        System.out.println("成员变量: " + instanceVar);
        System.out.println("静态变量: " + staticVar);
        System.out.println("参数变量: " + paramVar);
        System.out.println("局部变量: " + localVar);
    }

    public static void main(String[] args) {
        RunoobTest v = new RunoobTest();
        v.method(20);
    }
}

一个大致的表格

维度 静态变量 **成员变量 ** **局部变量 ** 参数变量
定义位置 类体内,有 static 关键字。 类体内,无 static 关键字。 方法体内、代码块内。 方法声明的括号内。
作用域 整个类。所有对象共享,可通过类名直接访问。 整个对象。每个对象拥有一份独立的拷贝。 仅在定义的方法/块内 有效。 仅在所属的方法体内 有效。
生命周期 随类加载而产生,随类卸载而消失(最长)。 随对象创建而产生,随对象被 GC 回收而消失。 方法被调用时创建,方法执行结束即销毁。 方法被调用时传入,方法执行结束即销毁。
内存分配 方法区 (Method Area) 堆 (Heap) 栈 (Stack) 栈 (Stack)
初始值 有默认初始值(如 int 为 0, boolean 为 false)。 有默认初始值 无默认值。必须在使用前手动初始化,否则报错。 调用方在传参时赋予初始值。
修改方式 类名.变量名 或 对象名.变量名。 对象名.变量名。 直接通过变量名赋值。 方法内部可直接赋值,但不影响方法外的原始变量(针对基本类型)。

局部变量⚓︎

  • 必须初始化,否则编译器会报错,因为 Java 不会为局部变量提供默认值。但是声明后不使用的话不会报错。
  • 内存管理:局部变量存储在 Java 虚拟机(JVM)的栈上,与存储在堆上的实例变量或对象不同。

成员变量⚓︎

声明:访问修饰符+变量类型+名称(+赋值)

  • 当一个对象被实例化之后,每个成员变量的值就跟着确定。可赋值更改
  • 每个对象都有一个相应变量,初始化时的值相同,后续可根据对象自身进行修改-无尽拷贝--> 内存劣势

类变量⚓︎

  • 在类中使用 static 关键字修饰变量,通常也称为类变量。
  • 无论创建多少个类实例,静态变量在内存中只有一份拷贝,被所有实例共享。<--> 内存优势!
  • 可以通过 类名 来访问静态变量,也可以通过 实例名 来访问静态变量。(指针一样的,改了就是全部都改掉),相当于快捷方式。
  • 常量 也是与类相关的,但它是用 final 关键字修饰的变量,一旦被赋值就不能再修改。静态变量可以是常量
  • static final---真常量
  • final---不可变的个人属性
  • 静态变量的线程安全性

总结⚓︎