面向对象之static的理解

来源:互联网 发布:可视化分析软件 编辑:程序博客网 时间:2024/05/17 23:13

static用法

  static修饰的内容属于类,不单独属于某个对象,所有对象共享,内存只有这一份。
  用法:用于修饰成员变量,成员函数。
  栈内存存放方法区,数据区,共享区。堆内存存放对象和数组

  static特点

  1.随着类的加载而加载,也就是会随着类的消失而消失,生命周期最长,定义静态过多,内存负担太大,对象消失静态变量也会存在。
  2.优先于对象而存在
  3.所有对象所共享
  4.可以直接被类名调用

  一  实体变量和类变量的区别

  1.存放位置
    类变量随着类的加载而存在于方法区中
    实例变量随着对象的建立而存在于堆内存中
  2.生命周期
    类变量生命周期最长的,随着类的消失而消失
    实例变量:生命周期随着对象的消失而消失
  3.静态方法是用注意事项
    1.静态方法只能访问静态成员  (方法和变量)  ,非静态方法可以访问静态和非静态成员
    2.静态方法中不可以定义this,super关键字,因为静态优先于对象存在
    3.主函数是静态的

  二 主函数

  1.主函数是一个特殊的函数,可以被jvm调用
  2.public:代表着该函数访问权限是最大的
  3.static:表示随着类的加载而加载
  4.void  :主函数没有返回值
  5.main  :不是关键字,但是很特别,可以被jvm识别,javac启动编译器,java启动jvm

  三 对象私有化

 *构造对象私有化,可以防止方法被使用

  四 静态代码块

  static {执行语句}
  静态代码块随着类的加载而运行,只执行一次,通过静态代码块可以判断类有没有被加载
  构造代码块给对象创建的  用{执行语句}表示,创建对象时会执行,构造代码块要比构造函数先初始化

 五 构造对象创建过程中程序进行了哪些步骤

 例如Person p=new Person("zhangsan","20");
  1.因为new的时候用到的是Person.class文件,所以会现在内存中找到Person.class文件并加载到内存中
  2.执行该类的静态代码块,如果有的话,给Person.class进行初始化
  3.在堆内存中开辟空间,分配内存地址
  4.在堆内存中建立对象的所有属性,并进行默认初始化
  5.对属性进行显示初始化
  6.对对象进行构造代码块初始化
  7.对对象进行对应的构造函数初始化
  8.将堆内存地址付给栈内存中的p变量