在方法或语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
false
,引用类型变量的默认值是null
。变量的值可以在声明时指定,也可以在构造方法中指定;ObejectReference.VariableName。
类变量也声明在类中,方法体之外,但必须声明为 static 类型。
static
关键字声明,但必须在方法之外。public
/ private
, final
和 static
类型的变量。常量初始化后不可改变。static
声明变量。public
类型。false
,引用类型默认值是 null
。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。ClassName.VariableName
的方式访问。为 public static final
类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public
和 final
类型,其命名方式与实例变量以及局部变量的命名方式一致。关于 类变量 的说明:
The static keyword in Java is used for memory management mainly. We can apply java static keyword with variables, methods, blocks and nested class. The static keyword belongs to the class than an instance of the class. The static can be: Variable (also known as a class variable) Method (also known as a class method) Block.
(翻译)
Java 中的 static 关键字主要用于 内存管理(就是用了这个会安排出内存空间来,供类的实例之间共享某个量)。我们可以将 java 的 static 关键字施用于变量、方法、语句块和嵌套类。static 定义的对象是属于整个类的, 而不是某个类的实例。
普通的变量属于类的某一个特定的实例,但用 static 关键字修饰的变量将属于一个类。也就是说,我们通过类的某一个实例去修改一个一般的变量值,将只有这个实例中的值被修改,其他实例不受影响;而若是修改一个 static 关键字修饰的类变量,这个类的所有实例的这个值都会被修改。
说起来比较麻烦,可以看一段示例代码:
public class Static { public static void main(String[] args) { Example foo = new Example(); Example bar = new Example(); foo.staticVar = foo.normalVar = "foobar"; System.out.println(foo.staticVar + "\t" + foo.normalVar); System.out.println(bar.staticVar + "\t" + bar.normalVar); } } class Example { static String staticVar = "Example"; String normalVar = "Example"; }
输出:
foobar foobar foobar Example
可以看到,我们只改变了 foo
实例的值,但由 static
修饰的类变量 staticVar
的改变在 bar
中也出现了,而普通的成员变量则不然。
利用这种特性,我们可以实现一种可以统计自己的实例个数的类,
例如:
public class CountingClass { public static void main(String[] args) { Counter a = new Counter(); Counter b = new Counter(); Counter c = new Counter(); System.out.println("Total Counters: " + a.total + " == " + b.total + " == " + c.total); } } class Counter { // 自计数类 static int total = 0; public Counter() { total++; System.out.println("第 " + total + " 个 Counter 被构造。"); } }