java中变量的本质和分类
java变量的本质
变量的本质代表的是“一个可操作的存储空间”,空间的位置是确定的,但是空间里存什么是不确定的,我们可以通过变量名称访问对应的“存储空间”,进而对其存储的值进行操作。
java作为一种强类型语言,对于每一个变量都必须声明其对应的数据类型。变量的数据类型决定变量对应“存储空间”的大小。例如int a=1,他表示变量a的存储空间大小为4个字节。
变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。因此变量在使用前必须声明,只有在声明之后,才能为其分配相应长度的存储空间。变量声明的格式如下:
示例
type varName [=value] [,varName[=value]...] //[]中的内容为可选项
数据类型 变量名 [=初始值] [,变量名 [=初始值]...]
//小例子
int a;
int b=10;
int a,b;
注意事项
- 每个变量都有类型,类型可以是基本类型也可以是引用类型。
- 变量名称必须是合法的标识符。
- 变量的声明是一条完整的语句,因此必须以分号作为结束。
** 温馨提示 **
不提倡==int a,b;==这种一行声明多个变量的习惯,逐一声明有利于增加代码的可读性。
java变量的分类
java变量大致可以分为三类,第一类为局部变量;第二类为成员变量(通常也称为实例变量);第三类为静态变量。
第一类:局部变量(local variable)
局部变量是方法或语句块内部定义的变量,其生命周期是从声明位置开始到方法或语句块执行完毕为止。局部变量在使用前必须先声明并初始化(赋值),否则会出错。
局部变量的初始化有两种方式,一种是先定义再初始化,代码中方式一所示,另外一种是定义的同时进行初始化,如方式二所示。
public class TestVariable{
public static void main(String[] args){
//方式一
int age;
age=18;
//方式二
int weight=50;
//错误赋值示例!!!注意这样写是错误的,不要模仿!!!!
class height{
int height;
}
height=180;
}
}
错误使用示例一:在这里虽然定义了身高height,也有初始化,为什么会报错呢?原因在于之前说的语句块的概念,class height{}定义的是height类,也就是一个语句块,局部变量只能在语句块内才能使用,简单点理解就是在一个括号内是可以使用的,虽然也进行赋值了,但是赋值语句在括号之外 ,因此出现报错的情况。
错误使用示例二:在test1中虽然定义了 i 但是没有初始化,因此在执行 j =i+5的时候会报错,正确的写法如test2中所示。
public void test1(){
int i;
int j=i+5;//编译出错,变量i还没有初始化
}
public void test2(){
int i=1;
int j=i+5;//编译正确
}
第二类:成员变量(member variable)
在某个方法外部,类内部定义的变量,从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型默认的初始值。部分变量的默认初始值如下表所示
数据类型 | 初始值 |
---|---|
int | 0 |
double | 0.0 |
char | ‘\u0000’ |
boolean | false |
public class TestVariable{
int a;//成员变量,会自动初始化
public static void main(String[] args){
.....
}
}
第三类:静态变量(static variable)
静态变量使用static定义,从属于类,声明周期伴随类始终,从类加载时产生,类卸载时结束。如果不进行初始化,与成员变量一样,会自行初始化成该类型的默认初始值。
public class TestVariable{
static int a;//静态变量,会自动初始化
public static void main(String[] args){
.....
}
}
小结
类型 | 声明位置 | 从属关系 | 生命周期 |
---|---|---|---|
局部变量 | 方法或语句块内部 | 方法、语句块 | 从声明位置开始,直到方法或语句块执行完毕时,局部变量消失 |
成员变量(实例变量) | 类内部、方法外部 | 对象 | 成员变量伴随对象的创建和消失而产生和消失,即当对象被创建时,成员变量也跟着创建;当对象消失时,成员变量也随之消失 |
静态变量(类变量) | 类内部(需要用static修饰) | 类 | 当类被加载时,静态变量有效,类被卸载时,静态变量消失 |