static关键字
1、static 修饰成员变量:
i. 静态成员变量
在方法区中,被所有对象所共享
1. 由于被所有对象共享,只要有一个对象改变静态成员变量的值,所有的对象使用的静态变量值也就都改变了
2. 由于在方法区中,所以可以直接通过 类名.静态成员变量 的形式来调用
ii. 原理(理解):
1. 静态成员变量和非静态成员变量的位置:
内存空间不一样:
a) 静态成员变量:依赖于类,在方法区
b) 非静态成员变量:依赖于对象,在堆内存中
2. 静态成员变量和非静态成员变量的生命周期:
生命周期不一样:
a) 静态成员变量,随着类的加载而存在于方法区,类只加载一次
b) 非静态成员变量,随着对象的创建而存在于堆内存中,随着对象的创建而创建,随着对象的消失而消失
只要new 对象,每个对象都有自己特有的变量(属性)
2、static修饰方法:
1. 成员 方法被static 修饰,叫做静态方法
2. 特点:
可以不用创建对象,直接通过 类名.方法 的形式来调用
3. 静态方法:
a) 静态方法不可以访问非静态成员变量
b) 静态方法可以访问静态成员变量
4. 非静态方法:
非静态成员方法,既可以访问非静态成员变量,也可以访问静态成员变量
5. 总结:
a) 静态方法只可以访问静态成员变量
b) 非静态成员方法,既可以访问非静态成员变量,也可以访问静态成员变量
c) 可以通过私有化静态类的构造方法,达到不允许创建静态类的对象
6. static 方法要注意:
不能出现 this 与 super 关键字
原因:调用静态方法可以使用类名直接调用,这时候有可能在内存中还没有存在着对象
3、静态代码块
i. 格式:
ii. 作用:
iii. 静态代码块注意细节:
1. 随着类的加载而执行,只执行一次
构造代码块初始化对象,静态代码块就是初始化类的
2. 静态代码块:程序运行加载类,类只加载一次,所以静态代码块也只执行一次
构造代码块,只要创建对象就会执行
|
|