变量
定义 : 可变的量
在java程序执行过程中,其值会发生改变的量
在内存中,开辟一块空间,用来存放指定数据类型的数据
语法:
1.声明的同时赋值
数据类型 变量名 = 变量值;
2.先声明后赋值
数据类型 变量名;
变量名 = 变量值;
一行同时声明多个变量 int i,j,k;
示例:
int i = 5;
int j = 1, k, l;
k = 3;
注意: =
赋值是java中唯一一个自右向左运算的符号
变量关注的点:
- 1.变量的数据类型
- 2.变量名字 (遵循标识符的命名规则和规范)
- 3.变量的值 (和数据类型一致)
- 4.作用域: { }
- 5.同一作用域中的变量不能同名
注意事项(输出时||运算时):
- 1.变量必须提前声明
- 2.使用变量前要赋值(静态变量和成员变量有默认值)
- 3.在其作用域范围内才能使用,变量只能指向一个值
变量的分类:
类变量||静态变量
位置: 类中方法外
或 语句块外
- 被static修饰
- 可被访问修饰符修饰
- 跟随类
无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。也就是地址不会变
静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量
与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
静态变量除了被声明为常量外很少使用。常量是指声明为public
/private
,final
和static
类型的变量。常量初始化后不可改变。
只声明未赋值,存在默认值
仅声明数据类型所对应的默认值
int → 0
double → 0.0
boolean → false
String → null
char → ' '
(char类型默认值是空格不是空字符串)
成员变量||实例变量||域:
位置:类中方法外
或语句块外
- 不被static修饰
- 可被访问修饰符修饰
- 跟随对象创建和销毁 对象被实例化成员变量的值也会被确定 new
实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
未赋值的成员变量有默认值
int → 0
double → 0.0
boolean → false
String → null
char → ' '
(char类型默认值是空格不是空字符串)
局部变量:
位置:方法中
或语句块内定义的变量
- 不能被static修饰(修饰即变为类变量)
- 不能被被访问修饰符修饰 (作用域问题)
- 局部变量跟随方法、构造方法、或者语句块 创建和销毁
- 使用前必须声明并且已赋值
三种变量对比
以上三种变量都能被final修饰但必须赋值
名称 | 位置 | 作用范围 | static | 访问修饰符 | 使用 | 内存位置 |
---|---|---|---|---|---|---|
类变量 静态变量 | 类中方法外 语句块外 | 类 | 可被修饰 | 可被修饰 | 声明 | 静态存储区 |
成员变量 实例变量 | 类中方法外 语句块外 | 对象 | 被修饰就变成类变量 | 可被修饰 | 声明且有对象 | 堆 |
局部变量 | 方法内 语句块内 | 方法 语句块 | 不可被修饰 | 不可被修饰 | 声明且赋值 | 栈 |
简单的示例:
public class Test {
// 类变量||静态变量
static int i;//有默认值
private int i1 = 3;
final int I2 =4; //被final修饰必须赋值 => 常量
// 成员变量
int j;// 创建对象之前没有默认值 不能使用
private int j1;
public int j2 = 3;
final int J3 = 5;//被final修饰必须赋值 => 常量
public static void main(String[] args) {
// 局部变量 实例变量 {语句块 } 方法中
int k = 5;
int k1;//使用时必须先赋值
final int K2;//使用时必须先赋值
K2 = 2;//可后赋值 且无法与上一行交换顺序
}
}