【Java|基础篇】详解static关键字和代码块

简介: 本文主要讲解static关键字以及代码块的执行顺序以及各部分代码块的作用.

1.前言

本文主要讲解static关键字以及代码块的执行顺序以及各部分代码块的作用.


2.static关键字

Java中的static关键字是用来修饰类成员(静态成员)的,可以用来修饰静态变量、静态方法和静态代码块。


2.1 static修饰成员变量

先来看这段代码:

21f1e215632a4f5b956ddc1f22b4c494.png

public class Student {
    public String id;
    public String name;
    // static 修饰的成员变量
    public static String major = "软件工程";
    public Student(String id, String name) {
        this.id = id;
        this.name = name;
   }
}



static修饰成员变量有三个特点:


静态成员属于类,而不是属于实例,因此可以通过类名直接访问。

静态成员在类被加载时就被初始化,不需要创建类的实例。

静态成员被所有实例共享,可以用来存储类级别的信息。

简单来说就是 虽然可以通过实例化的对象来访问 static修饰的成员变量,但是不推荐这么使用. static修饰的成员变量也成为类成员. 推荐使用类名.的方式进行访问. 通过类名.的方式访问也就说明了static修饰的成员变量在类被加载时就被初始化,不需要创建类的实例. student1和student2都有major 这个成员变量,说明 静态成员被所有实例共享.


小结:使用static关键字修饰的变量称为静态变量,也叫类变量。静态变量属于类,而不是属于实例。静态变量的值被所有类实例共享,可以通过类名直接访问。可以在类的任何方法中访问静态变量,不需要创建类的实例。


2.2 static修饰成员方法

1.静态方法只能访问静态成员

2e0d939ef73e417aac5470a9b160d93a.png


在图中我们能到看name没有被static修饰,因此在被static修饰的方法func中报错了.


2.静态成员方法只能访问静态的成员方法

cd57627d74d24d1ca8ba04196a8637df.png


由图中可以看到在func中调用func3方法报错了. 因此静态成员方法只能访问静态的成员方法

3.静态成员方法属于类


5146145e91074512a321fd3f400efb10.png

静态方法属于类,因此也可以通过类名.的方式进行访问


其实还有一点,静态方法无法重写,不能用来实现多态,这一点会在多态中讲解.


小结: 使用static关键字修饰的方法称为静态方法,也叫类方法。静态方法属于类,而不是属于实例。静态方法可以直接通过类名访问,不需要创建类的实例。静态方法只能访问静态变量或调用其他静态方法。


3. 代码块

代码块是指一段被大括号包围的代码片段,用于组织代码和限制变量作用域


3.1 普通代码块

普通方法块直接使用{}定义

示例:


    public static void main(String[] args) {
        {
            int x = 20;
            System.out.println(x);
        }
        int x = 10;
        System.out.println(x);
    }
    // 输出结果:
    // 20
  // 10

这种用法很少,了解即可


3.2 静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量

public class Student {
    public String id;
    public String name;
    public static String major;
    static {
        major = "软件工程";
        System.out.println("执行了 静态代码块");
    }
}


0d033a99f0c54c29af81ca45d31402e0.png


静态代码块不管生成多少个对象,其只会执行一次


3.3 构造代码块

构造块:定义在类中的代码块(不加修饰符)。也叫实例代码块。构造代码块一般用于初始化实例成员变量。

示例:

Student类


public class Student {
    public String id;
    public String name;
    {
        this.id = "1";
        this.name = "张三";
    }
    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.toString());
    }

运行结果:

c3d294bb6b914de8b663ce2d95e3d484.png


代码块使用时的注意事项:


1.态代码块不管生成多少个对象,其只会执行一次

2.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并

3.实例代码块只有在创建对象时才会执行

来看一下代码块的执行顺序:


public class Demo {
    private static int x = 1;
    private int y = 2;
    static {
        System.out.println("静态代码块1,x=" + x);
        x = 10;
    }
    {
        System.out.println("实例代码块1,x=" + x + ", y=" + y);
        y = 20;
    }
    public Demo() {
        System.out.println("构造函数,x=" + x + ", y=" + y);
        y = 30;
    }
    static {
        System.out.println("静态代码块2,x=" + x);
        x = 100;
    }
    {
        System.out.println("实例代码块2,x=" + x + ", y=" + y);
        y = 40;
    }
    public static void main(String[] args) {
        Demo demo1 = new Demo();
        Demo demo2 = new Demo();
    }
}

代码块的执行顺序:

1.先执行静态的(加载了类就会执行),且只会执行一次.如果有多个静态代码块,看定义的顺序

2.其次执行实例代码块,有多个时看定义的顺序

3.构造方法执行


4.总结

static关键字可以用来定义类级别的变量、方法和代码块,通过类名直接访问静态成员变量和静态成员方法. 而代码块的执行顺序以及各部分代码块的作用也很重要.


感谢你的观看!希望这篇文章能帮到你!

专栏: 《从零开始的Java学习之旅》在不断更新中,欢迎订阅!

“愿与君共勉,携手共进!”

相关文章
|
10天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
10天前
|
缓存 安全 Java
Java volatile关键字:你真的懂了吗?
`volatile` 是 Java 中的轻量级同步机制,主要用于保证多线程环境下共享变量的可见性和防止指令重排。它确保一个线程对 `volatile` 变量的修改能立即被其他线程看到,但不能保证原子性。典型应用场景包括状态标记、双重检查锁定和安全发布对象等。`volatile` 适用于布尔型、字节型等简单类型及引用类型,不适用于 `long` 和 `double` 类型。与 `synchronized` 不同,`volatile` 不提供互斥性,因此在需要互斥的场景下不能替代 `synchronized`。
2098 3
|
2月前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
55 9
|
2月前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
56 8
|
2月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
49 4
|
2月前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
3月前
|
Java 程序员
在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。
【10月更文挑战第13天】在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。本文介绍了Java关键字的基本概念及其重要性,并通过定义类和对象、控制流程、访问修饰符等示例,展示了关键字的实际应用。掌握这些关键字,是成为优秀Java程序员的基础。
36 3
|
3月前
|
算法 Java
在Java编程中,关键字和保留字是基础且重要的组成部分,正确理解和使用它们
【10月更文挑战第13天】在Java编程中,关键字和保留字是基础且重要的组成部分。正确理解和使用它们,如class、int、for、while等,不仅能够避免语法错误,还能提升代码的可读性和执行效率。本指南将通过解答常见问题,帮助你掌握Java关键字的正确使用方法,以及如何避免误用保留字,使你的代码更加高效流畅。
46 3
|
3月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
43 3
|
3月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?