【Java 入门 Day11】 三大修饰符(上):abstractstatic 篇 家人们谁懂啊Java 里这三个修饰符简直是新手的 “重灾区”每次写代码碰到 abstract、static、final都像在玩 “抽象盲盒”一不小心就踩坑报错。今天先把前两个扒得明明白白看完保证你再也不被它们搞心态一、abstractJava 里的 “嘴强王者”只画饼不干活abstract 翻译过来是 “抽象的”放在 Java 里就是那种只定规矩、不干活的 “甩手掌柜”。它有俩绝活修饰类、修饰方法咱们一个个唠。1. abstract 修饰类只能被继承不能 new 对象的 “抽象网红”被 abstract 修饰的类叫抽象类。你可以把它理解成只有 “人设”、不能直接出道的虚拟偶像语法就是abstract class 类名 {}编译后也会生成正常的.class 文件看着和普通类没差。但它不能自己 new 对象就像虚拟偶像不能线下真人营业只能让子类继承它子类来实现具体功能。抽象类里啥都有成员变量、普通方法、构造方法甚至抽象方法。构造方法是干嘛的给子类继承的时候用的子类创建对象时得先调用父类的构造方法相当于 “先把虚拟偶像的人设初始化再让子类出道”。举个栗子你定义了一个 “动物” 抽象类里面有 “吃饭”“睡觉” 的方法但不写具体实现因为猫和狗吃饭睡觉的方式不一样得让子类自己实现。2. abstract 修饰方法只有签名、没有实现的 “画饼大师”被 abstract 修饰的方法就是抽象方法堪称 Java 里的 “画饼天花板”它只有方法声明连大括号都没有语法长这样访问修饰符 abstract 返回值类型 方法名(形参列表);就像老板只说 “这个需求下周上线”不告诉你具体怎么做。抽象方法只能放在抽象类里你总不能让一个 “实锤老板” 只画饼不干活吧重点来了子类继承抽象类后要么把所有抽象方法都实现相当于接下老板的饼把活干了要么子类自己也变成抽象类继续画饼甩锅。3. abstract 的终极作用强制你用多态为啥要搞抽象类和抽象方法说白了就是逼你用多态 就像你定义一个 “动物” 抽象类让猫、狗、鸟都继承它然后用 “动物” 类型的引用去接收子类对象调用同一个方法时不同子类有不同实现这就是多态。二、staticJava 里的 “共享充电宝”全类共用不内卷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.valuemc1.value); // 输出50只改了mc1的value System.out.println(mc1.bmc1.b); // 输出48改了共享的b System.out.println(mc2.valuemc2.value); // 输出10mc2的value没被改 System.out.println(mc2.bmc2.b); // 输出48共享的b被mc1改了mc2也跟着变 } } class MyClass{ int value 10; // 实例变量每个对象单独一份各玩各的 static int b 30; // 静态变量全类只有一份谁改了大家都用新值 }你看实例变量是 “私人充电宝”各用各的静态变量是 “教室共享充电宝”一个人借了用了所有人都得用用过的。2. static 修饰方法只能用共享资源的 “社恐打工人”被 static 修饰的方法叫静态方法特点就是只能用静态的东西不能碰非静态的资源像个社恐打工人语法访问修饰符 static 返回值类型 方法名(形参列表) { 方法实现 }和普通方法差不多多了个 static。访问方式类名.静态方法名(实参);推荐直接用类名调用别用对象名容易搞混。注意事项新手高频踩坑点静态方法里只能直接访问本类的静态成员静态属性和静态方法不能直接访问非静态的东西就像社恐打工人只和同事打交道不敢碰客户的私人资源。非静态方法里既可以访问非静态成员也能访问静态成员相当于社牛谁都能聊两句。静态方法里不能用this和super关键字因为this代表当前对象super代表父类对象静态方法属于类不属于任何对象根本没有 “当前对象” 这一说。静态方法可以被继承但不能被重写就算子类定义了一个和父类一模一样的静态方法也只是 “隐藏” 了父类的方法不是多态的重写调用的时候还是看引用的类型。举个例子你写个静态方法想直接调用非静态的变量编译器直接给你红波浪线报错就是这个原因。如果非要在静态方法里用非静态成员只能 new 个对象用对象名调用就像社恐打工人找个中间人帮自己对接客户。今天先唠到这abstract 和 static 这俩 “抽象怪” 和 “共享怪” 的套路你 get 到了吗下一篇咱们扒 final那个 Java 里的 “终极钉子户”谁碰谁知道有多倔