【轻松拿捏 】Java-static关键字(面试)
在Java中,static
关键字用于创建独立于类对象的静态资源。这些资源是在类加载时初始化的,并且可以在没有类实例的情况下被访问。
- 静态变量(或类变量):使用
static
关键字声明,它是该类的所有实例共享的。
public class MyClass {
public static int staticVariable = 10;
}
// 访问静态变量
System.out.println(MyClass.staticVariable);
- 静态方法:使用
static
关键字声明,它可以被类直接调用,不需要类的实例。
public class MyClass {
public static void staticMethod() {
System.out.println("This is a static method.");
}
}
// 调用静态方法
MyClass.staticMethod();
- 静态代码块:当类被加载时,静态代码块会被执行,且只执行一次。
public class MyClass {
static {
System.out.println("This is a static block.");
}
}
// 加载类时,静态代码块会被执行
- 静态类:使用
static
关键字修饰的内部类,称为静态内部类。
public class MyClass {
public static class NestedClass {
// 内部类的代码
}
}
// 创建静态内部类的实例
MyClass.NestedClass nestedClass = new MyClass.NestedClass();
主动使用和被动使用:
主动使用:
- 创建类的实例
- 访问或修改类的静态变量
- 调用类的静态方法
- 反射
- 初始化子类
- JVM启动时的启动类
被动使用:
- 访问静态变量,如果该变量不是在声明时就初始化的,那么会触发其初始化
- 访问静态常量(final static),如果其值在编译时就已知且是常量池中的常量
注意事项:
- 静态方法不能直接访问非静态变量。
- 静态方法中不能使用
this
和super
关键字。 - 不能在接口中使用
static
关键字。
使用
static
关键字的场景:- 工具类:通常包含只使用静态方法的工具类。
- 常量:常用
static final
修饰的变量作为常量。 - 单例模式:通过私有构造器和静态方法来实现单例模式。
- 内部类:特别是在需要隐藏实现时,可以使用静态内部类。
常见的面试问题:
- 何时用
static
关键字? - 静态方法能否被覆盖(Override)?
- 静态代码块、构造代码块、构造函数的执行顺序?
- 何时用
以上是static
关键字的基本概念和使用场景,面试中可能会根据展开讨论。
评论已关闭