概念
在Java中,变量是程序里最基本的存储单元,它由变量名、变量类型、作用域组成。从本质上来说,变量其实就是内存里的一小块存储区域,该区域只能存储声明变量时指定类型的数据。我们创建使用每个变量前,必须先声明,在内存中申请空间,然后对其进行初始化赋值,接着就可以通过变量名来访问和使用这块内存区域了。
变量的定义与案例
1. 命名规则与规范
Java的标识符有一定的命名规则和规范。并不是你想怎么命名就怎么命名,必须遵循一定的要求。规则如下:
**①. Java标识符由 字母(含英、中、日、俄等)、数字、下划线"_" 和 美元符号salary ;
②. 不能以数字开头, 如123abc ;
③. 严格区分大小写, 如class与Class是不同的 ;
④. 长度无限制(一般不要超过15个字符);
⑤. 不能是Java中的保留字和关键字。
Java的变量名也是一种标识符,所以必须遵循以上这些规则! 另外还有一些命名规范需要我们尽量遵守,比如:
● 变量名尽量要做到见名知意。在实际开发时尽量不要写a、b、c这种名称;
● 变量名的首字母要小写。如果名称由多个单词组成,第一个单词的首字母应小写,剩下的单词首字母应大写(驼峰式命名法),例如 xxxYyyZzz、numCounter。
知道了变量的命名规则与规范后,我们就开始定义变量吧。
2. 基本语法
在Java语言中,所有的变量在使用前都必须先声明再使用,否则就会报错。一般定义变量的基本语法格式如下:
type 变量名 = value;
这里的type表示Java的数据类型,同一条语句中可以用逗号隔开多个同类型的变量。 这里的”=“等号表示赋值,不是通常数学里等号的意思,其作用是把”=“后面的值赋给前面的变量。
语句的最后使用英文的 ";" 分号来表示语句结束。
成员变量与局部变量的区别?
成员变量 vs 局部变量
- 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被
public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰。 - 存储方式:从变量在内存中的存储方式来看,如果成员变量是使用
static修饰的,那么这个成员变量是属于类的,如果没有使用static修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。 - 生存时间:从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
- 默认值:从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被
final修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
成员变量与局部变量代码示例:
public class VariableExample {
// 成员变量
private String name;
private int age;
// 方法中的局部变量
public void method() {
int num1 = 10; // 栈中分配的局部变量
String str = "Hello, world!"; // 栈中分配的局部变量
System.out.println(num1);
System.out.println(str);
}
// 带参数的方法中的局部变量
public void method2(int num2) {
int sum = num2 + 10; // 栈中分配的局部变量
System.out.println(sum);
}
// 构造方法中的局部变量
public VariableExample(String name, int age) {
this.name = name; // 对成员变量进行赋值
this.age = age; // 对成员变量进行赋值
int num3 = 20; // 栈中分配的局部变量
String str2 = "Hello, " + this.name + "!"; // 栈中分配的局部变量
System.out.println(num3);
System.out.println(str2);
}
}
静态变量有什么作用?
静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。
静态变量是通过类名来访问的,例如StaticVariableExample.staticVar(如果被 private关键字修饰就无法这样访问了)。
// 静态变量
public static int staticVar = 0;
}
通常情况下,静态变量会被 final 关键字修饰成为常量。
// 常量
public static final int constantVar = 0;
}