本例中聲明瞭一個靜態變數num用於記錄程式中共產生了多少個對象。 因為對象創建時會自動調用構造方法,所以在構造方法中加入了“num++;”語句,這樣每創建一個對象就調用一次構造方法,從而每產生一個對象,num的值就會自動加1 。 此時,因為靜態變數是一個公共的存儲單元,所以類的任何一個對象去修改它時 ...
class c1c { private static int num = 0; private static double pi = 3.14; private double radius; private int height; public c1c(double r,int h) { radius = r; height=h; num++; } public void count() { System.out.print("創建了"+num+"個對象"); } double area() { return pi*radius*radius; } double volume() { return area()*height; } } public class cc{ public static void main(String[] args) { c1c volu1=new c1c(2.5,5); volu1.count(); System.out.println("圓柱1的體積="+volu1.volume()); c1c volu2=new c1c(1.0,2); volu2.count(); System.out.println("圓柱2的體積="+volu2.volume()); } }
本例中聲明瞭一個靜態變數num用於記錄程式中共產生了多少個對象。
因為對象創建時會自動調用構造方法,所以在構造方法中加入了“num++;”語句,這樣每創建一個對象就調用一次構造方法,從而每產生一個對象,num的值就會自動加1 。
此時,因為靜態變數是一個公共的存儲單元,所以類的任何一個對象去修改它時,都是在對同一個記憶體單元做操作。
去掉聲明num的static後
private int num = 0;
可以看到num的值沒有變化,這是因為num成為實例變數後,對創建的不同對象來說,都有自己獨立的記憶體來保存它的值,且不與其他對象共用,因此若修改了volu1的num值,volu2的num並不受影響。