1.变量
数学中的定义:
变量:可变的数据称为变量
Java中定义:
-
内存中一块存储区域
-
该区域的数据可以在同一类型范围内不断变化
-
变量是程序中最基本的存储单元,包含了变量类型、变量名和存储的值
变量的作用就是在内存中保存数据
int age; double pi; boolean flag;
注意事项:
-
Java中变量必须先声明,后使用(变量必须具有明确的数据类型,因为Java是强类型语言)
-
使用变量名来访问这块区域的数据
-
变量使用时有作用域的限制
-
在同一作用域,变量名不可重复
变量按声明位置的不同
-
在方法体外,类内声明的变量称为成员变量
-
实例变量:非static修饰的变量
-
类变量:static修饰的变量
实例也可以访问类变量,同一个类的所有实例访问类变量时,实际上访问的是该类本身的同一个变量,即访问的是同一块内存区域
-
-
在方法体内声明的变量称为局部变量
-
形参:方法、构造器的括号中中定义的变量
-
方法局部变量:在方法内定义的变量
-
代码块局部变量:在代码块中定义的变量
-
成员变量的初始化
当系统加载类或创建该类的实例时,系统会自动为成员变量分配内存空间,自动为成员变量指定初始值
内存中的运行机制
Person p1 = new Person();
Person p2 = new Person();
//为实例变量赋值
p1.name="张三";
p2.name="杨戬";
//为类变量赋值
p1.eyeNum=2;
p2.eyeNum=3;
根据机制,我们知道Person类在new的过程中经历了什么:
-
首先会加载这个类,并初始化这个类
-
在这个类的准备阶段,系统会为这个类的类变量分配内存空间,并指定默认的初始值
-
当类初始化完成之后,系统将在堆内存中为该类分配一块内存区,在这块内存区中包含了eyeNum类变量的内存,并且设eyeNum类变量的默认初始值为0
然后程序将new Person()赋值给了p1
-
将创建的Person对象赋值给p1,Person对象中包含了名为name的实例
-
此时就会对Person对象的实例进行内存空间的分配和指定初始值
-
实例变量也就是在创建实例时分配的内存空间并指定的初始值为null
创建第一个对象和第二个对象没有什么关联,唯一的关联就是都是使用了类模版进行对象的创建
创建出来的两个对象都是各自独立的内存区域,对象实例的行为和属性也是依赖于对应的对象独立存在的
初始化(new)Person类后的存储示意图
new后的person存储图
p1变量指向Person对象
给name赋值为张三
局部变量的初始化
局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化操作
-
使用者定义局部变量,当程序执行到当前局部变量,如果该局部变量未赋初始值,该变量依旧不具备内存空间
-
直到程序执行到该局部变量第一次赋值,此时系统将会为该局部变量分配内存空间,并保存该初始值
2.常量
常量在程序运行时是不能被修改的,在JAVA中使用final关键字修饰的变量叫做常量(也可以看作是特殊的变量)
final double CM_PER_INCH = 2.54;
关键字final表示赋值动作只能进行一次,之后便不可以修改它的值。通常我们采用大写的形式表示常量。