Java—static 修饰符和final 关键字

static 修饰符修饰,可以是变量、方法或代码块

  • 类中的静态变量、方法或代码块属于类,而不属于某个特定的对象。
  • 类的静态成员可以直接与类的名称一起使用,而无需创建类的对象。
  • 静态变量或方法也称为类变量或类方法

User:

public class User {
    
    
    // 多个代码块执行是顺序执行, 代码块在创建对象之前由 JVM 自动调用
    {
    
    
        System.out.println("代码块1...");
    }

    {
    
    
        System.out.println("代码块2...");
    }

    // 在调用静态变量和静态方法之前由JVM自动调用,顺序调用
    static {
    
    
        System.out.println("静态代码块1...");
    }

    static {
    
    
        System.out.println("静态代码块2...");
    }
	// 静态变量、类变量
    static String WORD = "静态变量word...";
	// 静态方法、类方法
    public static void show() {
    
    
        System.out.println("静态方法show()...");
    }
	//成员方法
    public void eat() {
    
    
        System.out.println("成员方法eat()...");
    }
	//构造方法
    public User() {
    
    
        System.out.println("构造方法...");
    }
}

Test:

public class Test {
    
    
    public static void main(String[] args) {
    
    
        new User();
    }
}

结果:

静态代码块1...
静态代码块2...
代码块1...
代码块2...
构造方法...

如果Test为:

public class Test {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(User.WORD);
        User.show();
    }
}

则结果为:

静态代码块1...
静态代码块2...
静态变量word...
静态方法show()...

执行顺序

  • 静态代码块->代码块->构造函数
  1. 当类被加载的时候JVM会初始化所有的 static 修饰的属性、方法、代码块(自动顺序执行)
  2. 在调用构造函数之前JVM会初始化所有的成员属性、方法、代码块(自动顺序执行)

由于初始化顺序:静态方法中只能访问静态变量和静态方法


final 关键字

public final static String SURNAME="CAO";

final 修饰符可应用于类、方法和变量

  • final 在应用于类、方法和变量时意义是不同的,但本质是一样的: final 表示不可改变
  • 声明为 final 的类不能被继承
  • 声明的方法不能被重写, 如果一个类是 final 类,那么它的所有方法都隐式的是 final 方法;
  • 声明的变量必须赋初值。 它实质上就是一个常量
  • final的常见类:String System 包装类(Integer,Short,Byte,Long…)

猜你喜欢

转载自blog.csdn.net/qq_44371305/article/details/113354332