Java 继承、方法重写与 final
继承让类与类产生父子关系,子类免费获得父类的非私有成员,Java 由此搭起整个类体系。本篇讲清 extends 的 is-a 语义、继承的成员规则、构造方法的”先父后子”、方法重写的约束与 final 的三种用法,为多态铺路。 本篇目标 能用 is-a 原则判断该不该用继承 掌握单继承、多层继承的规则与继承的利弊 说清子类构造为什么”先父后子”,会用 super 掌握方法重写的规则与 @Override 的作用 记住 final 修饰类、方法、变量的三种语义 为什么需要继承先看痛点:分别定义 Cat 和 Dog,颜色、腿数、吃饭、睡觉各写一遍,改一个公共字段要动两个文件。把共性抽到 Animal 父类,让 Cat、Dog extends Animal,重复代码瞬间消失。继承的好处:提高复用性、提高维护性、让类与类产生关系——第三点是多态的前提。弊端同样明确:父类一变子类全受影响,耦合性增强。开发追求高内聚、低耦合,所以继承要用得克制,不能为了蹭部分功能而继承。 继承的规则:单继承与 is-aJava 只支持单继承(一个类只能有一个直接父类),但支持多层继承(A extend...
Java 面向对象:构造方法与静态成员
构造方法决定对象”出生时的样子”,static 决定数据”属于类还是属于对象”。本篇讲透构造方法的调用时机与重载、代码块的执行顺序、static 的共享语义和工具类的标准写法,最后逐词拆解 main 方法签名。 本篇目标 掌握构造方法的格式、调用时机与重载规则 理清 new Student() 背后的完整流程 分清构造代码块与静态代码块的执行时机 理解 static 的”类级别共享”语义及访问限制 会写工具类,能逐词解释 main 方法签名 构造方法:对象一出生就初始化普通方法要建完对象再手动调,构造方法在 new 的瞬间由 JVM 自动调用,专门给属性赋初值。格式三个特点:方法名与类名完全一致(大小写也一样);没有返回值类型,连 void 都不写;方法体里不需要 return。 class Student { private String name; private int age; public Student() {} // 无参构造 public Student(Str...
Java 面向对象:类、对象与封装
类是对象的模板,对象是内存中的实体。本篇讲透”定义类、创建对象、访问成员”这条主线,用内存布局说清栈、堆、方法区的分工,再落到封装、private 与 this 这三个最易含糊的概念上。 本篇目标 说清类与对象的关系,能独立写出标准类 描述 new Student() 执行后的内存布局 分清成员变量与局部变量的区别 理解封装动机,会用 private + getter/setter,明白 this 指向谁 从面向过程到面向对象面向过程关注”第一步做什么、第二步做什么”,自己动走完全部流程;面向对象先问”这件事该由谁来做”,把数据和行为装进对象,再指挥对象协作。洗衣服:面向过程是”接水、加洗衣粉、搓洗、晾晒”一步步来;面向对象是找到”洗衣机”对象,调用它的洗涤方法。角色从执行者变成指挥者,复杂的事被拆给不同对象去办——面向对象开发就是不断创建对象、使用对象、指挥对象做事,这片土壤上长出封装、继承、多态三大特征。 类与对象:模板与实例现实事物用”属性 + 行为”描述:属性是名词,行为是动词。Java 用 class 描述事物,成员变量对应属性,成员方法对应行为。类是一...
Java 数组基础与常见操作
这是 Java 入门系列的第五天。前四天我们的变量一次只能装一个值,今天学习第一个”容器”——数组:一次声明就能管理一批同类型数据,它也是后面所有集合框架的底层基石。 本篇目标 理解数组的内存模型:堆中连续空间 + 栈中引用 掌握数组的三种定义与初始化方式 独立完成遍历、取最值、反转、查找等基本操作 会用 Arrays 工具类,理解二维数组”数组的数组”本质 讲清 Java 参数传递为什么”基本类型不改、数组会改” 为什么需要数组要存 50 个学生的成绩,定义 50 个 score1…score50 吗?显然不行——无法批量处理,也应对不了”人数不定”的情况。数组解决的就是这个问题:用一块连续的内存,存储同一种数据类型的多个值,通过下标统一访问。数组既能装基本类型,也能装引用类型。 数组的内存模型先补一点 JVM 内存常识(入门阶段记住两块即可): 栈:存放局部变量(方法里声明的变量),方法结束即弹栈销毁。 堆:存放所有 new 出来的东西,由 JVM 管理,没有任何引用指向时才被垃圾回收。 看一行代码: int[] arr = new int[3]; 这行代码实际发...
Java 循环与流程控制
这是 Java 入门系列的第四天。顺序结构让程序从上往下走,选择结构让程序拐弯,今天要学的循环结构则让程序”重复”——这是计算机最擅长的事:不知疲倦地把一件事做一万次。 本篇目标 掌握 for、while、do-while 的语义差异与选型原则 理解嵌套循环”外行内列”的模型,能打印常见图案 说清 break、continue、return 的真实语义和标号的用法 完成两个经典练习:九九乘法表与素数判断 for:次数已知时的首选for (int i = 1; i <= 10; i++) { System.out.println("第 " + i + " 次 Hello");} 执行顺序是四步循环:初始化(只执行一次)→ 判断条件(false 则结束)→ 执行循环体 → 执行迭代语句 → 回到判断。三个表达式把”从哪开始、到哪结束、每次怎么走”写在同一行,结构一目了然——这正是次数已知时优先用 for 的原因。 两个基础练习背后是两种重要的思想模式: 累加思想:求 1~100 的和,套路是”循环外定义累...
Java 运算符与条件控制
这是 Java 入门系列的第三天。前两天我们能把数据存进变量了,今天让程序”动起来”:用运算符对数据做计算,用 if 和 switch 让程序根据条件选择不同的执行路径,再学会用 Scanner 接收键盘输入,写出第一个能和人交互的程序。 本篇目标 掌握算术、关系、逻辑、位四类运算符的语义与常见坑 说清 && 与 & 的短路差异及其工程意义 理清三元运算符、if、switch 的适用边界 用 Scanner 完成键盘录入,写出交互式程序 算术运算符+ - * / %,外加自增自减 ++ --。两个高频考点: 整数除法与取余:/ 两边都是整数时结果仍是整数(直接舍去小数部分),想要小数结果必须让运算中出现浮点数;% 取余数,结果的符号只跟左边有关——-5 % 3 得 -2,5 % -3 得 2。一个实用规律:任何正整数 % 2 的结果非 0 即 1,常用来做奇偶判断和状态切换。 ++ 的前置与后置:单独使用时 a++ 与 ++a 没有区别;参与运算时,前置先自增再参与,后置先参与再自增。 int x = 4;int y = (x++) + (++x) ...
Java 数据基础:进制、常量与变量
这是 Java 入门系列的第二天。配置好环境之后,今天进入语言的地基:计算机为什么用二进制和补码表示数据,常量与变量有什么区别,八种基本数据类型怎么选,以及类型转换中那些”丢精度”的坑。 本篇目标 理解进制的本质与二进制的物理动机,熟练做进制转换 讲透原码、反码、补码,明白计算机为什么统一用补码 掌握常量、变量的概念与八种基本数据类型的取值范围 理清自动类型提升与强制类型转换的规则和代价 进制:逢几进一的计数游戏进制的本质是”逢 X 进一”。十进制逢十进一,源于人类有十根手指;一周七天是七进制,一年十二个月是十二进制。任何一个数都可以按”位权”展开,例如十进制的 123 其实是: 123 = 1×10² + 2×10¹ + 3×10⁰ 任意进制转十进制遵循同一个公式:系数 × 基数的权次幂之和(权从右往左、从 0 开始编号)。比如二进制 0b110: 0b110 = 1×2² + 1×2¹ + 0×2⁰ = 4 + 2 + 0 = 6 反过来,十进制转任意进制用”除基取余、倒序排列”:把 6 不断除以 2,余数依次是 0、1、1,倒过来写就是 110。 计算机为什么用二...
Java 开发入门:环境、工具与 Hello World
这是 Java 入门系列的第一天。这一篇解决三个问题:计算机软硬件的基本常识、Java 凭什么”一次编写,到处运行”,以及如何亲手把第一个 Hello World 从源代码变成屏幕上的一行输出。 本篇目标 了解计算机硬件的五大部件与软件分类,建立”程序跑在哪里”的直觉 讲透 JDK、JRE、JVM 三者的关系与跨平台原理 理解 Path、JAVA_HOME 环境变量背后的原理,而不是照抄配置步骤 完整走通”编写 → 编译 → 运行”Hello World 的全流程,并能排查常见错误 先懂一点计算机常识计算机由硬件和软件组成,没装任何软件的机器称为”裸机”。硬件按冯·诺依曼体系结构分为五大部件: 运算器 + 控制器:合称 CPU,是计算机的核心。运算器做算术与逻辑运算,控制器负责取指令、译码并发出控制命令,CPU 内部还有高速寄存器暂存数据。 存储器:分内存与外存。内存(RAM)速度快、容量小、断电即失,用于存放正在执行的程序和数据;外存(硬盘、SSD)相反,用于长期保存。程序必须先装入内存才能被 CPU 执行——这解释了为什么”内存大小”直接影响电脑的流畅度。 输入设备 ...