实例变量和类变量的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Diligent_Programmer/article/details/81673047

1.从语法区别上说:变量声明时前面加了static关键字的变量为静态变量又称为类变量,反之变量声明时没加static修饰的变量为实例变量。

2.变量的隶属:静态变量是该类的所有对象所共享的即该变量属于该类,而不属于某个对象,而实例变量则是属于特定的对象的。

3.变量何时存在:静态成员在类的对象初始化前可以通过类名访问,即静态变量在new对象之前就已经存在内存中,类的静态成员在类加载(即第一次创建一个类)的时候分配空间,静态成员贯穿整个生命周期==》如:main方法为static的。                              而实例变量要在创建对象时才分配内存。

4.静态方法:

1)静态方法中只能访问静态成员(原因:若要被访问,首先得在内存中已分配空间)

2)非静态方法中可以访问类的静态成员

3)静态方法中没有this引用

5.静态块

static{}主要是用于给类的静态化成员赋值的

{  }代码块在每次实例化对象前执行,在调用构造方法前执行

6.执行顺序:

1)先执行代码块再执行构造方法

2)先自动执行静态块,再执行静态方法(需要手动调用)

7.静态变量和实例变量,实例:

public class TestIns{
    public static void main(String[] args) {
        for(int i = 0;i<10;i++){
            new Son();
        }
    }

}
class Son{
    int var=0;
    static int staticVar =0;
    Son(){
        var++;
        staticVar++;
        System.out.println(var+"=============="+staticVar);
    }
}

结果:

1==============1
1==============2
1==============3
1==============4
1==============5
1==============6
1==============7
1==============8
1==============9
1==============10

8.静态块代码块的执行

public class TestIns{
    public static void main(String[] args) {
        new Son();
        Son.test();
    }

}
class Son{
    int var=0;
    static int staticVar ;
    static{
        staticVar=3;
        System.out.println("我是静态块,给静态变量赋值了");
    }
    Son(){
        System.out.println("我是       构造方法         被执行了");
    }
    {
        System.out.println("我是    代码块       被执行了");
    }
    static void test(){
        System.out.println("我是     静态方法");
    }
}


结果:

我是静态块,给静态变量赋值了
我是    代码块       被执行了
我是       构造方法         被执行了
我是     静态方法

===========================================================================

类变量可以通过类名直接调用,类名.静态变量名

实例变量要通过,对象.变量名

猜你喜欢

转载自blog.csdn.net/Diligent_Programmer/article/details/81673047