首页 > 代码库 > static知识点

static知识点

静态:static关键字 用于修饰成员(成员变量和成员函数)
   静态修饰内容 被对象所共享

特点:
 随着类的加载而加载
  就是说,静态会随着类的消失而消失。生命周期长。
 优先于对象存在
  成员变量也叫实例变量    对象在才在
  静态成员变量也叫类变量   类在就在了 类先存在对象后存在。
 被所有对象共享
 可以直接被类调用

注意:
 静态方法只能访问静态成员
  没对象可以 类.静态方法 对象都没怎么访问实例变量
 静态方法中不可以写this, super关键字
  同理 对象都没哪里来的this
 主函数是静态的

当成员被静态修饰后,就多了一个调用方式。 没对象也可以被调用。
除了可以被对象调用外还可以直接被类名调用。 类名.静态成员

static成员 在方法区 共享区 数据区 3种叫法。里面存放了方法和共享数据。

实例变量和类变量区别:
 存放位置:类变量随着类的加载而存在存在于方法区中
    实例变量随着对象建立而存在堆内存中
 生命周期:
    类变量随着类的消失而消失
    实例变量随着对象的消失而消失

静态的利弊:
利:对对象的共享数据进行单独的存储。节约空间。没必要每个对象都存储一个
    可以直接被类名调用。
弊: 生命周期过长,访问出现局限性(只能访问静态。)

什么时候使用static; 要分两方面:
因为静态修饰的内容有成员变量和函数

什么时候定义静态变量(类变量)呢
当对象中出现共享数据时,该数据被静态所修饰 对象中的特有数据定义成非静态存在堆内存。

什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象特有数据),该功能可以定义成静态的。

静态应用
 每一个应用程序中都有共性的功能。
 可以将这些功能进行抽取,独立封装。以便复用。
 虽然可以通过建立类的对象使用这些工具的方法,如果对象不需要对特殊数据(成员变量)
 可以将类中的方法定义成static的,直接通过类名调用即可。
 将方法都静态后,可方便使用,但是该类还是可以被其他程序建立对象。
 为了更为严谨,强制让该类不能建立对象。
 可以通过将构造函数私有化完成。

静态代码块
格式
 static{
  静态代码块中的执行语句。
 }

特点
 随着类的加载而执行,只执行一次。并优先于构造函数。创建对象或者 类.静态函数后就不执行了
 空指向类是不加载的,只有用到才执行。
 用于给类进行初始化。不用建立对象就初始化。

prreson p = new person("zhangsan",20);
 1 因为new用到person.class:所以会先找到person.class文件并加载到内存。
 2 执行该类中的static代码块,如果有的话,给person.class类进行初始化。
 3 在堆内存中开辟空间, 分配内存地址。
 4 在堆内存中建立对象的特有属性,并进行默认初始化。
 5 对属性进行显示初始化。
 6 对对象进行构造代码快初始化。
 7 对对象进行对应的构造函数初始化
 8 将内存地址赋给桟内存中的P变量。

static知识点