在 Java 中,static 是一个修饰符,用于定义与类相关(而非对象实例相关)的成员。以下是核心知识点和用法:


一、四大用途
  1. 静态变量(类变量)

    • 作用:属于类,而非实例。所有实例共享同一副本。
    • 内存分配:类加载时在方法区内存中分配。
    • 示例
      public class Counter {static int count = 0; // 静态变量public Counter() { count++; }
      }
      
      Counter c1 = new Counter(); // count=1
      Counter c2 = new Counter(); // count=2 (共享)
      
  2. 静态方法(类方法)

    • 规则
      • 只能访问静态成员(变量/方法)。
      • 不能使用 thissuper
      • 可通过类名直接调用。
    • 示例
      public class MathUtils {public static int add(int a, int b) {return a + b;}
      }
      // 调用:MathUtils.add(3, 5);
      
  3. 静态代码块

    • 作用:在类加载时执行一次,用于初始化静态资源。
    • 执行顺序:按定义顺序执行。
    • 示例
      public class Database {static {System.out.println("加载数据库驱动..."); // 类加载时执行}
      }
      
  4. 静态内部类

    • 特点
      • 不依赖外部类实例。
      • 无法访问外部类的非静态成员。
    • 示例
      public class Outer {static class Nested { // 静态内部类void print() { System.out.println("Nested"); }}
      }
      // 使用:Outer.Nested obj = new Outer.Nested();
      

二、关键特性
  1. 生命周期

    • 从类加载开始,到 JVM 结束销毁。
    • 比实例成员的生命周期长。
  2. 内存分配

    • 静态变量/方法:存储在方法区(JDK 8+ 的元空间)。
    • 实例变量/方法:存储在堆内存的对象中。
  3. 访问限制

    • 静态方法中 不能直接访问非静态成员(需要先创建对象)。
    • 非静态方法可以自由访问静态成员。

三、使用场景
  1. 共享数据配置

    public class AppConfig {public static final String API_KEY = "ABC123"; // 全局常量
    }
    
  2. 工具类设计

    public class StringUtils {private StringUtils() {} // 防止实例化public static boolean isEmpty(String s) { ... }
    }
    
  3. 单例模式

    public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
    }
    

四、常见误区
  1. 重写问题
    static 方法不能被重写(Override),只支持方法隐藏(Method Hiding):

    class Parent {static void print() { System.out.println("Parent"); }
    }
    class Child extends Parent {static void print() { System.out.println("Child"); } // 隐藏父类方法
    }
    
  2. 多态失效
    静态方法在编译时绑定,不存在运行时多态:

    Parent obj = new Child();
    obj.print(); // 输出 "Parent"(编译时类型决定)
    
  3. 线程安全问题
    多个线程同时修改静态变量需同步:

    public class Counter {private static int count;public static synchronized void increment() { count++; } // 加锁
    }
    

五、与 final 结合
  • 静态常量:固定不变的值(如数学常量)
    public class Constants {public static final double PI = 3.1415926;
    }
    

六、总结
特性static 成员非静态成员
归属对象实例
内存分配时机类加载时创建对象时
访问方式类名.成员 或对象访问必须通过对象访问
生命周期与类相同与对象相同
多态支持不支持(静态绑定)支持(动态绑定)

最佳实践:优先用 static 定义工具方法、常量,避免滥用导致代码耦合或内存泄漏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917661.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917661.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917661.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法训练营DAY50 第十一章:图论part01

98. 所有可达路径 98. 所有可达路径 【题目描述】 给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个程序,找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。 【输入描述】 第一行包含两个整数 N&#…

OpenCV:从入门到实战的全方位指南

目录 一、OpenCV 简介 (一)特点 (二)应用场景 二、OpenCV 的核心模块 (一)core 模块 (二)imgproc 模块 (三)video 模块 (四)f…

如何在 Ubuntu 24.04 上安装和配置 TFTP 服务器

了解如何在 Ubuntu 24.04 Linux 上安装 TFTP 以执行基本的文件传输。 简单文件传输协议(TFTP)是标准 FTP 的轻量级替代方案,用于在联网设备之间传输文件。与 FTP 和 HTTP 相比,TFTP 更简单,无需复杂的客户端-服务器模型即可操作。这就是为什么该协议用于执行基本文件传输…

基于 AXI-Lite 实现可扩展的硬件函数 RPC 框架(附完整源码)

AXI-Lite 实现RPC调用硬件函数服务 👋 本文介绍如何基于 AXI-Lite 总线设计一个通用的“硬件函数调用框架”。主机端(PS)只需通过寄存器写入参数与启动标志,即可触发 PL 模块执行指定算法逻辑,并将结果返回。 该机制本…

[spring-cloud: NamedContextFactory ClientFactoryObjectProvider]-源码阅读

依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-commons</artifactId><version>4.3.0</version> </dependency>源码 NamedContextFactory NamedContextFactory 类通过创建多个子…

HBase MOB技术特点及使用场景介绍

在 HBase 2.0 版本之前,虽然 HBase 能够存储从 1 字节到 10MB 大小的二进制对象 ,但其读写路径主要针对小于 100KB 的值进行了优化。当面对大量大小在 100KB - 10MB 之间的数据时,传统的存储方式就会暴露出问题。例如,当存储大量的图片、文档或短视频等中等大小对象时,由于…

Ubuntu 配置密钥+密码登录

目录 1、密钥生成 2、发送公钥至 需要连接的服务器 3、选用私钥登录 1、密钥生成 ssh-keygen -t rsa -b 4096 -C "angindem"2、发送公钥至 需要连接的服务器 将.ssh中的id_rsa.pub 的密钥&#xff0c;放在authorized_keys中 注意&#xff1a;.ssh 文件夹一定赋予…

谷歌浏览器Chrome 缓存迁移

步骤 1&#xff1a;准备数据迁移1. 关闭 Chrome 及所有后台进程在任务管理器&#xff08;CtrlShiftEsc&#xff09;中结束所有 chrome.exe 进程。 2. 备份并移动原数据- 将 C:\Users\xxx\AppData\Local\Google\Chrome\User Data **整个文件夹**复制到新位置&#xff08;如 G:\…

Java中的RabbitMQ完全指南

Java中的RabbitMQ完全指南 1. 引言 什么是RabbitMQ RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;实现了高级消息队列协议&#xff08;AMQP&#xff09;。它充当应用程序之间的消息中间件&#xff0c;允许分布式系统中的不同组件进行异步通信。RabbitMQ使用Erlang语言…

【MCAL】AUTOSAR架构下SPI数据异步DMA收发具体实现

目录 前言 正文 1.依赖的硬件特性 1.1.SPI硬件特性 1.1.1. TXFIFO Single Move Mode 1.1.2. RXFIFO Single Move Mode 1.1.3. Move Counter模式 1.1.4. PT中断 1.2.IR硬件特性 1.3.DMA硬件特性 1.3.1. DMA通道硬件请求 1.3.2. DMA循环Buffer 1.3.3. DMA Link List …

【Unity】协程 Async

协程 协程是 Unity 内置的异步机制&#xff0c;通过 yield 暂停执行&#xff0c;实现任务在多帧中分段执行。与普通函数不同&#xff0c;协程可在执行过程中挂起和恢复&#xff0c;呈现"并发"效果&#xff0c;但本质上仍运行于主线程。若在协程中进行耗时操作&#…

《揭秘!10 分钟洞悉 Prompt、Function Calling、MCP 与 AI agent 奥秘》

Prompt、Function Calling、MCP、AI agent这些术语频繁闯入我们的视野&#xff0c;它们到底都是什么、有啥关系。只需十分钟&#xff0c;咱们抽丝剥茧&#xff0c;揭开它们的神秘面纱&#xff0c;轻松掌握这些关键概念 并了解AI agent 完整执行流程。 一、提示词&#xff08;P…

决策树(回归树)全解析:原理、实践与应用

文章目录一、概述1.1 介绍1.2 回归树和分类树区别二、重要参数、属性及接口2.1 criterion&#xff08;不纯度衡量指标&#xff09;2.2 回归树如何工作&#xff08;核心流程拆解&#xff09;三、用回归树拟合正弦曲线&#xff08;实战案例&#xff09;3.1 绘制正弦曲线3.2 为正弦…

【盘古100Pro+开发板实验例程】FPGA学习 | HDMI 回环实验

本原创文章由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 1. 实验简介 实验目的&#xff1a; 完成 HDMI 回环实验 实验环境&#xff1a; Window11 PDS2022.2-SP6.4 硬件环境…

鸿蒙系统PC安装指南

鸿蒙系统PC安装指南一、安装DevEco Studio集成开发环境二、下载鸿蒙系统PC三、启动鸿蒙系统及使用一、安装DevEco Studio集成开发环境首先访问华为官网上&#xff0c;注册并登录华为账号&#xff0c;以开始下载所需的软件。若尚未注册&#xff0c;请先注册一个。在官网页面中&a…

三十九、【扩展工具篇】Allpairspy 组合用例生成器:智能设计高效测试集

三十九、【扩展工具篇】Allpairspy 组合用例生成器:智能设计高效测试集 前言 准备工作 第一部分:后端实现 - `allpairspy` API 1. 创建 `allpairspy` 服务 2. 创建 `allpairspy` API 视图 3. 注册 API 路由 第二部分:前端实现 - `Allpairspy` 工具界面 1. 创建 API 服务 (`s…

ZooKeeper 深度实践:从原理到 Spring Boot 全栈落地

在 Kubernetes 为主流注册发现的今天&#xff0c;给出如何在 Spring Boot 中基于 ZooKeeper 实现服务注册/发现、分布式锁、配置中心以及集群协调的完整代码与最佳实践。所有示例均可直接复制运行。 1. ZooKeeper 架构与核心原理 1.1 角色 Leader&#xff1a;处理写请求&…

可验证随机函数-VRF

可验证随机函数&#xff08;Verifiable Random Function, VRF&#xff09;是一种结合密码学技术的伪随机数生成器&#xff0c;其核心特点是生成的随机数可被公开验证&#xff0c;且具有不可预测性和唯一性。以下是VRF的详细解析&#xff1a;1. 基本定义与核心特性 可验证性&…

极客大挑战2020(部分wp)

Roamphp1-Welcome 405请求方法不允许&#xff0c;改一下请求方法 数组绕过&#xff0c;在页面搜索flag即可&#xff01;本题&#xff1a;就是知道了405是请求方法不允许&#xff01; Roamphp2-Myblog&#xff08;zip协议加文件包含&#xff09; 首先进来就是一个博客页面&…

ESP32 外设驱动开发指南 (ESP-IDF框架)——GPIO篇:基础配置、外部中断与PWM(LEDC模块)应用

目录 一、前言 二、GPIO 2.1 GPIO简介 2.2 GPIO函数解析 2.3 LED驱动 2.4 KEY驱动 三、EXIT 3.1 EXIT简介 3.2 EXIT函数解析 3.3 EXIT驱动 四、LEDC 4.1 PWM原理解析 4.2 ESP32的LED PWM控制器介绍 4.3 LEDC函数解析 4.3.1 SW_PWM 4.3.2 HW_PWM 4.4 LEDC驱动 …