static关键字

static 是Java中的一个关键字,它可以用于修饰类的成员变量和方法,具有特殊的含义和用途。下面是关于static关键字的主要用法和含义:

  1. 静态变量(Static Variables)
    • 静态变量也称为类变量,它们属于类而不是类的实例。
    • 所有该类的对象共享相同的静态变量,它们在内存中只有一个副本。
    • 静态变量在类加载时被初始化,并且可以通过类名来访问。
    • 通常用于存储与类相关的常量值或共享的状态信息。
复制代码
java 复制代码
public class MyClass {
    static int count = 0; // 静态变量

    public MyClass() {
        count++; // 每创建一个实例,静态变量count加1
    }
}

2.静态方法(Static Methods)

  • 静态方法属于类而不属于实例,可以直接通过类名调用,而不需要创建类的实例。
  • 静态方法不能访问非静态成员(变量和方法),只能访问静态成员。
  • 静态方法通常用于执行与类相关的操作,如工具方法或工厂方法。
java 复制代码
public class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

3.静态代码块(Static Initialization Block)

  • 静态代码块是一个在类加载时执行的代码块,用于执行类级别的初始化操作。
  • 静态代码块只在类加载时执行一次,通常用于初始化静态变量或执行其他一次性操作。
java 复制代码
public class MyClass {
    static {
        // 静态代码块,在类加载时执行
        System.out.println("Class MyClass is loaded.");
    }
}

静态导入(Static Import)

  • 静态导入允许在不使用类名的情况下直接访问类的静态成员。
  • 通过静态导入,可以简化代码,提高可读性。
java 复制代码
import static java.lang.Math.*;

public class MathOperations {
    public static void main(String[] args) {
        double result = sqrt(25); // 静态导入后,可以直接使用sqrt方法
        System.out.println("Square root of 25 is: " + result);
    }
}

static关键字的主要作用是创建与类关联而不是与类的实例关联的成员。它在多种情况下都非常有用,如共享状态信息、提供工具方法等。但需要注意的是,过度使用static可能会导致代码难以维护和测试,因此应谨慎使用。
2.1 static 可以修饰属性
类成员变量或静态成员变量:使用 static 修饰的,作用范围在整个类的所有对象上。所有对象共享这个变 量,在内存中只有一个副本。访问通过 类名. 变量名 访问。在类加载时被初始化,存储在堆里。
实例成员变量:没有static 修饰,作用范围在某个实例对象上。在创建对象时被初始化,存在多个副本。 各个对象不互相影响。通过 实例对象名. 变量名 访问。
2.2 static 可以修饰方法
类方法或静态方法:使用 static 修饰,不能直接使用实例变量,只能直接使用静态变量。只能直接调用静 态方法,不能直接调用实例方法。通过 类名 . 方法名 () 访问
不允许使用 this 关键字
实例方法:没有 static 修饰,既可以使用静态变量,又可以使用实例变量。既可以直接访问实例方法,又 可以直接访问静态方法。 通过 实例对象名. 方法名 () 访问
2.3 static 可以修饰代码块
静态代码块 > 构造代码块 > 构造方法
静态代码块:类加载的时候执行,并且只执行一次,优先于各种代码块和构造方法,最开始执行的。
构造代码块:在创建对象时被调用,每创建一次对象,都会执行一次构造代码块。 执行顺序,优先于构
造方法执行。一个类如果有多个构造方法时,每通过构造方法,创建一个对象,代码块都会被执行一 次。但是对于构造方法来讲,只执行某一个构造方法(根据参数执行)。
2.4 案例:统计一个类创建了多少个实例对象

2.5 单例模式
设计模式:在某些项目环境下,针对某些问题,提供的一种通用的解决方案。
Gang of Four ( GOF ): 23 种软件设计模式
单例模式:保证一个类只能创建一个实例对象,自行实例化,并向整个系统提供这个对象。
实现:
构造方法私有
提供一个当前类的私有静态成员变量
提供一个公有的静态方法,返回成员变量

相关推荐
m0_571957582 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
一点媛艺3 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风3 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生4 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功4 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2344 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程4 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go