静态变量和实例变量的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态变量和实例变量的区别?相关的知识,希望对你有一定的参考价值。

静态变量:独立存在的变量,只是位置放在某个类下,可以直接类名加点调用静态变量名使用。并且是项目或程序一启动运行到该类时就直接常驻内存。不需要初始化类再调用该变量。用关键字static声明。静态方法也是同样,可以直接调用。

实例变量:就是相当于该类的属性,需要先初始化该类,就是new 该类后,才可以调用。但是该类未被再次使用,被垃圾回收器回收后,该实例也将不存在了,就是不在内存中了。

区别如下:

1.存储区域不同:静态变量存储在静态存储区,普通变量存储在堆中;

2.静态变量与类相关,普通变量则与实例相关

3.内存分配方式不同。

4.生命周期不同。

参考技术A

Java类的成员变量有2种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。

而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

参考技术B 静态变量属于类,不用实例化就已经存在,所有的实例共享同一个静态变量,可以通过类名和实例名来访问。实例变量属于实例,每个实例都有自己的这个变量,只能通过实例名来访问。 参考技术C 静态变量可以通过类名.方法名可以点出来。而实例变量需要先实例化那个类才可以得到 参考技术D static i = 10; //常量
class A a; a.i =10;//可变

静态变量和实例变量的区别

  静态变量用static修饰,实例变量不用。

public class Person {
    static String position;
    String name;
}

  静态变量是随着类的字节码的加载而被加载进内存的,所以只要程序一启动运行到该类时就会被加载进内存,不管创建了多少个对象在内存中只存储一份。而实例变量是在创建对象以后才能被分配内存空间,创建对少个对象就会存储多少份。

技术图片

  静态变量被存储到内存的静态区,实例变量被存储到堆中。静态变量是和类相关的,使用类名直接调用。实例变量是和对象相关的必须通过对象名调用。

public static void main(String[] args) {
    Person.position = "老师";
    Person p = new Person();
    p.name="老王"
}

以上是关于静态变量和实例变量的区别?的主要内容,如果未能解决你的问题,请参考以下文章

静态变量和实例变量的区别

在java语言中,静态变量和普通变量有啥区别?

静态变量与实例变量:区别?

静态变量和实例变量的区别?

静态变量和实例变量的区别

静态变量和实例变量的区别