今天早上看Ruby的时候,发现一个新名词叫实例变量(instance variable) ,看了半天也没明白是怎么回事。到单位后马上Google了一把,发现这个名词实际上出自java,于是乎上java.sun.com上搜索一下。发现一遍文章讲的还是很透彻的。现总结如下。Java中除了实例变量还有一个概念叫类变量(class variable),这两个变量是相互对应的。要充分理解他们的含义首先要明白类和实例也就是类和对象的关系,在Java中一切都是对象,但是对象是类的个例,定义对象前要先定义类,就是把对象再抽象一个层次,比如最普遍的例子就是多边形的例子,有3个对象:四边形、圆形和三角形,现实中的一切都可以定义为对象,接下来再对这3个对象进行抽象,得到一个多边形类,这3个对象都是多边形类的个例也就是多边形类的孩子。那么由类到个例的这个动作称为实例化,个例(也就是对象)就是实例化的结果称为类的实例。到此,引出了实例变量和类变量的关系了,实例变量就是用在实例(对象)中的变量,类变量也就是用在类中的变量,类变量还有一个名字叫做静态变量。换句话说,类变量是在所有的由该类派生出的实例中共有的,这些实例都是修改和访问这个变量;而实例变量是各个实例所各自拥有的,其他实例是无法访问的。
另外,静态变量的所有权是归类的,也就是说每个类可以定义相同名字的静态变量。见如下的示例:
package java_sample;
import java.util.*;
class test14_1{
private static int i = 0;
public int get_i() {return i;}
}
class test14_2 {
private static int i=9;
public int get_i() {return i;}
}
public class test14 {
public static void main(String[] args){
test14_1 class1 = new test14_1();
test14_2 class2 = new test14_2();
System.out.println(class1.get_i());
System.out.println(class2.get_i());
}
}
输出结果:
0
9