前面我们讲到变量根据他们的特点可以分为类变量、实例变量、局部变量。那么我们现在就来更细致的讲解。
类变量:在类中、方法之外、用 static
关键字修饰的变量。
实例变量:在类中、方法体之外、不用 static
关键字修饰的变量。
局部变量:在方法之中的变量。
那么他们有什么区别呢?
首先,是类变量。顾名思义,类变量属于类本身,也叫作静态变量,必须用 static
关键字修饰,并且不管创建了多少个对象,类变量都只有一份,有默认值,可以通过类名.类变量名
直接访问。
只需要记住一点,**类变量属于类本身,所以只有一份,所以可以直接用类名访问。**由于这个特性对于常量来说非常合适,因为对于常量,它的值是固定的,不管你创建多少个实例,都只需要相同的值就可以,例如(圆这个类维持了一个常量 π ,不管你创建了多少个圆实例,这个常量的值都是为 π,是不变的),因此常量经常被 static
修饰。所以我们修饰常量一般是这样的:
//java修饰常量
public static final String CONSTANT_A = "Hello";
注:由于常量本身并不私密,因此,它的可见性可以跨越包,所以用public
修饰;并且只需要一份即可,所以用 static
修饰,我们可以直接通过类名访问;由于常量不可以被修改,所以必须要用final
修饰。总结特点就是:高可见、只有一份、不可修改。 这和现实中的常量的概念也是一致的(高可见:任何人都能直接使用常量;只有一份:任何人使用的某个常量实际上只需要一份即可;不可修改:常量当然不可以修改)。
**接着,是实例变量。**顾名思义,实例变量属于实例本身。也就是说,当我们创建一个类的实例的时候,就有了“一份”变量,并且实例变量也是有默认值的。当对象创建时,则实例变量跟着创建,对象销毁时跟着销毁。通过类名.实例变量名
来访问,可以被访问修饰符修饰,并且对类中的方法是可见的。
通常,实例变量都是被设计成被 private
关键字修饰,让其对其他类不可见,然后通过一类专门设计的方法对其值进行访问和修改,这类方法就是get/set
方法。
最后是局部变量,前面说到,局部变量是在方法(包括方法、构造方法、语句块)中,因此它是在方法被执行时创建,方法执行结束时则销毁,因此只能在该方法中可见,不能用访问修饰符修饰局部变量(只能该方法可见,还要啥访问修饰符!是不是!),并且局部变量没有默认值,使用时必须先初始化(这是基于安全性和内存开销的考虑)。
以上就是关于三种类型的变量的讲解,下面是一个关于圆的例子。
//类:圆
public class Circular{
//类变量:表示只有一份,名字就是“圆形”,一旦修改成其他,所有实例都会变成其他。
static String name = "圆形";
//实例变量,直径:每个实例都有属于自己的直径的值
double diameter = 23.44;
//方法
public void show(){
// 局部变量
int i = 0;
}
}
关于变量的分类就讲到这里,下一节讲修饰符。