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并不受影响。