为什么类中定义的某些成员变量需要加 static和final修饰?
public class DataSyncJob extends BaseQuartzJob {
private static final String STR = "xxx";
private String str = "xxx";
}
final 的作用
使用时再分配,分配后不可修改
确保某些内容是不可变的,即它们在定义后不能再被修改。
static 的作用
修饰的 变量/方法 属于类,编译阶段已经分配到堆
静态变量也就是被
static
关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。即使创建多个对象,静态变量也只会被分配一次内存,这样可以节省内存。
静态变量/方法,静态变量/方法与类相关联。无论一个类创建了多少个实例,它的静态变量/方法只有一个副本。静态变量可以直接通过类名引用,也可以通过对象名引用。
解释
先给出4个例子
public class Test {
private String str1 = "xxx";
private static String str2 = "xxx";
private final String str3 = "xxx";
private static final String str4 = "xxx";
public void test(){
str1 = "update";
str2 = "update";
// str3 = "update"; // Cannot assign a value to final variable 'str3'
// str4 = "update"; // Cannot assign a value to final variable 'str4'
}
public void print(){
System.out.println("str1:" + str1);
System.out.println("str2:" + str2);
System.out.println("str3:" + str3);
System.out.println("str4:" + str4);
}
public static void main(String[] args) {
Test test = new Test();
test.test();
test.print();
System.out.println("str2 static:" + Test.str2);
System.out.println("str4 static:" + Test.str4);
}
}
str1:update
str2:update
str3:xxx
str4:xxx
str2 static:update
str4 static:xxx
- 对于
str1
和str2
。- 都可修改,
str2
属于静态变量`。
- 都可修改,
- 对于
str1
和str3
。str3
被final
修饰不可修改。
- 对于
str1
和str4
。str4
被final
修饰不可修改,被static
修饰属于静态变量。组合起来就是我们所说的常量。