static关键字
1、static修饰静态变量
语法特征:
1、static 修饰的静态成员变量在内存的数据区。
2、static 修饰的静态成员变量在整个代码的运行周期中有且只有一个。
3、static 修饰的静态成员变量在类文件加载阶段,需要准备就绪,已具备数据提供能力和数据存储能力。
4、static 修饰的静态成员变量别名类变量,语法建议直接通过类名操作。
5、使用建议:
静态成员变量最好不要和类对象有相关性。
静态成员变量生命周期从类加载开始道程序结果。
类对象从实例化对象对象开始,到JVM GC 回收结束。 可以实例化对象相当于程序开始运行,晚于静态成员变量加载。 GC 收回是在程序推出之前,完成内存收回工作之后,静态成员变量销毁。
2、static 修饰成员方法
语法特征:
1、静态成员方法使用 static 修饰。
2、static 修饰的静态成员方法不允许使用类内的非静态成员。
static 修饰的静态成员方法在类加载阶段已具备执行能力,方法内有非静态相关内容,无法执行,因为非静态成员需要实例化对象调用操作,加载过程中没有相关的对象存在。没有对象。
3、 static 修饰的静态成员方法可以直接使用类内的其他静态资源。
4、静态成员方法常用于工具类封装。 静态成员方法是可以通过类名直接调用,可以摆脱类对象的限制,执行效率高。无需考虑对象实例化过程 ,以及销毁对象过程的时间和内存空间的占用浪费。
5、静态成员方法推荐使用类名直接调用,也可以称之为类方法。
3、static 修饰静态代码块
语法特征:
1、静态代码块在类文件加载阶段一定执行!! 并且有且执行一次。
2、静态代码块可以调用类内的其他静态资源。
3、静态代码块不可以调用类内的非静态资源。
4、静态代码块一般用于程序初始化操作,预处理操作,项目运行前准备工作。 案例:配置资源读取、配置文件读取、相关资源加载。
4、static 面试题
package com.qfedu.c_static;
public class Demo5 {
static Demo5 d1 = new Demo5();
static Demo5 d2 = new Demo5();
{
System.out.println("构造代码块");
}
static {
System.out.println("静态代码块");
}
public Demo5() {
System.out.println("构造方法");
}
public static void main(String[] args) {
Demo5 demo5 = new Demo5();
}
}
结果: /*
构造代码块
构造方法
构造代码块
构造方法
静态代码块
构造代码块
构造方法
*/