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

简介: 详解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、内部类属于整个外部类,而不属于外部类的每个对象,只可以访问外部类的静态变量和方法

目录
相关文章
|
3天前
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
4天前
|
算法 Java 数据安全/隐私保护
【Java开发指南 | 第二篇】标识符、Java关键字及注释
【Java开发指南 | 第二篇】标识符、Java关键字及注释
13 5
|
4天前
|
安全 算法 Java
Java一分钟:线程同步:synchronized关键字
【5月更文挑战第11天】Java中的`synchronized`关键字用于线程同步,防止竞态条件,确保数据一致性。本文介绍了其工作原理、常见问题及避免策略。同步方法和同步代码块是两种使用形式,需注意避免死锁、过度使用导致的性能影响以及理解锁的可重入性和升级降级机制。示例展示了同步方法和代码块的运用,以及如何避免死锁。正确使用`synchronized`是编写多线程安全代码的核心。
57 2
|
4天前
|
小程序 Java 容器
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
10 0
|
4天前
|
Java
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
深入浅出Java基础语法:标识符、关键字、变量、数据类型、运算符与控制语句
8 0
|
4天前
|
存储 Java 开发者
探索Java开发中触发空指针异常的场景
作为一名后端开发者在Java编程的世界中,想必大家对空指针并不陌生,空指针异常是一种常见而又令人头疼的问题,它可能会在我们最不经意的时候突然出现,给我们的代码带来困扰,甚至导致系统的不稳定性,而且最可怕的是有时候不能及时定位到它的具体位置。针对这个问题,我们需要深入了解触发空指针异常的代码场景,并寻找有效的方法来识别和处理这些异常情况,而且我觉得空指针异常是每个Java开发者都可能面临的挑战,但只要我们深入了解它的触发场景,并采取适当的预防和处理措施,我们就能够更好地应对这个问题。那么本文就来分享一下实际开发中一些常见的触发空指针异常的代码场景,并分享如何有效地识别和处理这些异常情况。
22 1
探索Java开发中触发空指针异常的场景
|
4天前
|
存储 安全 Java
【亮剑】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制
【4月更文挑战第30天】Java并发编程涉及`ThreadLocal`、`Volatile`、`Synchronized`和`Atomic`四个关键机制。`ThreadLocal`为每个线程提供独立变量副本;`Volatile`确保变量可见性,但不保证原子性;`Synchronized`实现同步锁,保证单线程执行;`Atomic`类利用CAS实现无锁并发控制。理解其原理有助于编写高效线程安全代码。根据业务场景选择合适机制至关重要。
|
4天前
|
Java 编译器
【Java探索之旅】this 关键字 解决你的成员变量困惑
【Java探索之旅】this 关键字 解决你的成员变量困惑
21 0
|
4天前
|
Java
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字
8 0
|
4天前
|
Java
Java里的关键字 __final
Java里的关键字 __final