首先汇总一下目前常说的各种变量:
全局变量(Java中是不存在全局变量这一说的,如果硬要说的话,全局变量的作用其实和类变量差不多)
成员变量(其实就是大家口里的一种叫法,其实它就是类变量和实例变量的总称)
类变量(也叫静态变量,因为该变量被static关键字修饰,java中规定由static修饰的变量归属于类,所以也叫类变量,如果该类的某个实例修改了该变量,那么该类的其他实例都会知道这次修改。即该类的所有实例共享这个变量,该变量在类中只此一份。)
实例变量(不使用 static 关键字定义,并且定义在任何方法、构造方法、块之外的变量都是实例变量。实例变量都是基于特定实例的,实例变量不会在实例之间共享,也就是说,每一个对象的实例都有自己的一个实例变量。)
局部变量(声明在方法、构造方法、语句块内部。)
参数(定义在方法参数列表内,也就是我们常说的方法的入参,比如main方法中的String[] args就是参数)
常量 在java中 由final修饰的变量称为常量。
其实查阅JDK官方文档我们就可以知道java中只有类变量、实例变量、局部变量和参数这四种变量。
下面详细介绍一下类变量、实例变量、局部变量。参数其实没啥好说的。
1.类变量(也叫静态变量)
(1)类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
(2)无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
(3)静态变量除了被声明为常量外很少使用,静态变量是指声明为 public(/private,final 和 static 类型的变量。静态变量初始化后不可改变。
(4)静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
(5)静态变量在类加载时创建,在程序结束时销毁。
(6)与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
(7)默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化,但仅仅是初始化,静态变量是不可以在静态块声明中的。
(8)静态变量可以通过:ClassName.VariableName的方式访问。
(9)类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。
2. 实例变量
(1)实例变量声明在一个类中,但在方法、构造方法和语句块之外;
(2)当一个对象被实例化之后,每个实例变量的值就跟着确定;
(3)实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
(4)实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
(5)实例变量可以声明在使用前或者使用后;
(6)访问修饰符可以修饰实例变量;
(7)实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
(8)**实例变量具有默认值。**数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
(9)实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
3. Java 局部变量
(1)局部变量声明在方法、构造方法或者语句块中;
(2)局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
(3)访问修饰符不能用于局部变量;
(4)局部变量只在声明它的方法、构造方法或者语句块中可见;
(5)局部变量是在栈上分配的。
(6)局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
4、代码实例分析
public class VariablesInJava {
int instanceVariable; // 实例变量
static String staticVariable; // 类变量
public void method() {
String localVariable = "localVariable"; // 局部变量
System.out.println(localVariable);
}
public static void main(String args[]) {} //参数
}
5、总结
(1)如果你用 static 来定义变量,只能是类变量、或者说静态变量、而且其定义位置只能在类中,且在方法、构造方法和代码块外,变量的副本只有一个。
(2)如果你不用 static 来声明变量,那么就会有以下三种变量的叫法:
定义在构造方法、代码块、方法外的变量被称为实例变量,实例变量的副本数量和实例的数量一样。
定义在方法、构造方法、代码块内的变量被称为局部变量;
定义在方法参数列表中的变量被称为参数。
本文参考链接(点击查看)