• 详解Java的static关键字



    在这里插入图片描述

    🎄静态方法

    • 不依赖于对象实例:静态方法不需要依赖于任何对象实例,因为它们与具体的对象实例无关联。这意味着在没有创建对象实例的情况下,就可以直接通过类名访问或调用静态方法。
    • 可以访问静态成员:静态方法可以访问类的静态成员(静态字段和静态方法),但不能访问非静态成员(实例字段和实例方法)。这是因为静态方法在被调用时,可能还没有任何对象实例被创建,因此无法访问依赖于对象实例的非静态成员。
    • 类级别的操作:静态方法通常用于表示类级别的操作,例如工具方法、单例模式、工厂方法等。这些操作不依赖于具体的对象实例,而是与整个类相关联。
    • 语法结构:静态方法使用static关键字修饰,并且位于类中的任意位置。它可以通过类名直接访问或调用,而不需要创建对象实例。

    🌺静态方法和非静态方法对比

    🛸静态方法实例

    public class MyClass {
        private static int count = 0;
    
        public static void increment() {
            count++;
        }
    
        public static int getCount() {
            return count;
        }
    
        // 其他成员和方法...
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在上面的示例中,我们定义了一个静态方法increment()和一个静态字段count,用于表示某个类的实例数量。静态方法increment()每次被调用时,会将count加1;静态方法getCount()用于获取当前count的值。注意,这两个方法都是静态方法,可以通过类名直接访问或调用,例如MyClass.increment()和MyClass.getCount()

    总之,静态方法不依赖于任何对象实例就能进行访问,因为它们与具体的对象实例无关联,而是与整个类相关联。静态方法在内存中只有一份副本,并且在类加载时初始化,因此可以直接通过类名访问或调用。

    🛸非静态方法实例

    public class MyClass {
        private int count = 0;
    
        public void increment() {
            count++;
        }
    
        public int getCount() {
            return count;
        }
    
        // 其他成员和方法...
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在上面的示例中,我们定义了一个非静态方法increment()和一个非静态字段count,用于表示某个对象实例的数量。非静态方法increment()每次被调用时,会将当前对象实例的count加1;非静态方法getCount()用于获取当前对象实例的count值。注意,这两个方法都是非静态方法,必须通过对象实例来访问或调用,例如obj.increment()和this.getCount()

    总之,非静态方法必须要依赖于对象实例才能进行访问,因为它们与具体的对象实例相关联,并且需要访问依赖于对象实例的实例成员。

    🌹static关键字

    static方法一般称为静态方法,由于静态方法不依赖于任何对象就能进行访问,因此对于静态方法来说,是没有this关键字的(因为静态方法不依赖于任何对象,既然没有对象,就谈不上this了

    为什么静态方法不依赖于任何对象就能进行访问

    静态方法不依赖于任何对象就能进行访问,是因为它们与具体的对象实例无关联,而是与整个类相关联(请看上面讲述静态方法实例的代码)。静态方法在内存中只有一份副本,并且在类加载时初始化,因此可以直接通过类名访问或调用。


    虽然静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员变量和方法的
    我们最常用的static方法就是main方法,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问

    ⭐static变量

    static变量又称为静态变量,静态变量和非静态变量的全部是
    静态变量:被所有的对象所共享,在内存中只有一个副本
    非静态变量:是对象所拥有的,在创建对象的过程在被初始化,存在多个副本,各个对象拥有的副本之间互不影响
    使用static修饰成员方法最大的作用,就是可以通过类名.方法名的方式调用方法,避免了new出对象的繁琐和资源消耗

    ⭐static代码块

    静态代码块(static code block)是使用static关键字定义的一种特殊代码块,在类加载时执行,并且仅执行一次,通过静态代码块,我们可以在类加载时完成一些必要的初始化工作,确保类的静态成员在后续的使用中具备正确的状态

    静态代码块的主要特点如下:

    • 执行时机:静态代码块在类加载过程中被执行,而不是在创建对象实例时执行。它会在类首次被加载时自动执行,并且只执行一次。一般情况下,静态代码块在类加载时的准备阶段执行。
    • 作用范围:静态代码块属于整个类,与具体的对象实例无关。它可以用于初始化静态成员(静态字段)或执行其他一次性的静态操作。
    • 访问权限:静态代码块可以访问类中的静态成员(静态字段、静态方法等),但无法直接访问非静态成员(实例字段、实例方法等),因为非静态成员需要依赖具体的对象实例才能访问。
    • 语法结构:静态代码块使用static关键字修饰,并且位于类中的任意位置,通常紧跟在静态字段的定义之后。它使用一对大括号{}包裹起来,内部可以包含任意的Java代码。

    以下是一个静态代码块的示例:

    public class MyClass {
        static {
            // 静态代码块中的代码
            System.out.println("Static block executed.");
        }
    
        // 其他成员和方法...
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在上面的示例中,当MyClass类被加载时,静态代码块会被执行,并输出"Static block executed."。注意,静态代码块只会执行一次,即使创建多个MyClass对象实例。

    静态代码块常用于初始化静态字段或执行其他一次性的静态操作,例如加载配置文件、初始化数据库连接等。它在类加载时自动执行,确保了静态成员的初始化在使用之前完成。

    总之,静态代码块是使用static关键字定义的一种特殊代码块,在类加载时执行,并且仅执行一次。它可以用于初始化静态成员或执行其他一次性的静态操作,通常位于类中的任意位置,紧跟在静态字段的定义之后。

    希望本文能够为您带来新的思考和启发,也期待与您共同分享更多关于(文章主题)的想法。让我们携手并肩,共同创造美好的未来!

    在这里插入图片描述

  • 相关阅读:
    移动端/微信小程序/uni-app 性能优化随手总结
    webpack + vite 前端构建工具
    ROS学习笔记(五)---话题发布
    机器学习One-Hot编码
    【C语言】汉诺塔 —— 详解
    简单聊聊G1垃圾回收算法整个流程 --- 理论篇 -- 下
    HTML篇_二、HTML简介_HTML入门必修第一课
    ​力扣解法汇总1624-两个相同字符之间的最长子字符串
    HTML5 基础
    初识设计模式 - 工厂模式
  • 原文地址:https://blog.csdn.net/m0_72853403/article/details/134550879