zoukankan      html  css  js  c++  java
  • 静态变量与非静态变量的区别

     

    1.内存分配:

    静态变量在应用程序初始化时,即是在类被加载的时候成员变量即被初始化,就存在于内存当中,直到它所在的类的程序运行结束时才消亡; 而非静态变量需要被实例化后才会分配内存。非static修饰的成员变量是在对象new出来的时候划分存储空间,是与具体的对象绑定的,该成员变量仅为当前对象所拥有的。

    静态方法和静态变量创建后始终使用同一块内存,是连续的。

    非静态方法会存在于内存的多个地方,是离散的。

    static修饰的变量在加载的时候先于main方法加载在内存中的数据共享区——-方法区,而非static的变量在加载的时候,是要创建变量才加载在堆内存中的。

    一个static变量单独划分一块存储空间,不与具体的对象绑定在一起,该存储空间被类的各个对象所共享。static变量值在方法区加载一次,而非static在创建对象时会加载很多次。每次创建都会拷贝一份。

    2.生命周期:

    静态变量生存周期为应用程序的存在周期; 非静态变量的存在周期取决于实例化的类的存在周期。

    3.调用方式:

    静态变量只能通过“类.静态变量名”调用,类的实例不能调用;非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。

    对象在引用成员变量是直接通过类名.变量名调用,对象在引用实例变量时只能通过对象名.变量名调用。

    在类中调用成员变量时直接调用或者以类名.变量名方式调用,实例变量则用this或者直接调用。

    4.共享方式 :

    静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值,线程安全的; 非静态变量是局部变量,不共享的,线程非安全的。

    5访问方式 :

    静态成员不能访问非静态成员; 非静态成员可以访问静态成员。

     

     

  • 相关阅读:
    IO和序列化
    委托与事件
    [基础不过关填坑] 跨iframe触发事件
    有哪些新手程序员不知道的小技巧?
    给echarts加个“全屏展示”
    bootstrapTable使用场景及方式
    bootstrap datetimepicker 格式化yyyymmdd时,无法读取yyyymmdd格式
    【变态需求】bootstrapTable列排序-选择正序倒序不排序
    myeclipse、maven、tomcat、jdk技巧和坑【待完善】
    【调试技巧】 Fiddler高级用法之url映射请求
  • 原文地址:https://www.cnblogs.com/weigy/p/12670119.html
Copyright © 2011-2022 走看看