变量的本质
变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a=3; 表示a变量的空间大小为4个字节。
变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。
变量的声明
格式为:1
2
3type varName [=value][,varName[=value]...];
//[]中的内容为可选项,即可有可无
数据类型 变量名 [=初始值] [,变量名 [=初始值]…];
【示例2-4】 声明变量:
1 | double salary; |
不同数据类型的常量会在内存中分配不同的空间,如图所示。
注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
示例 (在一行中声明多个变量)1
int i ,j; // 两个变量的数据类型都是int
不提倡这种”一行声明多个变量”风格,逐一声明每一个变量可以提高程序可读性。
可以将变量的声明和初始化放在同一行中1
2int age = 18;
double e = 2.718281828;
我们来看一个实例,我写的
1 | /** |
总结:
- 局部变量使用前需要初始化,如果不初始化当你用的时候就会报错,就比如你直接打印它
- 但是成员变量可以,你在外面定义了成员变量,但是没有初始化它,但是你打印的时候就不会报错,因为JVM会给成员变量初始化值
变量的分类
从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量。
成员变量和静态变量不是目前重点,不要过多纠结理解与否。我们学习面向对象时,再重点讲解成员变量和静态变量
局部变量(local variable)
方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。
示例1
2
3
4
5
6
7
8
9
10public void test() {
int i;
int j = i+5 ; // 编译出错,变量i还未被初始化
}
public void test() {
int i;
i=10;
int j = i+5 ; // 编译正确
}成员变量(也叫实例变量 member variable)
方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
实例变量的声明1
2
3public class Test {
int i;
}
- 静态变量(类变量 static variable)
使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。 (注:讲完内存分析后我们再深入!先放一放这个概念!)如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值
变量的声明并赋值1
2
3
4
5
6
7
8
9
10
11
12
13public class LocalVariableTest {
public static void main(String[ ] args) {
boolean flag = true; // 声明boolean型变量并赋值
char c1, c2; // 声明char型变量
c1 = '\u0041'; // 为char型变量赋值
c2 = 'B'; // 为char型变量赋值
int x; // 声明int型变量
x = 9; //为int型变量赋值
int y = x; // 声明并初始化int型变量
float f = 3.15f; // 声明float型变量并赋值
double d = 3.1415926; //声明double型变量并赋值
}
}
1 | public class TestVariable { |
常量
常量通常指的是一个固定的值,例如:1、2、3、’a’、’b’、true、false、”helloWorld”等。
在Java语言中,主要是利用关键字final来定义一个常量。 常量一旦被初始化后不能再更改其值。
声明格式为:1
final type varName = value;
常量的声明及使用1
2
3
4
5
6
7
8
9
10
11public class TestConstants {
public static void main(String[] args) {
final double PI = 3.14;
// PI = 3.15; //编译错误,不能再被赋值!
double r = 4;
double area = PI * r * r;
double circle = 2 * PI * r;
System.out.println("area = " + area);
System.out.println("circle = " + circle);
}
}
为了更好的区分和表述,一般将1、2、3、’a’、’b’、true、false、”helloWorld”等称为字面常量,而使用final修饰的PI等称为符号常量。
建议:
- 变量和常量命名规范(规范是程序员的基本准则,不规范会直接损害你的个人形象):
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则: monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则: Man, GoodMan
- 方法名:首字母小写和驼峰原则: run(), runRun()
基本数据类型(primitive data type)
Java是一种强类型语言,每个变量都必须声明其数据类型。 Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。
Java中定义了3类8种基本数据类型
- 数值型- byte、 short、int、 long、float、 double
- 字符型- char
- 布尔型-boolean
注意事项
- 引用数据类型的大小统一为4个字节,记录的是其引用对象的地址!