Java中的static关键字理解和总结

来源:互联网 发布:吕雉与戚夫人知乎 编辑:程序博客网 时间:2024/06/05 10:56

Java中static关键字的理解和小节

1. static 关键字修饰成员变量

  1. 该变量位于内存四区(堆、栈、方法区、静态区)中的静态区。

  2. 内存位置决定了它的属性:“类成员变量”,随着类的加载而加载存在,在对象创建之前存在,因此类中的静态函数也是一样,它里面只能用类中的静态变量,调用类中的静态方法。访问的时候 classNmae.NumberVar。

  3. 这个关键字修饰成员变量的意义:当一个类中某个成员变量,比如“国籍”是所有类“共有”的,那么这个时候静态修饰这个成员变量就有必要,因为创建多个对象的时候,这些对象内存中不会反复给这个“国籍”成员变量开辟空间,而是在对应类加载的时候就已经存在于静态区,供所有类使用,修改它则,所有类访问该成员变量的时候都会变化。

2. static 关键字修饰成员方法

  1. 该方法随着类的加载而加载,存在于静态方法区,因此也称之为“类成员方法”。注意该静态方法中不能访问该类中的非静态成员变量,只能访问静态成员变量,原因很简单,静态是在类加载的时候加载完毕,而普通成员是在 new 对象的时候才分配空间提供访问,如果在静态中访问后创建的非静态成员(函数或者变量)会报错,推理得到,静态方法里面也是不可以有this和super的,因为比如this它是当前调用这个方法对象的“引用”,而静态存在之前,对象(和对应引用)是没有的。访问的方式:className.func(…);

  2. 应用意义和应用:资源共享(属性和方法)例如:统计创建对象数目属性,单例模式(懒汉模式和饿汉模式 )。

  3. 小节以下:static静态结构(静态属性,方法,代码块,内部类)生命周期“出生”都早于一些非静态的结构,而且“消亡”也晚于非静态结构,它们生命周期很长。

3. static修饰的代码块和非static修饰的代码块

  1. 关于属性赋值方式的总结:静态代码块、默认初始化、显式初始化和非静态代码块、构造、通过方法赋值操作。

  2. 代码块看成类的成员之一,它可以被static修饰,叫静态代码块。

  3. 代码块用于初始化非静态成员变量,里面可以调用静态方法和非静态方法,可以修改静态变量和非静态变量,new 对象的时候执行顺序是:成员变量和方法先“默认”初始化,然后显示初始化成员属性和非静态代码块(此处两个结构按照顺序进行),然后才构造函数。但是对于静态代码块,里面必须是访问静态方法和静态成员变量,而且静态代码块,在类加载时候就执行了,且只被加载一次。

  4. 代码块有多个时候按照顺序执行。

原创粉丝点击