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 种软件设计模式
单例模式:保证一个类只能创建一个实例对象,自行实例化,并向整个系统提供这个对象。
实现:
构造方法私有
提供一个当前类的私有静态成员变量
提供一个公有的静态方法,返回成员变量

相关推荐
火烧屁屁啦14 分钟前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
飞飞-躺着更舒服17 分钟前
【QT】实现电子飞行显示器(改进版)
开发语言·qt
w_312345427 分钟前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安30 分钟前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA33 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_192849990640 分钟前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S1 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos1 小时前
c++------------------函数
开发语言·c++
yuanbenshidiaos1 小时前
C++----------函数的调用机制
java·c++·算法