Java的static关键字

1. Static关键字

1.1 静态方法

static标记的方法被称为静态方法。

  • 静态方法在调用的时候不需要实例化对象

  • 静态方法直接通过类的名称来调用的

  • 静态方法内部只能调用静态变量和其他静态方法,但是非静态方法可以调用静态方法

  • 静态方法中不能使用this

  • 静态方法不能自动销毁,自建立开始静态方法一直存在内存中,直到JVM关闭

  • 子类在调用之前,父类中所有的静态方法都会执行

静态方法的本质是共享代码段,类中的静态方法和静态变量在创建后共用一块内存

1.2 静态变量

静态变量在类被加载的时候就初始化了,在该类的任何静态方法执行之前就初始化,类的所有实例对象共享同一个静态变量

在这里插入图片描述

静态变量的本质是共享数据段,所以一旦改变一个对象中静态变量的值后,其所有实例对象的该变量值也会随之改变

用一个例子来说明静态方法的执行:

public class StaticSuper {
    static {
        System.out.println("super static block");
    }
    StaticSuper() {
        System.out.println("super constructor");
    }
}

public class StaticTest extends StaticSuper {
    static int rand;

    static {
        rand = (int) (Math.random()*6);
        System.out.println("static block"+rand);
    }

    StaticTest(){
        System.out.println("constructor");
    }

    public static void main(String[] args) {
        /*
        在子类的main方法执行之前,会先执行父类中的静态方法,然后执行子类中的静态方法
        super static block
		static block3
        */
        System.out.println("main");
        
        StaticTest staticTest = new StaticTest();
        // 先执行父类构造方法,然后执行子类构造方法
        // 输出super constructor constructor
    }
}

2. final关键字

final关键字表示最终的意思,即不能再被修改

  • final修饰的变量不能被修改

  • final修饰的方法不能被重写

  • final修饰的类不能被继承

如果一个类已经标记为final,不能其方法就不需要再被标记为final

3. 权限修饰符

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章