首页 > 编程语言 > 详细

java中的静态变量与实例变量

时间:2020-05-29 21:42:59      阅读:55      评论:0      收藏:0      [点我收藏+]

首先弄明白:静态变量属于类的级别,而实例变量属于对象的级别。对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。 

主要区别有两点:

1,存放位置不同

  类变量随着类的加载存在于方法区中,方法区即静态区(方法区包含整个程序中唯一存在的元素)实例变量随着对象的对象的建立存在于内存中。

2,生命周期不同

  类变量的生命周期最长,随着类的加载而加载,随着类的消失而消失,

  实例变量随着对象的消失而消失。

静态的使用注意事项:

1,静态方法只能访问静态成员(包括成员变量和成员方法),不能访问非静态成员或方法。

  非静态方法可以访问静态也可以访问非静态方法或成员。

2,静态方法中不能出现this,super关键字。

  因为静态是优先于对象存在的,所以不能出现this,super关键字

3,主函数是静态的。

下面是静态变量与实例变量的一段程序:

public class StaticTest {

/**
  * 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,
  * 其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某
  * 个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,
  * 不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
  * 总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以
  * 直接使用类名来引用。例如,对于下面的程序,无论创建多少个实例对象,
  * 永远都只分配了一个<code>staticInt</code>变量,并且每创建一个实例对象,
  * 这个<code>staticInt</code>就会加1;但是,每创建一个实例对象,就会分配一个<code>random</code>,
  * 即可能分配多个<code>random</code>,并且每个<code>random</code>的值都只自加了1次。<br>

*/

    private static int staticInt = 2;//静态变量
private int random = 2;//实例变量

public StaticTest() {
staticInt++;
random++;
System.out.println("staticInt = "+staticInt+" random = "+random);
}

public static void main(String[] args) {
StaticTest test = new StaticTest();
StaticTest test2 = new StaticTest();
}

}
结果:

staticInt = 3 random = 3
staticInt = 4 random = 3

总结:

实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。每创建一个实例对象,就会分配一个random,实例对象之间的random是互不影响的,所以就可以解释为什么输出的两个random值是相同的了。

静态变量不属于某个实例对象,而是属于整个类。只要程序加载了类的字节码,不用创建任何实例对象,静态变量就回被分配空间,静态变量就可以被使用了。无论创建多少个实例对象,永远都只分配一个staticInt 变量,并且每创建一个实例对象,staticInt就会加一。

 

java中的静态变量与实例变量

原文:https://www.cnblogs.com/1994xlai/p/12989449.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!