java之static详细总结
static也叫静态,可以修饰成员变量、成员方法。
成员变量
按照有无static分为两种:
- 类变量:static修饰,属于类,与类一起加载一次,在内存中只有一份,会被类的全部对象共享
- 实例变量(对象变量):无static修饰,属于每个对象的。
代码举例:
//先创建一个学生类
public class Student {//类变量static String name;//实例变量(对象变量)int age;}//测试
public class Test {public static void main(String[] args) {//1、类变量的使用//类名.类变量Student.name="袁华";//对象.类变量(不推荐)Student s1=new Student();s1.name="马冬梅";Student s2=new Student();s1.name="秋雅";System.out.println(s1.name); //输出秋雅System.out.println(Student.name); //输出秋雅//2、实例变量的使用:属于每个对象的变量//对象、实例变量(不能通过类名.变量名访问)s1.age=23;s2.age=18;System.out.println(s1.age); //输出23System.out.println(s2.age); //输出18}
}
一开始先将Test.class加载到方法区,然后main方法入栈,运行到Student.name="张三"会将Student.class加载到方法区,并检查是否有类变量,如果有也会将类变量立即加载到堆内存中,初始值为null,然后赋值成 袁华

然后在堆内存中创建学生对象,学生变量s1指向这个对象,然后执行 s1.name=“马冬梅” 会在s1指向的对象中去寻找这个变量,如果没有这个变量,则通过类的地址去寻找Student.class,然后通过这个寻找到name并赋值成 “马冬梅”

同理s2的创建和修改和上面一样

最后s1和s2的name都指向同一个,所以最后输出的名字都是“秋雅”。
下面再看实例变量age的变化:
s1.age=23会通过s1找到第一个学生对象,将其变量age的值改为23;同理s2也是如此

类变量的应用场景
在开发中,如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义成类变量来记住。例如,一个类可以记住自己创建了多少个对象,如下图

成员方法
按照有无static分为两种:
- 类方法:static修饰,属于类
- 实例方法:无static修饰,属于每个对象的。
代码举例:
public class Student {double score;//类方法public static void printHelloWorld(){System.out.println("Hello World");}//实例方法public void printPass(){System.out.println("成绩"+(score>=60?"及格了":"没及格"));}
}//测试
public class StaticTest {public static void main(String[] args) {//1、类方法的使用//类名.类方法Student.printHelloWorld();//对象.类方法(不推荐)Student s1=new Student();s1.printHelloWorld();//2、实例方法的使用:属于每个对象的方法//对象.实例方法(不能通过类名.方法名访问)s1.printPass();}
}
一开始先将Test.class加载到方法区,然后main方法入栈,运行到Student.printHelloWorld()会将Student.class加载到方法区,然后通过学生类找到printHelloWorld()方法,进行打印

然后在堆内存中创建学生对象,学生变量s1指向这个对象,然后执行 s1.printHelloWorld() 时,会通过s1找到它指向的学生对象,然后通过学会对象找到Student这个类,通过这个类找到这个printHelloWorld()方法 。如图
实例方法也是如此,但它会访问这个对象的一些变量,所以不能通过类名调用(通过类名调用就不知道访问哪个对象的变量了)。
补充:main方法也是类方法,也是通过类名.main进行调用的
应用场景
类方法最常见的应用场景是做工具类:提高了代码复用;调用方便,提高了开发效率
注意事项
1. 类方法中可以直接访问类成员,不可以直接访问实例成员
public class Student {static String schoolname;//类变量double score;//实例变量//类方法public static void printHelloWorld(){//同一个类中,访问类成员,可以省略类名schoolname="张三";printHelloWorld2();
// score=12.0;//报错
// printPass();//报错}//类方法public static void printHelloWorld2(){System.out.println("Hello World");}//实例方法public void printPass(){System.out.println("成绩"+(score>=60?"及格了":"没及格"));}
}
2. 实例方法中既可以直接访问类成员,也可以直接方法实例成员
public class Student {static String schoolname;//类变量double score;//实例变量//类方法public static void printHelloWorld2(){System.out.println("Hello World");}//实例方法public void printPass(){schoolname="李四";printHelloWorld2();printPass2();System.out.println(score);}//实例方法public void printPass2(){}
}
3. 实例方法中可以出现this关键字,类方法中不可以出现this关键字
因为实例方法用this时会拿到这个对象,而类方法拿不到对象
应用知识
1. 代码块
代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)。
代码块分为两种:
- 静态代码块
- 格式:static{}
- 特点:类加载时自动执行,由于类只加载一次,所以静态代码块也只会执行一次
- 作用:完成类的初始化,例如:对类变量的初始化赋值。
public class Student {static int number=80;static{System.out.println("静态代码块执行了");} } //测试 public class StaticTest {public static void main(String[] args) {System.out.println(Student.number);} }//输出静态代码块执行了 80
- 实例代码块
- 格式:{}
- 特点:每次创建对象时,执行实例代码块,并在构造器前执行
- 作用:和构造器一样,都是用来完成对象的初始化的。例如对实例变量进行初始化赋值
2. 单例模式
确保一个类只有一个对象
写法
- 把类的构造器私有
- 定义一个类变量记住类的一个对象
- 定义一个类方法,返回对象
public class A {//2.定义一个类变量记住类的一个对象private static A a=new A();//1.私有类的构造器private A() {}//3.定义一个类方法,返回对象public static A getObject(){return a;} }
实现方式
- 饿汉式单例:拿到对象时,对象早已经创建好了。上面便是。
- 懒汉式单例:拿到对象时,才开始创建对象。
public class B {//1.类的构造器私有private B() {}//2.定义一个类变量,用户存储这个类的一个对象private static B b;//3.定义一个类方法,要保证第一次调用时才创建一个对象,后面调用时都会用这同一个对象public static B getObject(){if(b==null){b=new B();}return b;} }
相关文章:
java之static详细总结
static也叫静态,可以修饰成员变量、成员方法。 成员变量 按照有无static分为两种: 类变量:static修饰,属于类,与类一起加载一次,在内存中只有一份,会被类的全部对象共享实例变量(…...
RabbitMQ3.13.x之六_RabbitMQ使用场景
RabbitMQ3.13.x之六_RabbitMQ使用场景 文章目录 RabbitMQ3.13.x之六_RabbitMQ使用场景1. 为什么选择 RabbitMQ?1. 可互操作2. 灵活3. 可靠 2. 常见用户案例1. 服务解耦2. 远程过程调用3. 流处理4. 物联网 1. 为什么选择 RabbitMQ? RabbitMQ 是一个可靠且…...
C++ 类和对象(初篇)
类的引入 C语言中,结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。 而为了区分C和C我们将结构体重新命名成class去定义 类的定义 标准格式: class className {// 类体:由成员函…...
微软推出GPT-4 Turbo优先使用权:Copilot for Microsoft 365商业用户享受无限制对话及增强图像生成能力
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
Spring Boot Actuator
概述 Spring Boot Actuator是Spring Boot的一个功能模块,用于提供生产环境中常见的监控和管理功能。它提供了各种端点(endpoints),可以用于监视应用程序的运行状况、收集应用程序的指标数据以及与应用程序进行交互。 以下是Spri…...
我与C++的爱恋:类与对象(一)
🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象&…...
os模块篇(十八)
文章目录 os._exit(n)os.forkpty()os.kill(pid, sig, /)os.killpg(pgid, sig, /)os.nice(increment, /)os.pidfd_open(pid, flags0)os.plock(op, /)os.popen(cmd, moder, buffering-1)os.posix_spawn(path, argv, env, *, file_actionsNone, setpgroupNone, resetidsFalse, set…...
Oracle 数据库工作中常用知识点:sql语法与常用函数
.to_date()函数 to_date函数是Oracle特有的函数,该函数用来做日期转换。 举例: SELECT TO_DATE(‘2006-05-01 19:25:34’, ‘YYYY-MM-DD HH24:MI:SS’) FROM DUAL 日期格式: YYYY、YYY、YY 分别代表4位、3位、2位的数字年 …...
软件工程
开发模型 瀑布模型 用于结构化模型开发 适用需求明确或者二次开发 原型模型 适用需求不明确 演化模型 增量模型 适用需求不明确 先做一块,再做一块,这样不断的对核心功能的审视,降低风险 螺旋模型 由多个模型组合成 适用需求不明…...
【御控物联】JavaScript JSON结构转换(17):数组To对象——键值互换属性重组
文章目录 一、JSON结构转换是什么?二、核心构件之转换映射三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…...
免注册,ChatGPT可即时访问了!
AI又有啥进展?一起看看吧 Apple进军个人家用机器人 Apple在放弃自动驾驶汽车项目并推出混合现实头显后,正在进军个人机器人领域,处于开发家用环境机器人的早期阶段 报告中提到了两种可能的机器人设计。一种是移动机器人,可以跟…...
探索未来游戏:生成式人工智能AI如何重塑你的游戏世界?
生成式人工智能(Generative AI)正以前所未有的速度改变着各行各业的运作模式。其中,游戏产业作为科技应用的前沿阵地,正经历着前所未有的变革。本文将探讨生成式人工智能如何重塑游戏产业,以及这一变革背后的深远影响。…...
ubuntu23设置kibana后台启动服务
要在Ubuntu 23系统中设置Kibana作为系统服务,以便能够通过systemd管理其启动、停止、重启以及设置开机自动启动,可以按照以下步骤操作: 1. 创建Kibana systemd服务单元 创建一个名为kibana.service的文件在 /etc/systemd/system/ 目录下&am…...
身份证实名制、C#身份核验代码示例、身份证查询
在以前,企业采用人工审核的方式对线上用户进行身份信息真伪的核验,在用户上传身份信息后,人工进行后台审核,虽能满足企业对用户实名认证的需求,但效率慢、耗时长,且存在一定的人为误差,对高度PS…...
【leetcode面试经典150题】15.分发糖果(C++)
【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…...
Elasticsearch如何选择版本
不同版本的ES差异非常大,包括不局限于ES语法、架构、API、集群搭建等等。这些差异足以导致不同版本是否能满足你的业务场景以及后续开发维护成本等各种问题。 先说结论,以个人实践经验及综合考虑推荐使用 7.x 版本中的 7.10版本 ES版本对比 以下是通过…...
P8749 [蓝桥杯 2021 省 B] 杨辉三角形
[蓝桥杯 2021 省 B] 杨辉三角形 题目描述 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: 1 , 1 , 1 , 1 , 2 , 1 , 1 , 3 , 3 , 1 , 1 , 4 , 6 , 4 , 1 , … 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1, …...
MySQL数据库——1.创建数据库
在 MySQL 数据库中,要创建一个新的数据库,可以使用 SQL 命令 CREATE DATABASE。创建数据库是管理数据的第一步,它提供了一个容器,用于存储表、视图、存储过程等数据库对象。 示例: CREATE DATABASE my_database; 在…...
计算机视觉研究院 | Drone-YOLO:一种有效的无人机图像目标检测
本文来源公众号“计算机视觉研究院”,仅用于学术分享,侵权删,干货满满。 原文链接:Drone-YOLO:一种有效的无人机图像目标检测 无人机图像中的目标检测是各个研究领域的重要基础。然而,无人机图像带来了独…...
[C#]使用OpencvSharp去除面积较小的连通域
【C介绍】 关于opencv实现有比较好的算法,可以参考这个博客OpenCV去除面积较小的连通域_c#opencv 筛选小面积区域-CSDN博客 但是没有对应opencvsharp实现同类算法,为了照顾懂C#编程同学们,因此将 去除面积较小的连通域算法转成C#代码。 方…...
2026前端AI开发必备:核心工具\+配套联动指南(附实战组合)
前言:随着AI原生开发范式的普及,前端开发已从“手动编码”向“AI协同”全面转型。2026年数据显示,85%的前端岗位要求掌握AI辅助开发技能,具备AI能力的前端工程师平均薪资比传统前端高40%。但很多开发者仅用单一AI工具,…...
八大网盘直链获取开源工具全面指南:如何高效管理你的云端文件下载
八大网盘直链获取开源工具全面指南:如何高效管理你的云端文件下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动…...
SteamAutoCrack:终极指南!如何3步实现游戏免Steam启动?
SteamAutoCrack:终极指南!如何3步实现游戏免Steam启动? 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack是一款专业的游戏自动破解工具…...
别再乱配了!SpringBoot配置文件加载顺序的实战避坑指南(附优先级图解)
SpringBoot配置加载优先级深度解析:从原理到实战避坑 SpringBoot的配置加载机制看似简单,实则暗藏玄机。许多开发者在使用过程中都曾遇到过配置不生效、覆盖关系混乱的问题,尤其是在多环境部署或使用外部配置时。本文将深入剖析SpringBoot配置…...
别再用filter了!MATLAB bandpass函数一键搞定信号滤波,附音乐合成与降噪实战
别再用filter了!MATLAB bandpass函数一键搞定信号滤波,附音乐合成与降噪实战 信号处理工程师的日常,往往伴随着无数个深夜调试滤波器的痛苦回忆。从设计滤波器系数到手动补偿群延迟,再到反复调整截止频率,传统filter和…...
Keil5 UV4目录下的global.prop文件,除了改黑色背景还能玩出什么花样?
Keil5 UV4目录下的global.prop文件:从黑色主题到深度定制指南 如果你已经厌倦了Keil5默认的白色界面,或者对网上流传的"黑色背景修改教程"感到意犹未尽,那么这篇文章将带你深入探索global.prop这个配置文件的无限可能。作为Keil μ…...
告别Surface“幽灵触控”:从现象溯源到一劳永逸的修复指南
1. 什么是Surface"幽灵触控"? 如果你正在使用Surface设备,突然发现屏幕某个区域莫名其妙地自动点击,或者部分触控功能完全失灵,恭喜你遇到了传说中的"幽灵触控"问题。这个现象最早在Surface Pro 4上被大量报告…...
ChatGPT 2023年3月14日更新解读:GPT-4接入Plus,正式进入GPT-4时代
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
CANN/asc-devkit NodeIoNum API文档
NodeIoNum 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/…...
5分钟掌握直播间数据抓取:Live Room Watcher终极指南
5分钟掌握直播间数据抓取:Live Room Watcher终极指南 【免费下载链接】live-room-watcher 📺 可抓取直播间 弹幕, 礼物, 点赞, 原始流地址等 项目地址: https://gitcode.com/gh_mirrors/li/live-room-watcher Live Room Watcher是一款基于Java开发…...
