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

【Java 入门 Day11】 三大修饰符(上):abstractstatic 篇

家人们谁懂啊!Java 里这三个修饰符简直是新手的 “重灾区”,每次写代码碰到 abstract、static、final,都像在玩 “抽象盲盒”,一不小心就踩坑报错。今天先把前两个扒得明明白白,看完保证你再也不被它们搞心态!

一、abstract:Java 里的 “嘴强王者”,只画饼不干活

abstract 翻译过来是 “抽象的”,放在 Java 里,就是那种只定规矩、不干活的 “甩手掌柜”。它有俩绝活:修饰类、修饰方法,咱们一个个唠。

1. abstract 修饰类:只能被继承,不能 new 对象的 “抽象网红”

被 abstract 修饰的类,叫抽象类。你可以把它理解成只有 “人设”、不能直接出道的虚拟偶像

  • 语法就是abstract class 类名 {},编译后也会生成正常的.class 文件,看着和普通类没差。
  • 但它不能自己 new 对象!就像虚拟偶像不能线下真人营业,只能让子类继承它,子类来实现具体功能。
  • 抽象类里啥都有:成员变量、普通方法、构造方法,甚至抽象方法。构造方法是干嘛的?给子类继承的时候用的,子类创建对象时,得先调用父类的构造方法,相当于 “先把虚拟偶像的人设初始化,再让子类出道”。

举个栗子:你定义了一个 “动物” 抽象类,里面有 “吃饭”“睡觉” 的方法,但不写具体实现,因为猫和狗吃饭睡觉的方式不一样,得让子类自己实现。

2. abstract 修饰方法:只有签名、没有实现的 “画饼大师”

被 abstract 修饰的方法,就是抽象方法,堪称 Java 里的 “画饼天花板”:

  • 它只有方法声明,连大括号都没有!语法长这样:访问修饰符 abstract 返回值类型 方法名(形参列表);,就像老板只说 “这个需求下周上线”,不告诉你具体怎么做。
  • 抽象方法只能放在抽象类里!你总不能让一个 “实锤老板” 只画饼不干活吧?
  • 重点来了:子类继承抽象类后,要么把所有抽象方法都实现(相当于接下老板的饼,把活干了),要么子类自己也变成抽象类,继续画饼甩锅。

3. abstract 的终极作用:强制你用多态!

为啥要搞抽象类和抽象方法?说白了就是逼你用多态! 就像你定义一个 “动物” 抽象类,让猫、狗、鸟都继承它,然后用 “动物” 类型的引用去接收子类对象,调用同一个方法时,不同子类有不同实现,这就是多态。


二、static:Java 里的 “共享充电宝”,全类共用不内卷

static 翻译过来是 “静态的”,它在 Java 里就是 **“全类共享、一次定义、处处可用” 的共享资源 **,修饰属性、方法、代码块都有讲究,咱们一个一个说。

1. static 修饰属性:全类共用的 “共享充电宝”

被 static 修饰的属性,叫静态属性 / 类变量,堪称 Java 里的 “共享充电宝”:

  • 它不属于某个对象,而是属于整个类!就像教室的共享充电宝,全班同学都能用,不是某个人的私有物品。
  • 语法:访问修饰符 static 数据类型 属性名;,或者直接赋值访问修饰符 static 数据类型 属性名 = 值;,访问修饰符和 static 谁在前谁在后都行,没那么多规矩。
  • 访问方式:
    • 对象名.静态属性名:不推荐!就像你用自己的手机号去借教室的共享充电宝,容易让人误会是你私有的。
    • 类名.静态属性名:推荐!直接通过类名访问,一眼就知道这是全类共享的。

给你看个真实案例,秒懂静态属性的特点:

java运行

public class TestStatic{ public static void main(String[] args){ MyClass mc1 = new MyClass(); MyClass mc2 = new MyClass(); mc1.value = 50; // 实例变量,每个对象各有一份,互不干扰 mc1.b = 48; // 静态变量,全类共用,改一个全类都变 System.out.println("mc1.value="+mc1.value); // 输出50,只改了mc1的value System.out.println("mc1.b="+mc1.b); // 输出48,改了共享的b System.out.println("mc2.value="+mc2.value); // 输出10,mc2的value没被改 System.out.println("mc2.b="+mc2.b); // 输出48,共享的b被mc1改了,mc2也跟着变 } } class MyClass{ int value = 10; // 实例变量:每个对象单独一份,各玩各的 static int b = 30; // 静态变量:全类只有一份,谁改了大家都用新值 }

你看,实例变量是 “私人充电宝”,各用各的;静态变量是 “教室共享充电宝”,一个人借了用了,所有人都得用用过的。

2. static 修饰方法:只能用共享资源的 “社恐打工人”

被 static 修饰的方法,叫静态方法,特点就是只能用静态的东西,不能碰非静态的资源,像个社恐打工人:

  • 语法:访问修饰符 static 返回值类型 方法名(形参列表) { 方法实现 },和普通方法差不多,多了个 static。
  • 访问方式:类名.静态方法名(实参);,推荐直接用类名调用,别用对象名,容易搞混。
  • 注意事项(新手高频踩坑点):
    1. 静态方法里只能直接访问本类的静态成员(静态属性和静态方法),不能直接访问非静态的东西!就像社恐打工人只和同事打交道,不敢碰客户的私人资源。
    2. 非静态方法里既可以访问非静态成员,也能访问静态成员,相当于社牛,谁都能聊两句。
    3. 静态方法里不能用thissuper关键字!因为this代表当前对象,super代表父类对象,静态方法属于类,不属于任何对象,根本没有 “当前对象” 这一说。
    4. 静态方法可以被继承,但不能被重写!就算子类定义了一个和父类一模一样的静态方法,也只是 “隐藏” 了父类的方法,不是多态的重写,调用的时候还是看引用的类型。

举个例子,你写个静态方法想直接调用非静态的变量,编译器直接给你红波浪线报错,就是这个原因。如果非要在静态方法里用非静态成员,只能 new 个对象,用对象名调用,就像社恐打工人找个中间人帮自己对接客户。


今天先唠到这,abstract 和 static 这俩 “抽象怪” 和 “共享怪” 的套路你 get 到了吗?下一篇咱们扒 final,那个 Java 里的 “终极钉子户”,谁碰谁知道有多倔!

http://www.cnnetsun.cn/news/2856253.html

相关文章:

  • 066、Demosaic 去马赛克算法:双线性、VNG、边缘自适应插值的画质与算力对比
  • 知识追踪驱动的自适应学习系统:基于贝叶斯网络的算法训练
  • 慢查询优化八股文:抓住这 8 个关键点,面试基本稳了
  • EldenRingSaveCopier:拯救你的艾尔登法环游戏进度的终极方案
  • 车流流速智能解析算法,赋能高速路况动态视频孪生调度
  • 【数据集】上市公司劳动收入份额数据(2007-2024年)
  • 计算机毕业设计之基于Python的企业设备管理系统设计与可视化
  • 2026年AI编程工具怎么选?权威评测与排名指南
  • Paperxie 工科课题攻坚利器:AI 代码生成一键落地程序源码需求
  • yanjiushengbaokao
  • 一文读懂 PXI/PXIe 系统:机箱、控制器到底是什么?
  • okbiye 科研绘图:零门槛 AI 制图方案,解决论文图表绘制全周期难题
  • 什么是蜘蛛池?它和网站排名有关吗
  • 儿童医院凌晨排队300号,数字人实时交互为什么成了家长最后一道救命稻草
  • 公有云ECS手动搭建LNMP+WordPress网站实战总结
  • 刚搭建网站看不懂日志?新手入门教程一次性讲清
  • 【SPIE出版,拥有双刊号:ISSN及ISBN | 哈尔滨信息工程学院主办 | 连续五年实现EI、Scopus检索,快速且稳定 | 大咖嘉宾】第六届电子材料与信息工程国际学术会议(EMIE 2026)
  • 国内的优秀的原创鞋履设计品牌,有哪些推荐?
  • 在线 AVIF 转 WebP 工具推荐:极速转换 + 本地处理 + 完全隐私保护
  • SaaS 产品实测|连锁 AI 内容中台 菠萝 AI 品牌资产管理与落地运维分析
  • 2026年赣州软件定制服务商该怎么选?
  • 做了这么多年英语培训,我越来越确定:真正拉开孩子差距的,还是词汇量
  • 从两摞盘子到 JS 原型链——一场蓄谋已久的“降维打击“
  • 有哪些AI论文写作工具?精选7款实用工具,覆盖全流程
  • vibe coding设计前端界面的技巧
  • LangGraph 状态存储方案:Redis vs 向量数据库 vs 本地文件(性能对比)
  • Multi-Agent 架构的能力路由是怎么实现的:分布式智能决策链路解析
  • 005、GPIO输入实战:按键消抖、中断触发、轮询与中断模式对比
  • MHmarkets:产品理解成本与风控思路如何影响体验
  • 第03篇:字符串入门