详解static关键字在Java中的各种适应场景,这个很重要!

写在开头

静态(static)关键字在Java的众多关键字中举足轻重!也是很多大厂面试官特别喜欢问的面试高频知识点,今天我们就一起学习,梳理,重温一下这个关键吧,之所以用重温修饰是因为在过往的文章中早已提到了static,无论是变量中还是方法中甚至于类中,static都是不可或缺的!

我们知道要想调用类中的属性和方法,通常情况下,需要创建一个对象,初始化完成之后,通过对象的引用去访问,而static修饰的方法和变量为类所有,因此,可以直接跳过对象的初始化,主要类被加载了就可以直接通过类名.属性名/方法名进行直接调用!

一、静态变量

【代码示例】

public class Person {
    //成员变量
    //在类内部但在方法体外声明的变量称为成员变量,或者实例变量,或者字段。
    //之所以称为实例变量,是因为该变量只能通过类的实例(对象)来访问。
    int data1 = 3;
    //静态变量
    //通过 static 关键字声明的变量被称为静态变量(类变量),
    //它可以直接被类访问
    static int data2 = 4;
    public int sum(){
        //局部变量
        //在方法体内声明的变量被称为局部变量,该变量只能在该方法内使用,
        //类中的其他方法并不知道该变量。
        int a = 1;
        int b = 2;
        return a+b;
    }
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.data1 == person.sum());
        System.out.println(Person.data2 == person.sum());
    }
}

二、静态方法

【代码示例】

public class Test {
    public static void main(String[] args) {
        System.out.println(sub(2,1));
    }
    //若方法的声明中加上了static关键字,静态方法是属于类的,
    //而不是属于类创建的对象或实例的,故在调用时无需通过对象实例。
    public static int sub(int a,int b){
        return a - b;
    }
}

三、静态代码块

虽然静态代码块和main()方法都被static修饰,但静态代码块通常用来初始化一些静态变量,它会优先于 main() 方法执行。来段代码感受一下:
【代码示例】

public class Test {
    
    public static void main(String[] args) {
        System.out.println("main 方法");
    }

    static {
        System.out.println("静态代码块");
    }
}

输出:

静态代码块
main 方法

四、静态内部类

静态嵌套类,并没有对实例的共享关系,仅仅是代码块在外部类内部
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它
静态嵌套类仅能访问外部类的静态成员和方法
在静态方法中定义的内部类也是静态嵌套类,这时候不能在类前面加static关键字。

【代码示例】

class OuterFish {
    static class InnerFish {
    }
}

class TestStaticFish { 
    public static void main(String[] args) {
        //创建静态内部类对象
        OuterFish.InnerFish iFish = new OuterFish.InnerFish();
    }
}

static在Java中的主要用法就这么多了,那么好,接下来我们就根据它的用法来进行最后的总结

总结

1、static 可以修饰变量、方法、代码块和内部类 static 变量是这个类所有,由该类创建的所有对象共享同一个 static
2、可以通过创建的对象名.属性名 和 类名.属性名两种方式访问 static 变量在内存中只有一份 static
3、修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,只会被创建一次 static 修饰的变量可以重新赋值 static
4、方法可以通过对象名.方法名和类名.方法名两种方式来访问 static 方法中不能用 this 和 super 关键字 static
5、方法必须被实现,而不能是抽象的abstract static 方法不能被重写 static
6、代码块在类被第一次加载时执行静态代码块,且只被执行一次,主要作用是实现 static 属性的初始化 static
7、内部类属于整个外部类,而不属于外部类的每个对象,只可以访问外部类的静态变量和方法

你可能感兴趣的:(Java基础,Java成长计划,java,开发语言)