变量
- 变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。
- 我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
- Java是一种强类型语言,每个变量都必须声明其数据类型。
- 变量的数据类型决定了变量占据存储空间的大小。 比如,
int a=3
; 表示a
变量的空间大小为4
个字节。 - 变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
- 变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。
完整代码
public class TestVar {
public static void main(String[] args) {
//【1】变量的声明(定义)
//定义一个年龄的变量;
//名字(标识符)叫age,类型是int类型
int age;
//变量不可重复定义:
//int age;
int min ,max;//可同时定义多个变量
//【2】变量的赋值
age = 30;//用等号进行赋值操作
age = 40;
age = 70 + 3;
//变量和赋值可以写在一行
int high = 32;
int d = 24,f = 56;
int z , h = 87;//z没有赋值,h赋值为87
//【3】变量的使用
System.out.println(age);
System.out.println(age + 10);
int k = 10;
System.out.println(age + k);
int n = 3;
int m = 4;
System.out.println(m + n);
}
}
变量的声明
//【1】变量的声明(定义)
//定义一个年龄的变量;
//名字(标识符)叫age,类型是int类型
int age;
//变量不可重复定义:
//int age;
int min ,max;//可同时定义多个变量
变量的赋值
//【2】变量的赋值
age = 30;//用等号进行赋值操作
age = 40;
age = 70 + 3;
//变量和赋值可以写在一行
int high = 32;
int d = 24,f = 56;
int z , h = 87;//z没有赋值,h赋值为87
变量的使用
System.out.println(age);
System.out.println(age + 10);
int k = 10;
System.out.println(age + k);
int n = 3;
int m = 4;
System.out.println(m + n);
- 右键
Run
运行
变量的内存
练习
int num1 = 10;
int num2 = 20;
num1 = num2;
num2 = num2 + 10;
num1 = num2 - 10;
num2 = num1;
System.out.println("num1="+num1);
System.out.println("num2="+num2);
分析
-
int num1 = 10; 这行代码声明了一个整型变量 num1 并给它赋值为10。在内存中,num1 现在储存的是10。
-
int num2 = 20; 这行代码声明了另一个整型变量 num2 并给它赋值为20。在内存中,num2 现在储存的是20。
-
num1 = num2; 这行代码将 num2 的值赋给了 num1。因此,num1 的值现在变成了20,与 num2 的值相同。
-
num2 = num2 + 10; 这行代码将 num2 的值增加了10。因此,num2 现在储存的是30(20 + 10)。
-
num1 = num2 - 10; 这行代码将 num2 当前的值(30)减去10,然后赋值给 num1。因此,num1 的值现在是20(30 - 10)。
-
num2 = num1; 这行代码又将 num1 的值赋给了 num2。所以,num2 的值也变成了20。
所以,当执行到最后,num1 和 num2 在内存中都储存的是20。这就是为什么打印出来的结果是:num1=20 num2=20
变量的作用域
- 作用域指的就是作用范围,变量在什么范围中有效
- 作用范围就是离它最近的
{}
public class TestVar{
int b = 20;
public static void main(String[] args){
System.out.println(a);//no
int a = 10;
System.out.println(a);//yes
System.out.println(b);//yes
{
int c = 40;
System.out.println(c);//yes
int a = 50;//属于变量的重复定义
}
System.out.println(c);//no
}
public void eat(){
System.out.println(b);//yes
System.out.println(a);//no
int a = 30;//不是变量的重复定义
System.out.println(a);//yes
}
}
这段代码涉及了Java中的变量作用域和生命周期。让我们逐步分析:
- int b = 20; 这行代码声明了一个实例变量 b 并给它赋值为20。这个变量是类的成员变量,对整个类都可见。
- System.out.println(a); 这行代码在变量 a 定义之前就尝试输出其值,会导致编译错误。因为在该位置 a 还没有被定义。
- int a = 10; 这行代码在 main 方法中定义了一个局部变量 a 并给它赋值为10。
- System.out.println(a); 这行代码输出了局部变量 a 的值,即10。
- System.out.println(b); 这行代码输出了实例变量 b 的值,即20。
- {} 这是一个代码块,其中定义了局部变量 c 并赋值为40。在这个代码块内,c 是可见的。
- System.out.println©; 这行代码输出了代码块内部的局部变量 c 的值,即40。
- int a = 50; 这行代码在同一代码块内试图再次定义局部变量 a,这是不允许的,会导致编译错误。因为在同一作用域内不能重复定义相同名称的变量。
- System.out.println©; 这行代码试图输出代码块外的局部变量 c,但会导致编译错误,因为 c 的作用域仅限于该代码块内。
- public void eat() 这是一个实例方法。
- System.out.println(b); 这行代码在实例方法内输出了实例变量 b 的值,即20。
- System.out.println(a); 这行代码尝试输出变量 a 的值,但由于在方法内有局部变量 a 的定义,所以会输出这个局部变量的值。在这个位置,局部变量 a 尚未被定义,因此会导致编译错误。
- int a = 30; 这行代码定义了实例方法内的另一个局部变量 a 并赋值为30。
- System.out.println(a); 这行代码输出的是实例方法内的局部变量 a 的值,即30。
- 这个代码示例涉及了变量的作用域、重复定义等概念。需要注意的是,在不同的作用域内可以使用相同名称的变量,因为它们不会发生冲突。在方法内部重新定义一个与外部同名的变量是允许的。