我看书的时候有点没看明白,除了觉得静态方法不用该类的对象调用,可以由类本身调用。其他的区别在哪里?
能不能帮我从本质上讲讲,再帮忙举个一针见血的小例子。谢谢!!!

解决方案 »

  1.   

    每当编译了一个新类,就会产生一个Class对象(即被保存在同名的.class文件中).在运行时当我们想生成这个类的对象时,运行这个程序的jvm会首先检查这个类的Class对象是否已经加载.如未加载,jvm就会根据类名查找.class文件,并将其载入.所以java程序并不是一开始执行就会被完全加载的.而static 初始化就是在类加载时进行的.而其他的初始化就在它之后了!
    这个是static初始化的原理.
    当某个类的静态方法/静态字段首次被访问时,java解释器必须查找类路径,以定位.class文件.
      

  2.   

    SubClass{
        static int classpar;
        int instancepar;
        static void setClassPar(int i){
        classpar=i;
        }
        void setInstancePar(int i){
        instancepar=i;
        }
        static int getClassPar(){
            return classpar;
        }
        int getInstancePar(){
            return instancepar;
        }
    }
    public class mainClass{
        public static void main(String args[]){
            SubClass obj1=new SubClass();
            SubClass obj2=new SubClass();
            obj1.setClassPar(3);
            obj2.setClassPar(7);
            obj1.setInstancePar(5);
            obj2.setInstancePar(6);
            System.out.println("obj1.classPar:"+obj1.getClassPar());
            System.out.println("obj2.classPar:"+obj2.getClassPar());
            System.out.println("obj1.instancePar:"+obj1.getInstancePar());
            System.out.println("obj2.instancePar:"+obj2.getInstancePar());
            }
    }执行结果:
    obj1.classPar:7
    obj2.classPar:7
    obj1.instancePar:5
    obj2.instancePar:6