【面试干货】Static关键字的用法详解
- 1、Static修饰内部类
- 2、Static修饰方法
- 3、Static修饰变量
- 4、Static修饰代码块
- 5、总结
💖The Begin💖点点关注,收藏不迷路💖 |
在Java编程语言中,static是一个关键字,它可以用于多种上下文,包括类、方法、变量和代码块。static的主要作用在于它修饰的内容是与类相关联的,而不是与类的某个特定实例(对象)相关联的。
1、Static修饰内部类
使用static修饰的内部类称为静态内部类。
静态内部类不需要外部类的实例即可创建,因此它不能访问外部类的非静态成员(变量和方法)。
public class OuterClass { private static String outerStaticField = "Outer static field"; static class StaticNestedClass { // 静态内部类中可以访问外部类的静态成员 public void printOuterStaticField() { System.out.println(outerStaticField); } }
}
2、Static修饰方法
静态方法属于类本身,而不是类的实例。
因此,它们不能访问非静态的成员(因为它们需要一个类的实例来访问),而且它们可以通过类名直接调用。
public class MyClass { public static void staticMethod() { System.out.println("This is a static method"); }// 主方法可以直接调用静态方法 public static void main(String[] args) { MyClass.staticMethod(); // 无需创建MyClass的实例 }
}
3、Static修饰变量
静态变量(也称为类变量)属于类,而不是类的实例。
这意味着它们被所有类的实例共享,并且只存在一份拷贝。静态变量在类被加载到JVM时分配内存,并且只分配一次。
public class MyClass { public static int staticVar = 42;// 可以通过类名直接访问静态变量 public static void main(String[] args) { System.out.println(MyClass.staticVar); // 输出42 }
}
4、Static修饰代码块
静态代码块在类被加载到JVM时执行,并且只执行一次。
它们通常用于初始化静态变量或执行只需要执行一次的代码。
public class MyClass { static { System.out.println("Static block executed"); } // 主方法会触发类的加载,因此静态代码块会被执行 public static void main(String[] args) { // 当MyClass被加载时,静态代码块已经被执行 }
}
5、总结
1、静态方法不能直接访问非静态成员(变量和方法),因为它们属于类的实例,而静态方法属于类本身。
2、在静态方法中,this和super关键字都是无效的,因为this引用当前对象,而静态方法不依赖于任何对象。
3、静态变量在内存中只有一份拷贝,并且它们的生命周期与类相同。
4、静态代码块按照它们在类中的出现顺序依次执行,并且只执行一次。
💖The End💖点点关注,收藏不迷路💖 |