文章目录
- static关键字
- static可修饰
- static方法举例
- static代码块
- 拓展
- 其他链接
static关键字
- 加载顺序
- 类是构建对象的模板,一个类多个对象
- static修饰的方法或者变量都属于类,类独有的
static可修饰
- 修饰变量(属于类变量,被创建出来的所有对象共享)
- 方法
- static修饰的方法属于类,叫做静态方法
- 在静态方法不能调用非静态方法(静态方法在调用时可能不存在对象实例,无法访问对象相关的成员变量或方法。如果静态方法需要访问非静态方法的功能,通常需要通过创建对象实例来调用非静态方法。)
- 非静态方法调用静态方法
- 块(一直都是放在main之前运行,可以用来优化程序)
- 静态代码块(static block)是在类被加载时执行的一段代码块。它通常用于在类加载时进行一些初始化操作,具有以下好处:
-
- 初始化静态变量:静态代码块可以用于初始化静态变量。这些变量可以在类的任何地方被访问,而不需要创建类的实例。
-
- 执行静态方法:静态代码块可以包含调用静态方法的逻辑。这些方法可以执行一些初始化任务,例如读取配置文件或建立数据库连接。
-
- 异常处理:静态代码块还可以处理静态方法中可能抛出的异常。通过在静态代码块中捕获异常并进行处理,可以确保在类加载时不会因为异常而导致加载失败。
-
- 执行一次性任务:静态代码块中的代码仅在类加载时执行一次,因此它们适合用于执行一些只需在应用程序启动时执行一次的任务,例如初始化静态资源或设置全局变量。
-
- 提高代码可读性:将一些与类初始化相关的逻辑放在静态代码块中可以提高代码的可读性和可维护性,因为这些逻辑会被集中在一起,而不是分散在类的其他地方。
- 总的来说,静态代码块是在类加载时执行的一段代码,它可以用于执行初始化操作、处理异常、执行一次性任务等,从而提高代码的效率、可读性和可维护性。
static方法举例
public class Example {
private static int value;
// 非静态方法
public void setValue(int newValue) {
value = newValue; // 可以直接访问静态变量
}
// 静态方法
public static void printValue() {
// 无法在静态方法中使用 this 关键字
// this.setValue(10); // 错误!静态方法无法使用 this 关键字
// System.out.println(this.value); // 错误!静态方法无法使用 this 关键字
}
public static void main(String[] args) {
Example example = new Example();
example.setValue(10); // 正确!通过对象实例调用非静态方法
printValue(); // 正确!调用静态方法
}
}
static代码块
public class Test1 {
static{
System.out.println("我是main之前的static");
}
{
System.out.println("我仅仅是一个Person中的main之前代码块");
}
public static void main(String[] args) {
new Test1();
System.out.println("我是main");
}
static{
System.out.println("我是main之后的static");
}
{
System.out.println("我仅仅是一个Person中main之后代码块");
}
}
//输出结果:
// 我是main之前的static
// 我是main之后的static
// 我仅仅是一个Person中的main之前代码块
// 我仅仅是一个Person中main之后代码块
// 我是main
拓展
静态常量池是 Java 虚拟机(JVM)中的一部分,它是存储类、方法和接口中使用的常量的内存区域。在编译 Java 程序时,所有的常量(如字符串文字、final 域的常量值等)都会被编译器放入到静态常量池中,然后在类加载的过程中被加载到内存中。
静态常量池具有以下特点:
- 存储位置:静态常量池存储在方法区(在 Java 8 及之前版本中)或元空间(在 Java 8 及之后版本中)中,与类的字节码一起被加载到内存中。
- 不同类型的常量:静态常量池可以包含各种类型的常量,如整型、浮点型、字符串、类和接口引用等。
- 共享和重用:静态常量池中的常量可以被多个类或方法引用,这样可以节省内存空间,并且提高了代码的重用性。
- 编译期间确定:静态常量池中的常量是在编译期间确定的,并且在运行时不会改变。
- 字符串常量池:字符串常量池是静态常量池的一部分,用于存储字符串字面量。字符串常量池具有特殊的重用性,相同的字符串字面量在常量池中只会存在一份副本,这样可以节省内存。
- 静态常量池是 Java 虚拟机中用于存储类、方法和接口中使用的常量的内存区域,它提供了共享和重用常量的机制,并在编译期间确定常量的值。
其他链接
java基础:java中的static关键字解析
Java的Static关键字的作用