首先先說說實例成員和類成員.
實例成員中是屬於對象的,包括實例成員變量和實例成員方法,只有創建了對象之後才能訪問實例成員變量和實例成員方法.
類成員是屬於類的,類成員需要用關鍵字static標識,也稱爲靜態成員,類成員包括類成員變量和類成員方法,通過類名可以直接訪問類成員變量和調用類成員方法,即使沒有創建對象,也能夠引用類成員,類成員也可以通過對象引用.
接下來講講類變量和實例變量的區別:
1: 聲明的差別: 沒有使用static聲明的爲實例成員變量,用static 聲明的爲類成員變量
2:存儲結構的差別: 對於實例變量而言,爲每個對象的每個實例成員變量分配一個存儲單元使得不同對象的實例成員變量具有不同的值,而對於類成員變量只分配一個存儲單元,使得所有的對象共同使用一個類成員變量.
3:引用方式的差別: 實例成員變量對於對象,通過對象進行訪問;類成員變量屬於類,既可以通過對象,也可以通過類訪問.
具體一個例子:
public class Point {
private static int numberOfInstances=0;//類成員變量
private int x; //實例成員變量
private int y; //實例成員變量
public static void main(String args[]){
Point pointOne=new Point(10,100); //創建了一個類的對象
System.out.println("x:"+pointOne.getX());
System.out.println("y:"+pointOne.getY());
pointOne.setX(20);//調用實例方法使用對象調用
pointOne.setY(200);//調用實例方法使用類對象進行調用
System.out.println("new x:"+pointOne.getX());
System.out.println("new y:"+pointOne.getY());
System.out.println("Instances before PointTwo is created: " +
Point.getNumberOfInstances());
Point pointTwo = new Point(20, 200);//創建了另外一個對象
System.out.println("Instances after PointTwo is created: " +
Point.getNumberOfInstances());
}
public Point(int initialX, int initialY){ //一個構造方法
this.x=initialX;
this.y=initialY;
Point.numberOfInstances++;//調用類方法使用類名字調用
}
public static int getNumberOfInstances(){//一個類方法,調用該方法要用類名字調用
return numberOfInstances;
}
public int getX(){
return this.x;
}
public int getY(){
return this.y;
}
public void setX(int newX){
this.x=newX;
}
public void setY(int newY){
this.y=newY;
}
}
運行的結果是:
x:10
y:100
new x:20
new y:200
Instances before PointTwo is created: 1
Instances after PointTwo is created: 2