当前位置: 首页 > article >正文

JAVASE面相对象进阶之static

JavaSE 面向对象进阶之 static

一、static 的核心作用

static 是 Java 中用于修饰成员(属性/方法)的关键字,作用是让成员与类直接关联,而非依赖对象存在。

二、static 修饰属性(静态变量)
  • 特点
    • 属于类本身,所有对象共享同一静态变量,存储在方法区。
    • 无需创建对象,直接通过 类名.属性名 访问。
    • 生命周期随类加载开始,随程序结束销毁。
  • 示例
public class Student {static int count; // 静态属性,记录学生总数String name;public Student() {count++; // 每次创建对象时,静态属性自增}
}// 调用方式
System.out.println(Student.count); // 直接通过类名访问
三、static 修饰方法(静态方法)
  • 特点
    • 属于类,通过 类名.方法名() 直接调用,无需对象。
    • 只能访问静态成员(静态属性/静态方法),不能访问非静态成员(因非静态成员依赖对象)。
    • 静态方法中无 this 关键字(this 指向当前对象,静态方法不依赖对象)。
  • 示例
public class MathUtils {// 静态方法:计算两数之和static int add(int a, int b) {return a + b;}
}// 调用方式
int result = MathUtils.add(5, 3); // 直接通过类名调用
四、static 代码块(静态初始化块)
  • 作用:用于初始化静态属性,在类加载时自动执行,且仅执行一次。
  • 特点
    • 优先于构造方法执行,且不依赖对象创建。
    • 常用于加载资源(如配置文件)或初始化共享数据。
  • 示例
public class Database {static String url;static String username;static String password;// 静态代码块:初始化数据库连接参数static {url = "jdbc:mysql://localhost:3306/db";username = "root";password = "123456";System.out.println("数据库连接参数初始化完成");}
}
五、static 的注意事项
  1. 访问限制
    • 静态方法不能直接访问非静态成员,需通过对象访问。
    • 非静态方法可以直接访问静态成员。
  2. 继承特性
    • 静态方法可被继承,但不能被重写(重写针对实例方法)。
    • 子类可通过 父类.静态方法 调用父类静态方法。
  3. 与 final 结合
    • static final 修饰的属性为“类常量”,必须在声明时或静态代码块中初始化,且不可修改(如 public static final PI = 3.14159)。
六、应用场景
  • 工具类:如 MathArrays 类中的方法多为静态,方便直接调用。
  • 共享数据:记录对象数量、全局配置参数等。
  • 优化性能:避免重复创建对象,直接通过类访问成员。

通过 static,Java 实现了类级别的成员管理,提升了代码的复用性和便捷性,是面向对象编程中重要的进阶概念。

http://www.lryc.cn/news/2397511.html

相关文章:

  • 深入解析 Redis Cluster 架构与实现(一)
  • (12)java+ selenium->元素定位大法之By_link_text
  • 数据库MySQL集群MGR
  • Ubuntu22.04 安装 ROS2 Humble
  • Spring Boot,注解,@RestController
  • C++中新式类型转换static_cast、const_cast、dynamic_cast、reinterpret_cast
  • AXI 协议补充(二)
  • Linux 基础指令入门指南:解锁命令行的实用密码
  • 标准精读:2025 《可信数据空间 技术架构》【附全文阅读】
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试官和面试记录的分享功能(2)
  • Webug4.0靶场通关笔记05- 第5关SQL注入之过滤关键字
  • ONLYOFFICE文档API:更强的安全功能
  • 深入浅出MQTT协议:从物联网基础到实战应用全解析
  • 解析楼宇自控系统:分布式结构的核心特点与优势展现
  • C#数字图像处理(三)
  • STM32 智能小车项目 L298N 电机驱动模块
  • SQL Transactions(事务)、隔离机制
  • 【动画】unity中实现骨骼蒙皮动画
  • VSCODE的终端无法执行npm命令
  • Langchian - 自定义提示词模板 提取结构化的数据
  • 【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)
  • QT之头像剪裁效果实现
  • apptrace 视角下移动端深度链接技术与优势​
  • 微前端之micro-app数据通信
  • 【GPT入门】第40课 vllm与ollama特性对比,与模型部署
  • unity开发棋牌游戏
  • Nat Commun项目文章 ▏小麦CUTTag助力解析转录因子TaTCP6调控小麦氮磷高效利用机制
  • Qt OpenGL 相机实现
  • 云原生时代 Kafka 深度实践:03进阶特性与最佳实践
  • 基于关联表字段映射的批量数据更新 SQL 实现方案(AIGC)