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


    首先弄明白:静态变量属于类的级别,而实例变量属于对象的级别。对于静态变量在内存中只有一个拷贝(节省内存),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就会加一。

  • 相关阅读:
    frp反向代理+内网穿透+ Metasploit渗透windows
    FRP实现内网穿透
    FRP 内网穿透工具
    通过代理实现在校园外使用校园网内的服务 (frp内网穿透)
    戴维斯双击
    pycharm2019,3.1版本的有效激活方法
    一键对centos7.6安装python3环境已经pip3
    在linux设置/etc/vimrc 将vim 中后缀.sh的文件 的前几行进行默认输入
    Postman Interceptor和postman更改id仍然无法使用的,从这里下载相同版本的postman和interceptor插件
    Postman Interceptor安装成功却无法在Postman启用的解决办法
  • 原文地址:https://www.cnblogs.com/1994xlai/p/12989449.html
Copyright © 2020-2023  润新知