Java 静态变量、静态方法及工具类介绍

目录

一、静态变量(Static Variables)

1. 基本概念

2. 核心特性

(1)类级别共享

(2)生命周期

(3)内存分配

3. 使用方法

(1)访问方式

(2)初始化时机

4. 典型应用场景

(1)共享常量

(2)计数器功能

(3)配置信息

二、静态方法(Static Methods)

1. 基本概念

2. 核心特性

(1)类级别方法

(2)访问限制

(3)不可重写性

3. 使用方法

基本调用方式

4. 典型应用场景

(1)工具/辅助方法

(2)数学运算

(3)单例模式实现

三、工具类(Utility Classes)

1. 定义

2. 特点​​

3. 静态与非静态的区别

4. 注意事项


一、静态变量(Static Variables)

1. 基本概念

静态变量(也称为类变量)是用 static 关键字修饰的成员变量,它属于整个类而非某个特定对象实例。

2. 核心特性

(1)类级别共享
  • 所有类的实例共享同一个静态变量。

  • 修改一个实例中的静态变量会影响所有其他实例。

(2)生命周期
  • 在类加载时初始化,在程序结束时销毁。

  • 优先于对象出现,比实例变量的生命周期长。

(3)内存分配
  • 静态变量存储在静态区中,静态区在JDK8以前隶属于 JVM 的方法区,到了JDK8以后被迁移至堆内存中。

  • 只分配一次内存空间。

3. 使用方法

(1)访问方式
 // 推荐方式:通过类名直接访问
 Employee.companyName = "New Corp";
 ​
 // 也可以通过对象访问(不推荐)
 Employee emp = new Employee();
 emp.companyName = "New Corp";
(2)初始化时机
 public class MyClass {
     // 声明时直接初始化
     static int count = 0;
     
     // 使用静态代码块初始化
     static {
         count = initializeCount();
     }
     
     private static int initializeCount() {
         return 10;
     }
 }

4. 典型应用场景

(1)共享常量
 public class Constants {
     public static final double PI = 3.1415926;
 }
(2)计数器功能
 public class Car {
     private static int totalCars = 0;
     
     public Car() {
         totalCars++;
     }
     
     public static int getTotalCars() {
         return totalCars;
     }
 }
(3)配置信息
 public class AppConfig {
     public static String DB_URL = "jdbc:mysql://localhost:3306/mydb";
     public static String LOG_PATH = "/var/log/myapp";
 }

二、静态方法(Static Methods)

1. 基本概念

静态方法是使用 static 关键字修饰的类方法,它属于类本身而非类的实例。

2. 核心特性

(1)类级别方法
  • 不需要创建对象实例即可调用。

  • 通过 ClassName.methodName() 直接访问(通过类名调用)。

  • 多用在测试类和工具类中。

(2)访问限制
  • 只能直接访问类的其他静态成员(变量/方法)。

  • 不能直接访问实例成员(需要先创建对象)。

(3)不可重写性
  • 静态方法不能被重写(Override),只能被隐藏(子类可以定义同名static方法)。

3. 使用方法

基本调用方式
 // 直接通过类名调用
 int sum = MathUtils.add(5, 3);
 ​
 // 也可以通过对象调用(不推荐)
 MathUtils utils = new MathUtils();
 utils.add(5, 3);  // IDE通常会给出警告

4. 典型应用场景

(1)工具/辅助方法
 public class FileUtils {
     public static long getFileSize(String path) {
         File file = new File(path);
         return file.length();
     }
 }
(2)数学运算
 public class Calculator {
     public static double circleArea(double radius) {
         return Math.PI * radius * radius;
     }
 }
(3)单例模式实现
 public class AppConfig {
     private static AppConfig instance;
     
     private AppConfig() {}
     
     public static AppConfig getInstance() {
         if(instance == null) {
             instance = new AppConfig();
         }
         return instance;
     }
 }

三、工具类(Utility Classes)

1. 定义

包含静态方法和静态变量的类,通常被设计为工具类或辅助类,这种类并不用于描述具体的实体事物,而是聚焦于提供通用的功能与服务。由于其所有成员都可通过类名直接调用,无需创建实例,因此通常将构造函数设为私有,从而明确禁止外部对其进行实例化,以确保类的静态成员能被安全、便捷地访问和使用 。

2. 特点​​

  • 私有化构造方法:外界不能创建工具类的对象。

  • 方法定义为静态:仅包含静态方法,方便调用。

3. 静态与非静态的区别

特性静态成员非静态成员
归属实例
内存类加载时分配实例化时分配
访问限制仅能访问静态成员可访问静态和实例成员
线程安全需额外同步(如 volatile实例隔离,天然线程安全

4. 注意事项

  • 静态方法只能访问静态变量和静态方法。

  • 非静态方法可以访问静态变量和静态方法,也可以访问非静态的成员变量和非静态的成员方法。

  • 静态方法中没有this关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值