前言
变量是内存当中存储数据最基本的单元,将数据(字面量)放到内存当中,给这块内存空间起一个名字,这就是变量。
变量就是内存当中的一块空间,这块空间有名字、有类型、有值,这也是变量必须具备的三要素。
一、java中变量分类
java中的变量可分为三类:局部变量、静态变量、实例变量。
首先,变量根据声明的位置不同可以分为:局部变量和成员变量。在方法体当中声明的变量以及方法的每一个参数都是局部变量。在方法体外,类体内声明的变量称为成员变量,成员变量声明时如果使用 static 关键字修饰的为静态成员变量(简称静态变量),如果没有 static 关键字修饰则称为实例成员变量(简称实例变量)
示例:
public class VarTest {
int x1; // 实例变量,声明时可以不用赋值,有默认值
int x2 = 10; // 实例变量
static int y1 = 20; // 静态变量,声明时可以不用赋值,有默认值
static int y2 = 20; // 静态变量
public static void sum(int a, int b){ // 局部变量 a 和 b
int num = 100; // 局部变量,声明时必须赋值
}
}
二、三者的区别与联系
1.静态变量、实例变量、局部变量区别
静态变量:成员变量的一种,定义在类中方法外,用static修饰,在JVM中属于方法区,声明时有默认的初始化值。
实例变量:成员变量的一种,定义在类中方法外,在JVM中属于方堆中,声明时有默认的初始化值。
局部变量:定义在类中方法中,在JVM中属于栈中,声明时没有默认的初始值,初始化时必须手动赋值。
2.成员变量的两种细分类型的区别
静态变量和局部变量都属于成员变量,那么如何选择合适的类型呢?下面就来谈一下这两者的区别和使用方法。
静态变量,顾名思义就是静止不变的变量,在对象中对于同一个成员变量的数值都一样时,例如定义一个中国人类,每个人的国籍都是中国,就没必要每一个对象中存一份,这样就可以把数据抽离出来将其用静态变量表示,用static修饰。
调用方式:
实例变量只能通过对象名调用,静态变量可以使用类名调用,也可以使用对象名调用,但是不推荐使用对象名调用。
如下(示例):
public class Chinese{
String name;//每个人名字不同
int age;//每个人的年龄也不同
static String nationality = "Chinese";//每个人的国籍相同
Chinese(String name,int age){
this.name = name;
this.age = age;
}
}
public class Test{
Chinese xiaofang = new Chinese("小芳",18);
String name = xiaofang.name;
String age= xiaofang.age;
String nationality = xiaofang.nationality;//不推荐这样写
String nationality = Chinese.nationality;
}
总结
变量在使用过程中还需注意以下几点:
定义同名问题:
同一个域中局部变量不能定义为相同的名字,会报错;
同一个域中成员变量也不能定义为相同的名字,会报错
局部变量和成员变量定义的名字可以相同,使用过程中遵循就近原则;
作用域问题
变量的有效范围以大括号为标准,在定义的大括号范围内有效,出了大括号就不认识了。