跳到主要内容
基于 AI 辅助的 Java 零基础入门与基础实战指南 | 极客日志
Java AI java
基于 AI 辅助的 Java 零基础入门与基础实战指南 介绍如何利用 AI 工具(如通义灵码、DeepSeek)辅助学习 Java。内容涵盖开发环境搭建(IDEA、VS Code、JDK 配置)、Java 基础语法(变量、常量、运算符、流程控制)、数组操作及面向对象编程核心概念(类、对象、封装、继承、多态)。通过计算器、猜数字游戏等实战案例,展示如何借助 AI 生成代码并理解原理,适合零基础初学者快速入门。
灭霸 发布于 2026/4/6 更新于 2026/5/21 24 浏览基于 AI 辅助的 Java 零基础入门与基础实战指南
开发者工具
传统模式下我们学习 Java 需要用到 IntelliJ IDEA 或者 Eclipse,但是现在是 AI 人工智能时代,我们可以借助 AI 快速学习。以下是市面上主流的 Java 开发工具及其优缺点分析:
1. IntelliJ IDEA
使用场景 :企业级开发,适合复杂项目。
优点 :
强大的代码补全和重构功能。
内置对 Spring、Maven、Gradle 等框架的良好支持。
高效的调试工具和性能分析器。
插件生态系统丰富。
缺点 :
商业版收费(社区版功能有限)。
占用内存较大,启动较慢。
2. Eclipse
使用场景 :广泛应用于企业级和开源项目。
优点 :
免费开源,插件丰富。
轻量级配置(基础版本占用资源较少)。
对 Java EE 和 Android 开发有良好支持。
缺点 :
用户界面相对老旧。
在处理大型项目时性能较差。
初学者上手较难。
3. VS Code (Visual Studio Code)
使用场景 :轻量级开发,适合单文件或中小型项目,也适合企业级项目。
优点 :
轻量级,启动速度快。
插件扩展性强(如 Java Extension Pack)。
支持多语言开发,适合全栈工程师。
缺点 :
需要手动安装和配置插件。
对复杂项目的管理能力不如 IntelliJ IDEA。
4. 总结对比表
工具名称 适用场景 主要优点 主要缺点 IntelliJ IDEA 复杂项目 功能强大,插件丰富 占用资源多,商业版收费 Eclipse 企业级开发 免费开源,插件丰富 性能一般,上手难度较高 VS Code 轻量级开发 轻量快速,扩展性强 需要简单配置一些插件
5. 推荐使用
推荐大家使用 IDEA 或者 VS Code。IDEA 提供试用版,也可使用免费的 VS Code 来学习 Java。
一、下载 IDEA 并创建 Java 项目
1. IDEA 的下载和创建 Java 项目
下载安装后可以选择 Start trial 进行 30 天免费试用。如果想长久使用,建议使用社区版或寻找合法授权。
我们最好先在桌面上创建一个空白文件夹。然后打开 IDEA,直接点击 New Project 即可。
选中 Java,项目名称随便取,用英文或者拼音都可以,路径就选择自己在桌面新建的文件夹。其他都保持默认,JDK 部分需要重点说下。
JDK 先使用 IDEA 自带的,可以直接下载 IDEA 自带的 JDK,选择最新版即可。
2. IDEA 汉化和 AI 插件 IDEA 进行汉化,点击左上角的 File,然后找到 Settings。
进入插件市场搜索 chinese。
IDEA 里安装 AI 插件也是直接搜索 tongyi,点击安装即可。
安装完 AI 插件以后,你有任何问题都可以问 AI 了,比如你要设置字体大小。
3. 编写第一个 Java 文件 我们在 src 下面先简单的写一个可以运行的 Java 单文件,右键 src,点击新建,点击 Java 类。
类名我们可以先取 Main,注意 M 大写。
可以看到创建了一个空的类。
我们可以让 AI 给我们写一段打印 hello 的代码,可以看到 AI 自动帮我们写出了代码,我们只需要按 tab 键接受即可。
然后点击绿色三角形就可以在控制台打印 hello 了。
后面我会带大家慢慢熟悉代码,目前大家知道这段代码可以打印出结果就行。
4. 问 AI 如何配置属于自己的 JDK 我们可以直接问 AI,当然这个 AI 我们可以选择 DeepSeek。
提示词如下:
我想开发一个单文件 Java,请教我如何配置 jdk
上图是 Java 的 JDK 发展历史,截至目前已经推出 JDK24 了。
但是我们开发 Java 项目要使用 LTS 长期版。所以我们使用 JDK21,下载 exe 版就行。
5. 安装 JDK 确保你已经安装了 JDK(Java Development Kit)。你可以从 Oracle 官方网站下载最新版本的 JDK,或者使用 OpenJDK。我们使用 OpenJDK 即可。
下载后安装很方便,直接双击即可,有一点要注意,就是你要牢记自己安装的位置。
好比我在 D 盘单独创建个 jdk21 的目录用于安装 JDK。
建议大家和石头哥保持一致在 D 盘单独创建一个 jdk21 的目录,安装目录和文件夹命名可以用拼音或者英文,但是不能用汉字。
安装成功后可以看出多了很多文件。
6. 配置 JDK 全局环境变量 配置环境变量的目的就是为了让我们在电脑的任何位置运行 java 命令。
配置 Java 全局环境变量有两种方式。
6-1. 命令行配置 Java 全局环境变量 我这里以 Windows 为例,Mac 和 Linux 类似。
同样可以问 AI,提示词如下:
window 电脑配置 Java 全局环境变量命令行,我的路径是 D :\jdk21
路径记得换成自己的,如果你是 Mac 电脑,就直接问 Mac 电脑如何配置即可。
对应的命令行如下。这里有个注意事项,打开 cmd 要以管理员身份打开,同样可以问 AI。
提示词如下:
可以看出 AI 给出了好几种方式,我这里以第一种为例。
然后输入如下命令行。
setx JAVA_HOME "D:\jdk21"
setx PATH "%PATH%;%JAVA_HOME%\bin"
D:\jdk21\记得换成你自己的 JDK 安装路径。
配置好以后,记得关闭下 cmd,然后重启下就可以生效了。
然后可以输入 java -version 查看是否配置好了,也可以通过 where java 查看 JDK 安装路径。
当然你也可以问 AI,进而检查 JDK 是否安装和配置成功。
6-2. 通过系统环境变量设置 Java 环境 如果希望可视化的全局设置 Java 环境变量,可以按照以下步骤操作:
设置系统环境变量
右键'此电脑'或'我的电脑',选择'属性'。
点击'高级系统设置' > '环境变量'。
在'系统变量'中:
新建变量 JAVA_HOME,值为 D:\jdk21\。
编辑 PATH,添加 %JAVA_HOME%\bin。
操作步骤如下:
右键此电脑,然后点击属性。
然后找到高级系统设置。
然后点击环境变量。
新建变量 JAVA_HOME,值为 D:\jdk21\,路径记得改成自己的 JDK 安装路径。
然后编辑 PATH,添加 %JAVA_HOME%\bin。
然后点下确定即可。
java -version
javac -version
7. 使用自己的 JDK 再创建一个项目 和前面创建 Java 项目一样,无非就是选择 JDK 的时候使用自己的,而不是 IDEA 自带的。比如我使用自己 D 盘安装的 JDK21。
二、通过 AI+VSCode 配置 Java 开发者环境
1. VSCode 的下载和配置 AI 插件 我们先自行去网上搜索 VSCode,下载 VSCode,进行安装,可以看到 VSCode 的介绍就是用 AI 重新定义编辑器。所以 VSCode 更 AI。
安装好以后,可以先安装一个汉化插件,点击左侧插件按钮,然后搜索,然后安装,安装后重启下 VSCode 就说中文界面了。
然后我们可以先装一个 AI 插件叫通义灵码。
我们在插件商店,搜 tongyi 的拼音即可。
然后点击安装,安装成功后重启 VSCode 即可。
2. 通义灵码的两种模式
1. AI 问答 通义灵码提供两种方式,第一个就是 AI 问答,我们可以问 AI 各种问题,后面学习过程中会给大家重点演示。
当前支持通义大模型和 DeepSeek 大模型。
2. AI 程序员 另外一种方式就是 AI 程序员,这个就厉害了,即便我们自己不懂一点代码,只要会打字,就可以命令 AI 程序员帮我们直接创建项目,编写代码,可以说不写一行代码就可以实现一个 Java 项目,后面实战部分会给大家演示。
3. 安装必备插件 在 VSCode 中安装以下插件,以支持 Java 开发:
3-1. Java Extension Pack 这个插件包包含了多个核心插件,如 Java 语言支持、调试器、测试运行器等。
打开 VSCode,点击左侧活动栏中的扩展图标(四个方块组成的图标),搜索 Java Extension Pack,然后点击安装。
3-2. Extension Pack for Java Auto Config 使 VSCode 支持 Java 开发,Extension Pack for Java 是一个专门为 Java 开发设计的扩展包,它集成了多个与 Java 开发相关的常用插件,能够为开发者提供一个完整的 Java 开发环境。
我们搜索时会出现两个。
建议使用 Extension Pack for Java Auto Config,然后点击安装即可,安装的比较慢,耐心等待。
Extension Pack for Java 和 Extension Pack for Java Auto Config 是两个不同的 VS Code 扩展包,它们的主要区别在于功能定位和自动化配置程度。以下是两者的详细对比:
自动化程度 :
Extension Pack for Java :需要用户手动配置 JDK 和其他环境变量。
Extension Pack for Java Auto Config :自动检测和配置 JDK,减少手动设置。
扩展功能 :
Extension Pack for Java :专注于 Java 开发的核心功能。
Extension Pack for Java Auto Config :在核心功能基础上,增加了自动化配置、语言包安装和终端管理等额外功能。
适用场景 :
Extension Pack for Java :适合大多数 Java 开发者,尤其是对配置有明确需求的用户。
Extension Pack for Java Auto Config :更适合希望减少配置工作、快速启动项目的开发者。
总结
如果你希望快速开始 Java 开发并减少手动配置,Extension Pack for Java Auto Config 是更好的选择。如果你已经熟悉 Java 开发环境的配置,或者需要更灵活的自定义设置,Extension Pack for Java 也完全能满足需求。
会自动帮我们加载 JDK。
3-3. Spring Boot Extension Pack Spring Boot Extension Pack 是一个为 Visual Studio Code 提供的扩展包,旨在简化 Spring Boot 应用程序的开发和部署。它集成了多个与 Spring Boot 开发相关的扩展工具,我们先安装上,后面的实战部分会用到。
4. 创建单个 Java 文件
创建项目文件夹 :
在你的文件系统中创建一个新的文件夹,例如 qcl。
打开 VSCode,点击 文件 -> 打开文件夹,选择你刚刚创建的文件夹。
创建 Java 文件 :
在 VSCode 中,右键点击左侧的资源管理器中的文件夹,选择 新建文件。
将文件命名为 Hello.java。
编写 Java 代码 :
在 Hello.java 文件中输入以下代码,也可以直接复制如下代码:
public class Hello {
public static void main (String[] args) {
System.out.println("Hello from VS Code!" );
}
}
5. 编译和运行 Java 文件 你可以通过多种方式编译和运行你的 Java 文件。
方法一:使用终端
打开终端 :
在 VSCode 中,点击 终端 -> 新建终端。
编译 Java 文件 :
运行 Java 文件 :
你应该会看到输出:
javac Hello.java
java Hello
方法二:使用 Run Java 选中 Hello.java,然后右键,点击 Run Java。
可以看到成功输出 Hello from VS Code!
三、通过 AI 程序员不写一行代码实现计算器
1. 提示词 我们打开通义灵码,选中 AI 程序员,然后输入如下提示词:
你是一个经验丰富的 Java 工程师。请利用 Java 的 GUI 开发一个简单的计算器,要求如下:项目基础包为 com.qcl,请设计合理的项目结构,自动添加代码到 com.qcl 目录文件,请你不要把所有代码写在一个包。要给出每一个类及类中详细完整的代码。并且代码要加上中文注释
然后可以看到 AI 程序员自动帮我们创建项目,并编写对应代码。
我们只需要点击下接受即可。
然后可以看到,已经自动创建好了项目和代码。
并且还有对应的注释说明。
2. 运行 AI 生成的代码 运行主类。
可以看到一个简单的计算器成功运行。
到这里我们不写一行代码,借助 AI 实现了一款简单的 Java 程序了。这些代码即便是资深 Java 开发写出来也得一个小时起步,而 AI 只用不到一分钟就写出来了。
四、Java 基础知识
1. 类的学习 我们可以让 AI 通俗的教我们什么是类。
如果觉得不太好容易理解,可以让 AI 用生活中通俗的例子给我们讲下。
2. 对象的学习 同样可以让 AI 给我们讲下 Java 里的对象。
在 Java 中,对象是一个概念的实例化,可以通俗地理解为现实世界中某个具体事物在程序中的表示。以下是关于 Java 对象的一些关键点:
类是模板 :类定义了对象的结构和行为,就像一个制造物品的蓝图或模板。
对象是实例 :通过类创建的具体实例就是对象,每个对象都有自己的状态(属性值)和行为(方法)。
属性与状态 :对象的属性代表它的特征或状态,比如一个 Car 对象可能有颜色、品牌、速度等属性。
方法与行为 :对象的方法表示它可以执行的动作或功能,例如 Car 对象可能有加速、减速的方法。
class Car {
String color;
String brand;
void start () {
System.out.println("汽车启动了" );
}
}
public class Main {
public static void main (String[] args) {
Car myCar = new Car ();
myCar.color = "红色" ;
myCar.brand = "丰田" ;
myCar.start();
}
}
在这个例子中,Car 类定义了汽车的模板,而 myCar 是基于这个模板创建的一个具体对象,它有自己的颜色和品牌,并且可以执行启动操作。后面章节我们会重点讲下面向对象的知识。
3. 注释 既然用 AI 来学习,那么我们就直接让 AI 教我们什么是注释。
可以看到 AI 告诉了我们什么是注释,并且注释分几类也详细的给我们讲了下。如果你觉得 AI 讲的太深奥,你可以让 AI 更通俗些。
4. 变量 变量是 Java 里非常重要的知识点,同样也可以让 AI 教我们。
可以看到,AI 会教我们如何声明变量,以及变量的常见类型。
同样我们可以让 AI 举个通俗的例子,方便我们理解。
1. 通俗的理解变量 在 Java 中,我们可以把 变量 理解为一个盒子,这个盒子用来存放数据(比如数字、文字等)。下面用通俗的方式解释:
盒子有名字
每个盒子都有一个名字,这个名字就是变量的名字。
示例:int age = 25;
这里 age 就是盒子的名字,它用来存放数字 25。
盒子能装东西
盒子可以装不同类型的东西,比如整数、小数、字符、字符串等。
在 Java 中,每个盒子都有一个类型(int, double, String 等),表示它可以装什么类型的东西。
int count = 10 ;
double price = 3.14 ;
String name = "张三" ;
盒子的内容可以改变
不同类型的盒子不能乱装
如果盒子是 int 类型,就只能装整数;如果是 String 类型,就只能装字符串。
示例:
int number = "hello" ;
引用类型的盒子装的是地址
盒子可以为空
对于引用类型的变量(比如对象),盒子可以为空,表示它目前没有指向任何数据。
示例:
String text = null ;
变量就像一个盒子,用来存放数据。
盒子有名字(变量名)、类型(能装什么)和内容(数据)。
不同类型的盒子有不同的用途,使用时要遵守规则。
2. 变量存储数据的原理
内存是'房子'
计算机的内存可以想象成一个大房子,这个房子里有很多小房间。
每个小房间用来存放东西(比如数字、文字等),每个房间都有一个独一无二的编号(地址)。
变量是'房间钥匙'
当你定义一个变量时,计算机就会在内存的房子中找到一个空房间,并把这把'钥匙'交给你。
这个钥匙上会写上变量的名字(比如 age),方便你以后找到这个房间。
这里的 age 就是一把钥匙,它指向内存中的某个房间,这个房间里现在放着数字 25。
示例:
int age = 25 ;
不同类型的数据需要不同大小的房间
不同类型的数据需要的房间大小不一样:
如果是整数(int),就需要一个能装得下整数的房间(通常是 4 个字节)。
如果是小数(double),就需要更大的房间(通常是 8 个字节)。
如果是字符(char),只需要一个小房间(通常是 2 个字节)。
这就像在房子里,不同的物品需要占据不同大小的空间。
引用类型的变量存的是'地图'
对于基本数据类型(比如 int, double, char 等),变量直接存储的是数据本身。
但如果是引用类型(比如 String, 数组,对象等),变量存储的不是数据本身,而是一个'地图',这个地图告诉你数据存放在哪个房间。
想象这个变量是一个纸条,纸条上写着数据存放在哪个房间的编号。
这里的 name 变量存储的不是一个字符串,而是一个'地图',这个地图指向内存中存放 "张三" 的那个房间。
示例:
String name = "张三" ;
赋值操作是'复制'或'共享地图'
不用的房间会被清理
如果一个房间没人用了(比如变量被销毁了),计算机的'清洁工'(垃圾回收机制)会自动把房间清理掉,腾出空间给新的数据使用。
引用数据类型 :复制'地图',两个变量共享同一个房间。
String str1 = "你好" ;
String str2 = str1;
内存是存放数据的房子,变量是访问这些数据的钥匙或地图。
基本数据类型变量存的是数据本身,引用类型变量存的是数据的房间编号。
数据的存储和访问都依赖于内存的房子和钥匙/地图的管理。
5. 常量 同样让 AI 给我们通俗的讲解下什么是常量,提示词如下:
什么是常量?
常量就是那些'固定不变的东西'。
比如,圆周率 π 的值是 3.14159...,它不会变;一年有 12 个月,也不会变。这些固定不变的值就可以用常量来表示。
常量和变量的区别
变量 是可以变的,比如你的年龄每年都会增长,所以可以用变量来表示。
常量 是不能变的,比如数学中的圆周率 π 或光速 C,它们的值永远固定。
Java 中怎么定义常量?
在 Java 中,我们用 final 关键字来定义常量。
这里的 PI 和 MONTHS_IN_YEAR 就是常量,一旦定义了,就不能再修改它们的值。
为什么需要常量?
避免重复写固定值 :如果某个固定值(比如税率 0.18)在程序中多次出现,直接写数字容易出错,而且修改起来很麻烦。用常量就方便多了。
提高代码可读性 :看到 PI 就知道这是圆周率,比直接写 3.14159 更直观。
防止意外修改 :常量的值不能被修改,这样可以避免程序中不小心改掉重要数据。
常量命名习惯
常量的名字通常用大写字母,单词之间用下划线 _ 分隔。
final int MAX_SPEED = 300 ;
final String APP_NAME = "我的应用" ;
final double PI = 3.14159 ;
final int MONTHS_IN_YEAR = 12 ;
常量就是那些固定不变的东西,用 final 来定义。
它的好处是让代码更清晰、更安全,还能避免重复写固定值。
记住,常量的值一旦定义了,就不能再改了!
6. 常量和变量的区别 以下是关于 Java 中常量 和变量 的详细对比表,从多个维度进行分析:
特性 常量 变量 定义方式 使用 final 关键字修饰,例如:final int MAX = 100; 不使用 final 修饰,例如:int count = 0; 是否可变 值一旦赋值后不可更改,尝试修改会导致编译错误 值可以随时改变,灵活性更高 命名规范 通常用大写字母表示,单词之间用下划线分隔,例如 MAX_VALUE、PI 通常用小写字母或驼峰命名法,例如 studentName、totalScore 存储位置 - 如果是 static final,则在类加载时初始化,所有对象共享同一个值 - 局部常量存储在方法栈中 - 实例变量:每个对象都有自己独立的一份 - 局部变量:存储在方法栈中 作用域 - 类级别(static final) - 方法级别(局部常量) - 类级别(实例变量) - 方法级别(局部变量) 初始化要求 必须在声明时或第一次使用前初始化 不一定需要立即初始化,可以在后续代码中赋值 内存分配 - static final 常量会在方法区(永久代/元空间)分配内存 - 局部常量在栈中分配 - 实例变量在堆中分配 - 局部变量在栈中分配 用途 表示固定不变的值,例如数学常数(如π)、配置参数(如最大连接数)等 表示动态变化的数据,例如用户输入、计算结果等 线程安全性 线程安全,因为值不可更改 需要根据具体场景考虑线程安全性,可能需要同步机制 性能影响 性能较高,因为值固定不变,编译器可以对其进行优化 性能可能稍低,因为值会频繁变化,编译器无法完全优化 适用场景 - 配置参数 - 数学常量 - 不可变的全局数据 - 动态计算结果 - 用户输入 - 对象状态表示
通过以上详细对比可以看出,常量和变量在定义、使用、存储、性能等方面都有显著差异。选择使用常量还是变量,应根据具体需求权衡数据的可变性和程序的可维护性。
7. 关键字和标识符 同样可以让 AI 教我们,提示词如下:
用大白话来解释 Java 里的 关键字 和 标识符
什么是关键字?
关键字就是 Java 语言中已经定义好的、有特殊意义的单词。
比如,class、public、static、final 等都是关键字。
这些单词就像是 Java 的'专用词汇',你不能随便拿来当自己的变量名或类名用。
假设你在餐厅点菜,菜单上写着'红烧肉'、'鱼香肉丝'这些菜名。这些菜名就是'关键字',服务员看到就知道你要什么,不能随便改名字。
在 Java 中,public class HelloWorld { ... } 里的 public 和 class 就是关键字,它们告诉 Java:'我要定义一个公开的类'。
什么是标识符?
标识符就是你自己起的名字,用来给变量、类、方法等命名。
比如,你可以给一个变量起名叫 age,给一个类起名叫 Person,这些都是标识符。
标识符是你自己定义的,但要遵守一些规则(后面会讲)。
继续用餐厅的例子,假设你想给自己点的菜起个名字,比如'我的最爱'或者'特别推荐'。这些名字就是'标识符',只有你自己知道它代表什么。
关键字和标识符的区别
关键字 :Java 已经定义好了,有固定的意思,不能随便改。
标识符 :你自己定义的,可以自由起名,但要符合规则。
标识符的命名规则
虽然你可以自由起名,但得按照 Java 的规则来:
只能包含字母、数字、下划线 _ 或美元符号 $ 。
比如:name, user_1, my$variable 都是合法的。
不能以数字开头 。
比如:1name 是非法的,但 name1 是合法的。
不能使用关键字作为标识符 。
比如:你不能把变量命名为 class 或 public,因为它们是关键字。
区分大小写 。
尽量有意义 。
比如:studentName 比 x 更能表达清楚这个变量是用来存储学生名字的。
关键字 vs 标识符 的详细区别
特性 关键字 标识符 定义 Java 语言预定义的保留字,有固定含义 用户自定义的名字,用于命名类、变量、方法等 是否可自定义 不可自定义,由 Java 语言规定 可自定义,遵循命名规则 是否区分大小写 区分大小写(如 if 和 IF 不同) 区分大小写(如 name 和 Name 不同) 使用场景 用于定义语法结构(如 class、if)、控制程序流程(如 for、while)等 用于命名类、变量、方法等 示例 class、public、static、if、elsePerson、name、calculateAge
关键字 :Java 的专用词汇,有固定含义,不能随便改。
标识符 :你自己起的名字,用来表示变量、类、方法等,但要遵守规则。
记住:关键字是'别人家的',标识符是'你自己家的',但要按规矩来!
8. 数据类型 同样可以让 AI 教我们,提示词如下:
用大白话讲下 java 里的数据类型
什么是数据类型?
数据类型就是用来告诉计算机,'我要存储的东西是什么样的'。比如,你要存一个数字、一个名字、或者一句话,都需要告诉计算机这个东西的'类型',这样它才知道怎么处理。
Java 的数据类型分为两大类:
(1) 基本数据类型(Primitive Types)
这些是最简单的数据类型,直接用来存一些基本的值。Java 有 8 种基本数据类型,分别是:
整数型 :用来存整数(没有小数点的数字)。
byte:很小的整数,比如存年龄。
short:稍微大一点的整数。
int:最常用的整数类型,比如存人数、分数。
long:非常大的整数,比如存宇宙的年龄。
浮点型 :用来存带小数点的数字。
float:单精度浮点数,小数位没那么精确。
double:双精度浮点数,更精确,比如存圆周率π。
字符型 :用来存单个字符。
布尔型 :用来存'是'或'否'。
boolean:只有两个值,true(真)和 false(假)。
其他 :
void:表示'无类型',一般用在方法里,表示这个方法不返回任何值。
(2) 引用数据类型(Reference Types)
这些是用来存'复杂的东西'的,比如一组数字、一段文字、甚至是一个对象。常见的引用数据类型有:
字符串(String) :用来存一串文字,比如'你好,世界!'。
数组(Array) :用来存多个相同类型的数据,比如存一堆学生的成绩。
类(Class) :自己定义的一种数据类型,可以包含很多属性和功能。比如定义一个'人'的类,里面可以有'姓名'、'年龄'等属性。
接口(Interface) :类似于类,但更抽象,用来规范某些行为。
枚举(Enum) :用来定义一组固定的值,比如一周的七天。
两者的区别
基本数据类型 :简单、直接存值,占用内存少。
引用数据类型 :复杂、存的是'地址',指向实际的数据,占用内存多。
举个例子
假设你在写一个程序记录学生的信息:如果要存多个学生的信息,可以用 类 来定义一个'学生'对象,或者用 数组 来存多个学生的成绩。
用 int 存学生的年龄。
用 double 存学生的成绩。
用 String 存学生的名字。
用 boolean 判断学生是否及格。
9. 方法 同样可以让 AI 教我们 Java 里的方法,提示词如下:
1. 方法是什么? 方法就像是一个'任务执行者'。它负责完成某个具体的功能或任务。你可以把它想象成一个机器或者一个工人,你告诉它要做什么,它就按照你的要求去干活。
2. 方法的组成部分
名字 :就像每个人都有名字一样,方法也需要一个名字,用来标识它是谁。比如叫 add、printMessage 或者 calculateArea。
参数 :这是方法需要的'原材料'。如果方法要完成加法运算,那它就需要两个数字作为参数。如果没有需要的原材料,也可以没有参数。
功能实现 :这是方法的核心部分,告诉它具体怎么干活。比如加法就是把两个数相加,打印消息就是把内容输出到屏幕上。
返回值 :有些方法干完活后会给你一个结果(比如加法的结果是 5),这就是返回值。但也有一些方法只是单纯地完成任务,不给你任何结果。
3. 方法的格式 修饰符 返回值类型 方法名 (参数列表) {
return 结果;
}
public int add (int a, int b) {
int result = a + b;
return result;
}
public :这是一个修饰符,表示这个方法可以被任何人调用。
int :这是返回值类型,表示这个方法最后会返回一个整数。
add :这是方法的名字。
(int a, int b) :这是参数列表,表示这个方法需要两个整数作为输入。
return result; :这是返回语句,表示把计算结果返回给调用者。
4. 调用方法 定义好方法之后,你需要告诉程序'我要用这个方法干活了',这就叫调用方法。
还是用上面的例子:
int sum = add(3 , 5 );
System.out.println("结果是:" + sum);
add(3, 5) :这里是调用方法,把 3 和 5 作为参数传进去。
sum:方法返回的结果会被存到 sum 变量里。
5. 方法的作用 方法的主要作用是复用代码 和让程序更清晰 。如果你有一个任务需要反复做,比如计算加法、打印消息、读取文件等,就可以把这些任务封装成方法。以后只需要调用方法就可以了,不用重复写代码。
6. 方法的分类 根据不同的用途,Java 中的方法可以分为以下几类:
public void showMenu () {
System.out.println("1. 开始游戏" );
System.out.println("2. 设置选项" );
System.out.println("3. 退出游戏" );
}
public int multiply (int x, int y) {
return x * y;
}
public void printName (String name) {
System.out.println("你好," + name);
}
public void sayHello () {
System.out.println("你好!" );
}
7. 举个例子 简单来说,Java 中的方法就是一个'任务执行者'。你告诉它名字、给它原材料(参数)、告诉它怎么干活(功能实现),最后它可能会给你一个结果(返回值)。通过使用方法,可以让代码更简洁、更易读,也能避免重复劳动。
当然也可以让 AI 给我们举几个生活中的例子,方便我们理解。
提示词:
方法定义:
假设你要制作一杯咖啡。这个过程可以看作是一个方法。方法的名称是 makeCoffee,它需要一些参数(如咖啡豆、水、糖),并且会返回一杯咖啡。
方法名 :makeCoffee
参数 :咖啡豆、水、糖
返回值 :一杯咖啡
取出咖啡豆。
加入适量的水。
加入适量的糖。
使用咖啡机煮咖啡。
返回煮好的咖啡。
public class CoffeeMaker {
public String makeCoffee (String coffeeBeans, int waterAmount, int sugarAmount) {
System.out.println("取出 " + coffeeBeans);
System.out.println("加入 " + waterAmount + " 毫升水" );
System.out.println("加入 " + sugarAmount + " 克糖" );
System.out.println("使用咖啡机制作咖啡" );
return "一杯美味的咖啡" ;
}
}
public class Main {
public static void main (String[] args) {
CoffeeMaker maker = new CoffeeMaker ();
String coffee = maker.makeCoffee("哥伦比亚咖啡豆" , 200 , 10 );
System.out.println("制作完成:" + coffee);
}
}
方法定义:
假设你要计算一个矩形的面积。这个过程可以看作是一个方法。方法的名称是 calculateArea,它需要两个参数(如长和宽),并且会返回面积。
方法名 :calculateArea
参数 :长、宽
返回值 :面积
获取矩形的长和宽。
计算面积(长乘以宽)。
返回计算出的面积。
public class Geometry {
public double calculateArea (double length, double width) {
System.out.println("长:" + length + ", 宽:" + width);
double area = length * width;
return area;
}
}
public class Main {
public static void main (String[] args) {
Geometry geometry = new Geometry ();
double area = geometry.calculateArea(5.0 , 3.0 );
System.out.println("矩形的面积:" + area);
}
}
方法 :执行特定任务的代码块,类似于生活中的某个过程或操作。
方法名 :方法的名称,类似于这个过程的名称。
参数 :方法的输入数据,类似于操作所需的材料或条件。
返回值 :方法的输出数据,类似于操作的结果。
方法调用 :通过对象或类名来调用方法,类似于执行某个过程。
好的!用大白话来解释一下 Java 方法的重载(Overloading)。
8. 方法重载 方法重载是指在同一个类中可以有多个方法具有相同的名字,但它们的参数列表不同。这样做的目的是为了方便调用者使用不同的参数类型或数量来调用同一个方法名,从而实现不同的功能。
怎么理解方法重载?
想象一下,你有一个朋友叫'小明',他有很多不同的技能,比如画画、唱歌、跳舞。虽然他的名字都是'小明',但每次你找他做不同的事情时,他都会用不同的方式来完成。这就是方法重载的概念:同一个名字,但做的事情不一样。
方法名必须相同 :
参数列表必须不同 :
参数的数量不同。
参数的类型不同。
参数的顺序不同。
例子
假设我们有一个 Calculator 类,里面有一些计算方法:
public class Calculator {
public int add (int a, int b) {
return a + b;
}
public double add (double a, double b) {
return a + b;
}
public int add (int a, int b, int c) {
return a + b + c;
}
}
这个方法接受两个整数作为参数,并返回它们的和。
这个方法接受两个浮点数作为参数,并返回它们的和。
这个方法接受三个整数作为参数,并返回它们的和。
public int add (int a, int b, int c) {
return a + b + c;
}
public double add (double a, double b) {
return a + b;
}
public int add (int a, int b) {
return a + b;
}
调用方法
你可以根据需要调用不同的 add 方法:
public class Main {
public static void main (String[] args) {
Calculator calc = new Calculator ();
int sum1 = calc.add(5 , 3 );
double sum2 = calc.add(5.5 , 3.5 );
int sum3 = calc.add(5 , 3 , 2 );
System.out.println("sum1: " + sum1);
System.out.println("sum2: " + sum2);
System.out.println("sum3: " + sum3);
}
}
方法重载 :同一个类中,方法名相同,但参数列表不同。
参数列表不同 :参数数量、类型、顺序不同。
方便调用 :通过不同的参数组合来调用同一个方法名,实现不同的功能。
10. 算术运算符 同样可以让 AI 教我们算术运算符,提示词:
用大白话详细的讲下 java 里的算术运算符
可以看出 AI 给出了我们具体的例子,方便我们学习。
特别注意 :如果 + 用在字符串上,它会变成'拼接'操作。
String str1 = "你好" ;
String str2 = "世界" ;
String result = str1 + str2;
int a = 5 ;
int b = 3 ;
int result = a + b;
特别注意 :如果数字前面加个 -,表示这个数是负数。
int a = 5 ;
int b = 3 ;
int result = a - b;
作用 :把两个数相乘。
特别注意 :乘法的结果可能会很大,所以要注意数据类型是否会溢出(比如 int 类型装不下)。
int a = 5 ;
int b = 3 ;
int result = a * b;
作用 :把一个数分成若干份。
特殊情况 :
如果被除数和除数都是整数,结果也会是整数(小数部分会被丢弃)。
比如:5 / 2 = 2(不是 2.5)。
如果有一个是浮点数,结果就是浮点数。
比如:5.0 / 2 = 2.5。
如果除数是 0,程序会报错(除零错误)。
int a = 6 ;
int b = 3 ;
int result = a / b;
作用 :算出两个数相除后剩下的'零头'(余数)。
怎么理解?
假设你有 5 个苹果,要分给 3 个人,每人分 1 个,最后还剩 2 个苹果。这剩下的 2 就是取模的结果。
特别注意 :
如果被除数是负数,结果的符号和被除数一致。
比如:-5 % 3 = -2。
int a = 5 ;
int b = 3 ;
int result = a % b;
运算符 名称 描述 示例 结果 +加法 把两个数相加 5 + 38-减法 从一个数中减去另一个数 5 - 32*乘法 把两个数相乘 5 * 315/除法 把一个数分成若干份 6 / 32%取模 算出两个数相除后的余数 5 % 32
int items = 10 ;
int people = 3 ;
int each = items / people;
int left = items % people;
int price = 10 ;
int quantity = 3 ;
int total = price * quantity;
11. 自增自减运算符 提示词:用大白话讲下 java 里的自增自减运算符
什么是自增自减运算符?
自增自减运算符是用来让变量的值自动加 1 或减 1 的快捷方式。它比直接写 x = x + 1 更简洁。
作用 :让变量的值加 1。
两种用法 :
前置自增 :++x,先加 1 再使用。
后置自增 :x++,先使用再加 1。
作用 :让变量的值减 1。
两种用法 :
前置自减 :--x,先减 1 再使用。
后置自减 :x--,先使用再减 1。
前置 vs 后置的区别
前置和后置的区别在于什么时候改变变量的值 。我们通过例子来理解:
int x = 5 ;
int y = ++x;
System.out.println(x);
System.out.println(y);
这里 ++x 表示先让 x 加 1,所以 x 和 y 都变成了 6。
int x = 5 ;
int y = x++;
System.out.println(x);
System.out.println(y);
这里 x++ 表示先把 x 的原始值(5)赋给 y,然后再让 x 加 1,所以 y 是 5,而 x 变成了 6。
int x = 5 ;
int y = --x;
System.out.println("x = " + x);
System.out.println("y = " + y);
这里 --x 表示先让 x 减 1,所以 x 和 y 都变成了 4。
int x = 5 ;
int y = x--;
System.out.println("x = " + x);
System.out.println("y = " + y);
这里 x-- 表示先把 x 的原始值(5)赋给 y,然后再让 x 减 1,所以 y 是 5,而 x 变成了 4。
运算符 名称 描述 示例 结果 ++x前置自增 先加 1 再使用 ++xx+1x++后置自增 先使用再加 1 x++x--x前置自减 先减 1 再使用 --xx-1x--后置自减 先使用再减 1 x--x
int count = 5 ;
while (count > 0 ){
System.out.println(count);
count--;
}
int [] numbers = {1 , 2 , 3 , 4 , 5 };
for (int i = 0 ; i < numbers.length; i++){
System.out.println(numbers[i]);
}
for (int i = 0 ; i < 5 ; i++){
System.out.println(i);
}
结合逻辑判断 :
自增自减运算符经常和条件判断一起使用,比如:
int x = 0 ;
while (x++ < 5 ){
System.out.println(x);
}
避免复杂表达式 :
如果在一个复杂的表达式中同时使用自增自减运算符,可能会导致代码难以理解。比如:
int x = 5 ;
int y = x+++++x;
12. 关系运算符 同样可以问 AI,提示词
请用大白话详细的讲解下 java 里的关系运算符
什么是关系运算符?
关系运算符是用来比较两个值 的符号。它们的结果只有两种:true(真)或者 false(假)。
比如:判断一个数是不是比另一个数大,或者两个数是否相等。
作用 :判断两个值是否相等。
如果 a 和 b 相等,结果是 true。
如果不相等,结果是 false。
上面的例子中,result 的值是 false。
特别注意 :
对于基本数据类型(如 int、double),直接比较值是否相等。
对于引用类型(如对象、字符串),比较的是内存地址是否相同,而不是内容是否相等。
int a = 5 ;
int b = 3 ;
boolean result = (a == b);
作用 :判断两个值是否不相等。
如果 a 和 b 不相等,结果是 true。
如果相等,结果是 false。
上面的例子中,result 的值是 true。
int a = 5 ;
int b = 3 ;
boolean result = (a != b);
作用 :判断左边的值是否大于右边的值。
如果 a 大于 b,结果是 true。
否则结果是 false。
上面的例子中,result 的值是 true。
int a = 5 ;
int b = 3 ;
boolean result = (a > b);
作用 :判断左边的值是否小于右边的值。
如果 a 小于 b,结果是 true。
否则结果是 false。
上面的例子中,result 的值是 false。
int a = 5 ;
int b = 3 ;
boolean result = (a < b);
作用 :判断左边的值是否大于或等于右边的值。
如果 a 大于或等于 b,结果是 true。
否则结果是 false。
上面的例子中,result 的值是 true。
int a = 5 ;
int b = 5 ;
boolean result = (a >= b);
作用 :判断左边的值是否小于或等于右边的值。
如果 a 小于或等于 b,结果是 true。
否则结果是 false。
上面的例子中,result 的值是 true。
int a = 3 ;
int b = 5 ;
boolean result = (a <= b);
运算符 名称 描述 示例 结果 ==等于 判断两个值是否相等 5 == 3false!=不等于 判断两个值是否不相等 5 != 3true>大于 判断左边是否大于右边 5 > 3true<小于 判断左边是否小于右边 5 < 3false>=大于等于 判断左边是否大于等于右边 5 >= 5true<=小于等于 判断左边是否小于等于右边 3 <= 5true
int score = 85 ;
if (score >= 90 ){
System.out.println("优秀!" );
} else if (score >= 60 ){
System.out.println("及格!" );
} else {
System.out.println("不及格!" );
}
区分 = 和 == :
= 是赋值运算符,用来给变量赋值。
比如:int a = 5; 表示把 5 赋值给 a。
== 是关系运算符,用来判断两个值是否相等。
浮点数比较 :
浮点数(如 double 或 float)可能会有精度问题,不能直接用 == 比较是否相等。
比如:0.1 + 0.2 == 0.3 的结果可能是 false,因为浮点数计算会有误差。
字符串比较 :
字符串不能用 == 比较内容是否相等,要用 .equals() 方法。
String str1 = "hello" ;
String str2 = "hello" ;
boolean result = str1.equals(str2);
13. 逻辑运算符 可以让 AI 给我们讲下,提示词:
请用大白话详细的讲下 java 里的逻辑运算符
什么是逻辑运算符?
逻辑运算符是用来连接或操作布尔值(true 或 false)的符号。通过这些运算符,我们可以对多个条件进行判断,得出最终的结果,结果也是布尔值(true 或 false)。
作用 :只有当两个条件都为 true 时,结果才是 true;否则结果是 false。
如果 a 和 b 都为 true,结果是 true。
如果有一个为 false,结果就是 false。
上面的例子中,result 的值是 false。
记忆方法 :
只有'全对'才对,只要有一个'错'就错。
boolean a = true ;
boolean b = false ;
boolean result = (a && b);
作用 :只要有一个条件为 true,结果就是 true;只有当两个条件都为 false 时,结果才是 false。
如果 a 或 b 中有一个为 true,结果是 true。
如果两个都为 false,结果才是 false。
上面的例子中,result 的值是 true。
记忆方法 :
只要有一个'对'就对,只有'全错'才错。
boolean a = true ;
boolean b = false ;
boolean result = (a || b);
作用 :用来取反,把 true 变成 false,把 false 变成 true。
如果 a 是 true,!a 的结果是 false。
如果 a 是 false,!a 的结果是 true。
上面的例子中,result 的值是 false。
记忆方法 :
就像照镜子一样,把原来的值反过来。
boolean a = true ;
boolean result = !a;
boolean isPasswordCorrect = true ;
boolean isUsernameCorrect = false ;
if (isPasswordCorrect && isUsernameCorrect){
System.out.println("登录成功!" );
} else {
System.out.println("登录失败!" );
}
短路特性
Java 的逻辑运算符有'短路'的特性:
对于 && :如果第一个条件已经是 false,后面的部分就不会再计算了,因为结果肯定为 false。
对于 || :如果第一个条件已经是 true,后面的部分就不会再计算了,因为结果肯定为 true。
boolean a = false ;
boolean b = true ;
if (a && (1 /0 == 0 )){
System.out.println("执行了" );
}
14. 条件判断 可以看 AI 如何教我们,提示词:
请用大白话讲下 java 里的条件判断
什么是条件判断?
条件判断就是让程序根据不同的情况做出不同的选择。就像我们生活中会遇到的选择题一样:
如果天气好,就去公园散步;
如果天气不好,就在家看电影。
在 Java 中,条件判断通过 if、else if 和 else 来实现。
作用 :当某个条件为 true 时,执行特定的代码。
解释:如果 age 大于或等于 18,就会打印'你已经成年了'。
int age = 18 ;
if (age >= 18 ){
System.out.println("你已经成年了!" );
}
作用 :当某个条件为 true 时,执行一段代码;否则执行另一段代码。
解释:如果分数大于或等于 60,打印'及格了';否则打印'不及格'。
int score = 75 ;
if (score >= 60 ){
System.out.println("及格了!" );
} else {
System.out.println("不及格!" );
}
3. 多重条件判断 if...else if...else
作用 :当有多个条件需要判断时,可以使用 else if 添加更多的分支。
解释:
如果分数大于或等于 90,打印'优秀';
如果分数在 60 到 89 之间,打印'及格';
否则打印'不及格'。
int score = 85 ;
if (score >= 90 ){
System.out.println("优秀!" );
} else if (score >= 60 ){
System.out.println("及格!" );
} else {
System.out.println("不及格!" );
}
条件表达式
条件判断的核心是条件表达式 ,它必须返回一个布尔值(true 或 false)。常用的条件表达式包括:
==:判断两个值是否相等。
!=:判断两个值是否不相等。
>:判断左边的值是否大于右边的值。
<:判断左边的值是否小于右边的值。
>=:判断左边的值是否大于或等于右边的值。
<=:判断左边的值是否小于或等于右边的值。
&&(与):只有两个条件都为 true 时,结果才是 true。
||(或):只要有一个条件为 true,结果就是 true。
!(非):取反,把 true 变成 false,把 false 变成 true。
int age = 20 ;
boolean hasPermission = true ;
if (age >= 18 && hasPermission){
System.out.println("你可以开车!" );
} else {
System.out.println("你还不能开车!" );
}
嵌套条件判断
有时候我们需要在条件判断中再加一层判断,这就是嵌套条件判断。
int age = 16 ;
boolean hasPermission = true ;
if (age >= 18 ){
System.out.println("你可以开车!" );
} else {
if (hasPermission){
System.out.println("你可以骑自行车!" );
} else {
System.out.println("你还不能骑车!" );
}
}
解释:
如果年龄大于或等于 18,直接打印'你可以开车';
如果年龄小于 18,再判断是否有权限骑自行车。
int year = 2024 ;
if ((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ){
System.out.println("这是闰年!" );
} else {
System.out.println("这不是闰年!" );
}
int score = 85 ;
if (score >= 90 ){
System.out.println("A 等级" );
} else if (score >= 70 ){
System.out.println("B 等级" );
} else {
System.out.println("C 等级" );
}
避免过多的嵌套 :
过多的嵌套会让代码变得难以阅读和维护。尽量保持条件判断简洁明了。
条件表达式的优先级 :
在复杂的条件表达式中,注意使用括号来明确优先级。比如:
if ((a > b) && (b < c)){
...
}
15. 三元运算符 可以看出 AI 不仅给我们讲了什么是三元运算符也给我们举出了具体的例子。
三元运算符(简化条件判断)
如果条件判断很简单,可以用三元运算符代替 if...else。
如果条件为 true,执行 表达式 1;否则执行 表达式 2。
int score = 75 ;
String result = (score >= 60 ) ? "及格" : "不及格" ;
System.out.println(result);
解释:如果分数大于或等于 60,result 是'及格';否则是'不及格'。
关键字 描述 示例 if单个条件判断 if (x > 0) { ... }else当 if 条件为假时执行 if (x > 0) { ... } else { ... }else if多个条件判断 if (x > 0) { ... } else if (x < 0) { ... }? :三元运算符 x > 0 ? "正数" : "非正数"
16. switch 在 Java 中,switch 是一种控制结构,用来执行多分支选择。它可以根据一个变量的值来匹配多个情况(case),并执行与之对应的代码块。相比使用多个 if-else 语句,switch 更加简洁和清晰。
也可以看下 AI 是如何讲 switch 的。
如果你是去 A 地方 ,就走第一条路。
如果你是去 B 地方 ,就走第二条路。
如果你是去 C 地方 ,就走第三条路。
如果你不知道要去哪(或者没写清楚),那就走'默认'的那条路。
在 Java 里,switch 就是这个指示牌,case 是每个地方的名字(比如 A、B、C),而 default 就是'默认'的路。
int day = 3 ;
switch (day){
case 1 :
System.out.println("星期一" );
break ;
case 2 :
System.out.println("星期二" );
break ;
case 3 :
System.out.println("星期三" );
break ;
default :
System.out.println("未知的日子" );
}
day 是今天的数字,比如 3 表示星期三。
switch (day) 就是看 day 的值是多少。
如果 day 是 3,就会执行 case 3 的代码,打印出'星期三'。
如果 day 不是 1、2 或 3,就会走 default 的路,打印'未知的日子'。
case:每个 case 是一种可能的情况。
break:每执行完一个 case 后,记得用 break 停下来,不然会继续往下走(叫'贯穿')。
default:如果没有匹配到任何 case,就走 default 的路。
总结一下,switch 就是用来根据不同的值,选择不同的操作,就像交通指示牌一样!
17. for 循环 在 Java 中,for 循环是一种用来重复执行一段代码的控制结构。它非常适合用来处理需要多次执行相同操作的场景,比如遍历数组、计数等。。
看下 AI 如何教我们的。
用大白话来说,Java 里的 for 循环就像是一个'重复做事的小工',它会按照你设定的规则,不停地做同一件事,直到完成为止。
想象一个场景:
假设你在包饺子,一共有 10 个饺子要包。你会怎么做?
开始 :先从第 1 个饺子开始。
条件 :只要还没包到第 10 个饺子,就继续包。
动作 :每次包好一个饺子,数一下已经包了几个。
结束 :等包到第 10 个饺子时,就停下来。
在 Java 里,for 循环就是用来实现这种'重复做事'的逻辑。
初始化 :就像告诉小工'从第 1 个饺子开始'。
条件 :告诉小工'只要没超过 10 个,就继续包'。
更新 :每次包完一个饺子后,告诉小工'下一个饺子是哪个'。
循环体 :就是每次重复要做的事情(比如包饺子的动作)。
for (int i = 1 ; i <= 5 ; i++){
System.out.println("当前数字是:" + i);
}
int i = 1 :这是初始化,表示从数字 1 开始。
i <= 5 :这是条件,表示只要数字小于或等于 5,就继续循环。
i++ :这是更新,表示每次循环结束后,数字加 1。
System.out.println(...) :这是每次循环要做的事情,这里是打印当前的数字。
当前数字是:1 当前数字是:2 当前数字是:3 当前数字是:4 当前数字是:5
再举个通俗的例子:
假设你要给 5 个小朋友发糖果,每个小朋友发 1 颗糖:
for (int kid = 1 ; kid <= 5 ; kid++){
System.out.println("给第 " + kid + " 个小朋友发糖果!" );
}
给第 1 个小朋友发糖果! 给第 2 个小朋友发糖果! 给第 3 个小朋友发糖果! 给第 4 个小朋友发糖果! 给第 5 个小朋友发糖果!
总结:
for 循环的核心思想就是'重复做事',你可以告诉它:
从哪里开始(初始化)。
做到什么时候停止(条件)。
每次做完后怎么调整(更新)。
简单来说,for 循环就是'按规矩重复干活的小工'! 😊
18. while 循环 在 Java 中,while 循环是一种用来重复执行一段代码的控制结构。它和 for 循环类似,但更灵活,适合在循环次数不确定的情况下使用。
通俗理解
想象你去钓鱼,你不知道什么时候能钓到鱼,但你会一直坐在河边,直到钓到一条鱼为止。
while 循环就是帮你自动完成这种'持续做某事,直到满足某个条件'的工具。
看下 AI 如何教我们,提示词如下:
用大白话通俗的讲下 java 里的 while 循环
开始 :你站在公交站牌旁边。
条件 :只要公交车还没来,你就继续等。
动作 :每次看看公交车来了没有,如果没来就再等等。
结束 :等公交车来了,你就上车,不再等了。
在 Java 里,while 循环就是用来实现这种'一直重复做某事,直到某个条件不满足'的逻辑。
条件 :告诉程序'什么时候需要继续循环'。
循环体 :就是每次循环要做的事情。
只要条件为 true(也就是'成立'),就会一直重复执行循环体里的代码。一旦条件变成 false(也就是'不成立'),循环就会停止。
int i = 1 ;
while (i <= 5 ){
System.out.println("当前数字是:" + i);
i++;
}
int i = 1 :这是初始化,表示从数字 1 开始。
i <= 5 :这是条件,表示只要数字小于或等于 5,就继续循环。
System.out.println(...) :这是每次循环要做的事情,这里是打印当前的数字。
i++ :这是更新,表示每次循环结束后,数字加 1。
当前数字是:1 当前数字是:2 当前数字是:3 当前数字是:4 当前数字是:5
再举个通俗的例子:
假设你要给小朋友发糖果,但不知道有多少个小朋友,只知道糖果有限,比如 5 颗糖:
int candies = 5 ;
int kid = 1 ;
while (candies > 0 ){
System.out.println("给第 " + kid + " 个小朋友发糖果!" );
candies--;
kid++;
}
给第 1 个小朋友发糖果! 给第 2 个小朋友发糖果! 给第 3 个小朋友发糖果! 给第 4 个小朋友发糖果! 给第 5 个小朋友发糖果!
总结:
while 循环的核心思想就是'不停地检查条件,符合条件就继续做事'。你可以告诉它:
条件 :什么时候需要继续做。
动作 :每次要做些什么。
简单来说,while 循环就像一个'不停问'还能继续吗?'的小孩',直到你说'不行了',它才会停下来!
19. break 和 continue break 和 continue 是用来控制循环执行的两个关键字,它们的作用可以这样简单理解:
break:
当代码遇到 break 时,会立刻停止当前循环的执行,并跳出整个循环体。
换句话说,break 就像是一个'紧急出口',一旦触发,循环就直接结束了,不会再执行后续的代码。
continue:
当代码遇到 continue 时,会跳过当前循环中剩余的代码,直接进入下一次循环迭代。
这就好比'跳过这一轮',继续进行下一轮循环,而不是完全退出循环。
1. break 是什么? break 的作用是立刻停止当前循环的执行,并跳出整个循环体 。也就是说,一旦代码遇到 break,循环就直接结束了,不会再继续执行后续的循环迭代。
举个生活中的例子:
假设你在超市买东西,目标是找到一瓶可乐。你走进货架,一瓶一瓶地看:
如果你找到了可乐,你就不再继续找了,直接拿着可乐去结账。
这里的'找到可乐后不再继续找'就是 break 的作用。
for (int i = 1 ; i <= 5 ; i++){
if (i == 3 ){
break ;
}
System.out.println("数字:" + i);
}
当 i 等于 3 时,break 让循环直接结束了,后面的 i=4 和 i=5 不会再被执行。
2. continue 是什么? continue 的作用是跳过当前循环中剩余的代码,直接进入下一次循环迭代 。换句话说,当遇到 continue 时,程序不会执行当前循环剩下的代码,而是直接跳到下一轮循环。
举个生活中的例子:
假设你在超市买东西,目标是买一些水果,但你不想买橘子。你一个一个地检查水果:
如果发现是橘子,你就跳过它,不把它放进购物车,继续看下一个水果。
这里的'跳过橘子'就是 continue 的作用。
for (int i = 1 ; i <= 5 ; i++){
if (i == 3 ){
continue ;
}
System.out.println("数字:" + i);
}
当 i 等于 3 时,continue 跳过了 System.out.println 这一行代码,直接进入下一次循环(i=4)。
3. 总结对比: 特性 breakcontinue作用 结束整个循环 跳过当前循环的剩余部分,进入下一次循环 是否继续循环 不再继续循环 继续下一次循环 应用场景 找到目标后不需要再继续搜索 遇到某些条件时跳过特定操作
4. 再来一个综合的例子: 假设我们有一个任务:打印 1 到 10 的数字,但要跳过 5 和 7,如果遇到 9 就提前结束。
for (int i = 1 ; i <= 10 ; i++){
if (i == 5 || i == 7 ){
continue ;
}
if (i == 9 ){
break ;
}
System.out.println("数字:" + i);
}
数字:1 数字:2 数字:3 数字:4 数字:6 数字:8
遇到 5 和 7 时,continue 跳过了它们。
遇到 9 时,break 提前结束了循环。
20. 数组 在 Java 中,数组是一种用来存储多个相同类型数据的容器。它就像一个'盒子',可以装多个东西,但这些'东西'必须是同一种类型的(比如全是整数、全是字符串等)。
通俗理解
想象你去超市买苹果,店员给你一个篮子,让你把选好的苹果放进篮子里。这个篮子就是数组,而里面的苹果就是数组中的元素。
如果你想装 5 个苹果,店员会给你一个能装 5 个苹果的篮子。
每个苹果都有自己的位置(编号),比如第一个苹果在位置 0,第二个苹果在位置 1,依此类推。
再看下 AI 如何教我们的,提示词
请用大白话讲下 java 里的数组
用大白话来说,Java 里的 数组 就像一个'盒子',这个盒子里可以装多个相同类型的东西,比如装多个苹果、多个书本或者多个数字。每个东西放在盒子里都有自己的位置,我们可以根据位置来找到它。
想象一个场景:
假设你去超市买了一箱饮料,这箱饮料里有 6 瓶水,每瓶水都整齐地排在箱子里的一个格子里。你可以通过数格子来找第几瓶水,比如第 1 瓶、第 2 瓶……
在 Java 里,数组就像这个箱子,它可以装多个东西(比如数字、字符串等),并且每个东西都有一个'编号'(从 0 开始)。
容量 :数组的大小是固定的,比如你买了 6 瓶水,那这个箱子只能装 6 瓶水。
索引 :每个瓶子的位置叫'索引',从 0 开始数,所以第 1 瓶水的索引是 0,第 2 瓶水的索引是 1,以此类推。
类型 :数组里的东西必须是同一种类型,比如全是整数、全是字符串,不能混着装。
numbers[0 ] = 10 ;
numbers[1 ] = 20 ;
int firstNumber = numbers[0 ];
int secondNumber = numbers[1 ];
再举个通俗的例子:
假设我们要记录一周每天的气温:
int [] temperatures = new int [7 ];
temperatures[0 ] = 25 ;
temperatures[1 ] = 27 ;
temperatures[2 ] = 30 ;
int tuesdayTemp = temperatures[1 ];
System.out.println("星期二的气温是:" + tuesdayTemp);
数组是一个固定大小的盒子 ,用来装多个相同类型的东西。
索引是从 0 开始的 ,用来标记每个东西的位置。
数组的大小不能改变 ,如果你需要动态调整大小,可以用其他数据结构(比如 ArrayList)。
简单来说,数组就像是一个'带编号的小格子盒子',你可以根据编号快速找到想要的东西!
21. 数组的遍历 在 Java 中,数组遍历是指依次访问数组中的每个元素。
提示词:用大白话讲下 Java 里的数组遍历
好的!用大白话来说,Java 里的 数组遍历 就像是'逐个检查盒子里的东西',假设你有一个装满东西的盒子(数组),你想看看里面每个东西是什么,或者对每个东西做点什么事情,这就是遍历。
想象一个场景:
假设你有一个装了 5 个水果的篮子,你想一个个地检查这些水果是什么,然后把它们的名字说出来。你会怎么做?
从第一个水果开始 :拿起第一个水果,看看它是什么。
继续看下一个 :放下第一个水果,拿起第二个水果,再看看它是什么。
重复这个过程 :直到最后一个水果被检查完。
在 Java 里,遍历数组就是类似的逻辑:逐个访问数组中的每个元素,并对它们做点事情。
方法 1:使用 for 循环
int [] numbers = {1 , 2 , 3 , 4 , 5 };
for (int i = 0 ; i < numbers.length; i++){
System.out.println("当前数字是:" + numbers[i]);
}
numbers.length :表示数组的长度(也就是有多少个元素)。
numbers[i]:表示数组中第 i 个位置的元素。
循环的过程 :从索引 0 开始,每次访问一个元素,直到访问到最后一个元素。
当前数字是:1 当前数字是:2 当前数字是:3 当前数字是:4 当前数字是:5
方法 2:使用增强型 for 循环(更简单) Java 提供了一种更简洁的方式,叫'增强型 for 循环',就像是直接拿水果出来看,而不用关心它的位置。
int [] numbers = {1 , 2 , 3 , 4 , 5 };
for (int number : numbers){
System.out.println("当前数字是:" + number);
}
int number : numbers:表示'依次取出数组中的每个元素,并把它赋值给变量 number'。
更简洁 :不需要手动管理索引,直接操作数组中的元素。
当前数字是:1 当前数字是:2 当前数字是:3 当前数字是:4 当前数字是:5
方法 3:使用 while 循环
int [] numbers = {1 , 2 , 3 , 4 , 5 };
int i = 0 ;
while (i < numbers.length){
System.out.println("当前数字是:" + numbers[i]);
i++;
}
int i = 0:初始化索引为 0。
i < numbers.length :只要索引还在数组范围内,就继续循环。
i++ :每次循环结束后,更新索引。
当前数字是:1 当前数字是:2 当前数字是:3 当前数字是:4 当前数字是:5
再举个通俗的例子:
假设你有一个装了 5 本书的书架,你想把每本书的名字读出来:
String[] books = {"Java 入门" , "Python 基础" , "算法导论" , "数据结构" , "人工智能" };
for (String book : books){
System.out.println("这本书的名字是:" + book);
}
这本书的名字是:Java 入门 这本书的名字是:Python 基础 这本书的名字是:算法导论 这本书的名字是:数据结构 这本书的名字是:人工智能
遍历数组 就是逐个访问数组中的每个元素。
常见的遍历方式有:
使用 for 循环(手动管理索引)。
使用增强型 for 循环(更简洁)。
使用 while 循环(适合需要灵活控制的情况)。
简单来说,遍历数组就像是'逐个检查盒子里的东西',并根据需要对它们做点事情!
五、综合实战案例
1. 猜大小游戏 既然是 AI 时代了,我们编写 Java 综合案例时,也可以让 AI 帮我们编写。
然后我们就可以直接用 AI 的代码了,可以看到 AI 给代码也加了详细的注释,方便我们学习,可以看到案例中用了我们学过的 while 循环。
import java.util.Random;
import java.util.Scanner;
public class GuessNumberGame {
public static void main (String[] args) {
Random random = new Random ();
int numberToGuess = random.nextInt(100 ) + 1 ;
Scanner scanner = new Scanner (System.in);
int guess;
boolean hasGuessedCorrectly = false ;
System.out.println("欢迎来到猜数字游戏!" );
System.out.println("我已经想好了一个 1 到 100 之间的数字。" );
while (!hasGuessedCorrectly){
System.out.print("请输入你的猜测: " );
guess = scanner.nextInt();
if (guess < numberToGuess){
System.out.println("太小了,再试一次!" );
} else if (guess > numberToGuess){
System.out.println("太大了,再试一次!" );
} else {
System.out.println("恭喜你,猜对了!正确的数字就是 " + numberToGuess);
hasGuessedCorrectly = true ;
}
}
scanner.close();
}
}
2. 生成验证码 同样这个综合案例也是让 AI 帮我们生成,给我们讲解。
可以看到 AI 生成的代码有详细的注释,方便我们学习。
import java.util.Random;
public class SMSVerificationCodeGenerator {
public static void main (String[] args) {
String verificationCode = generateVerificationCode();
System.out.println("生成的手机验证码是:" + verificationCode);
}
public static String generateVerificationCode () {
Random random = new Random ();
int code = random.nextInt(1000000 );
String verificationCode = String.format("%06d" , code);
return verificationCode;
}
}
3. 找最大 我们随便找几个数字,让 Java 定义一个方法,找出里面最大的数字。
public class FindMaxNumber {
public static void main (String[] args) {
int [] numbers = {1 , 2 , 3 , 8 , 5 };
int maxNumber = findMax(numbers);
System.out.println("数组中的最大数是:" + maxNumber);
}
public static int findMax (int [] array) {
int max = array[0 ];
for (int i = 1 ; i < array.length; i++){
if (array[i] > max){
max = array[i];
}
}
return max;
}
}
4. 随机点名 假设班级里有 18 名学生,用 Java 实现随机点名,添加代码注释。
import java.util.Random;
public class RandomRollCall {
public static void main (String[] args) {
String[] students = {"Alice" , "Bob" , "Charlie" , "David" , "Eve" , "Frank" , "Grace" , "Hannah" , "Ivy" , "Jack" , "Katherine" , "Liam" , "Mia" , "Noah" , "Olivia" , "Paul" , "Quinn" , "Rachel" , "Sam" , "Tom" };
String selectedStudent = pickRandomStudent(students);
System.out.println("被选中的学生是:" + selectedStudent);
}
public static String pickRandomStudent (String[] students) {
Random random = new Random ();
int randomIndex = random.nextInt(students.length);
return students[randomIndex];
}
}
六、面向对象编程
1. 什么是面向对象 我们可以让 AI 给我们讲下什么是面向对象,提示词如下:
请用大白话讲下 java 里的面向对象
你可以把面向对象想象成:在写程序的时候,把现实世界的东西'变成'程序里的小东西,让它们自己去干活。
比如:人、猫、手机、汽车……都可以变成程序里的一个'对象',每个对象都有自己的特点和能干的事情。
class 猫 {
String 名字;
int 年龄;
void 叫(){
System.out.println("喵~" );
}
}
猫 是一个'模板',告诉我们可以造什么样的猫。
接下来就可以造出具体的猫了:
猫 小花 = new 猫();
小花。名字 = "小花" ;
小花。年龄 = 2 ;
猫 大黑 = new 猫();
大黑。名字 = "大黑" ;
大黑。年龄 = 3 ;
先定义几个'类':
用户 类:有用户名、地址、电话
餐厅 类:有餐厅名、菜单、配送范围
订单 类:有订单号、菜品、价格、状态
然后创建具体对象:
用户对象:张三、李四
餐厅对象:肯德基、麦当劳
订单对象:编号为 1001 的订单
张三 在 肯德基 下了一个订单,系统检查有没有货,然后安排配送。
面向对象就是让你在写代码的时候,像搭积木一样,把现实世界的事物变成一个个'会动的对象',让它们一起帮你完成任务。
举个生活中的例子:做奶茶
想象你要开一家奶茶店,你得考虑很多东西:
奶茶的口味(属性):比如珍珠奶茶、椰果奶茶
奶茶的做法(方法):加水、加茶叶、加糖、摇一摇……
class 奶茶 {
String 口味;
int 糖分;
void 摇一摇(){
System.out.println("摇一摇,混合均匀" );
}
}
这个 奶茶 类就像一份配方,告诉你可以做出什么样的奶茶。
根据这个'配方'做出具体的奶茶——叫 对象(Object)
奶茶 m1 = new 奶茶();
m1.口味 = "珍珠" ;
m1.糖分 = 5 ;
奶茶 m2 = new 奶茶();
m2.口味 = "椰果" ;
m2.糖分 = 3 ;
它们都是根据同一个'配方'做出来的,但具体口味和糖分不一样。
面向对象就是用程序来模拟现实世界里的事物,把它们变成能干活的对象,让代码更容易理解、维护和扩展。
特点 白话解释 封装 把数据和功能包在一起,别人不用知道怎么做的,只要会用就行。 继承 孩子可以继承爸妈的优点,代码也可以这样偷懒。 多态 同一个动作,不同的对象做出来不一样。比如'叫'一声,猫是'喵',狗是'汪'。 抽象 不关心复杂细节,只关注关键特征。比如开车不需要懂发动机原理。
2. 类和对象的区别 AI 提示词:请用大白话讲下 Java 里类和对象的区别
模具决定了月饼长什么样:是圆的?方的?里面包什么馅?
它只是一个'设计图'或'模板',不是真的月饼。
class 月饼 {
String 馅料;
String 形状;
void 烘焙(){
System.out.println("正在烤月饼..." );
}
}
这个 月饼 类就是一个'图纸',告诉你可以做出什么样的月饼。
对象(Object)就是你用模具'压出来'的一个个真实月饼
是根据类创建出来的'实际的东西'。
可以有多个不同的月饼,比如豆沙馅的、五仁馅的……
月饼 月饼 1 = new 月饼();
月饼 1. 馅料 = "豆沙" ;
月饼 月饼 2 = new 月饼();
月饼 2. 馅料 = "五仁" ;
这里的 月饼 1 和 月饼 2 就是两个具体的'月饼对象'。
工厂里有个'手机设计图' → 相当于 Java 中的 类
根据这个设计图造出很多台手机 → 相当于 Java 中的 对象
一个类可以创建多个对象,每个对象可能有不同的属性值。
术语 白话解释 类(Class) 就是一个'模板'、'图纸',描述一类东西的共同特征 对象(Object) 是根据这个图纸造出来的具体实例
3. 面向对象编程 - 学生案例 我们用一个学生案例 来通俗讲解 面向对象编程(OOP) ,让你明白 Java 中是怎么用'类'和'对象'来描述现实世界的事物的。
我们要模拟现实中的学生信息,比如姓名、年龄、成绩等,并能做一些操作,比如打印信息、计算平均分等。
这个类就像一个'模板',告诉我们程序中可以有哪些学生、他们有什么属性、能做什么事情。
class Student {
String name;
int age;
double scoreMath;
double scoreEng;
void sayHello () {
System.out.println("大家好,我叫" + name + ",今年" + age + "岁。" );
}
double getAverageScore () {
return (scoreMath + scoreEng) / 2 ;
}
}
根据 Student 类,我们可以创建多个具体的学生对象:
Student stu1 = new Student ();
stu1.name = "张三" ;
stu1.age = 18 ;
stu1.scoreMath = 90 ;
stu1.scoreEng = 85 ;
Student stu2 = new Student ();
stu2.name = "李四" ;
stu2.age = 17 ;
stu2.scoreMath = 78 ;
stu2.scoreEng = 88 ;
stu1 是一个具体的对象,代表学生张三。
stu2 是另一个具体的对象,代表学生李四。
stu1.sayHello();
System.out.println("张三的平均分:" + stu1.getAverageScore());
stu2.sayHello();
System.out.println("李四的平均分:" + stu2.getAverageScore());
概念 白话解释 类(Student) 就是一个'学生模板',告诉我们可以造出什么样的学生 对象(stu1、stu2) 就是根据这个模板造出来的具体学生 属性(name、age) 学生的特征,比如名字、年龄 方法(sayHello、getAverageScore) 学生能干的事情,比如打招呼、算成绩
4. 封装 AI 提示词:请用大白话讲下 Java 里的封装
我们用大白话 + 生活中的例子 来通俗易懂地讲清楚 Java 中的 封装(Encapsulation) 是怎么回事。
封装就是把一些数据和操作这些数据的方法,包装在一起,并对外隐藏内部细节。
你可以把它想象成一个'黑盒子',你只需要知道怎么用它,不需要知道它是怎么工作的。
里面是怎么加热的?
温度传感器怎么工作?
电路板怎么控制?
把复杂的东西包装起来,只暴露简单的操作方式给别人用。
class 电水壶 {
private boolean 是否插电;
private double 当前水量;
private boolean 是否正在烧水;
public void 插电(){
是否插电 = true ;
System.out.println("电水壶已插电" );
}
public void 加水 (double 水量){
if (水量 > 0 && 水量 <= 1.5 ){
当前水量 = 水量;
System.out.println("已加入" + 水量 + "升水" );
} else {
System.out.println("加水失败:水量不合法(建议 0.1~1.5 升)" );
}
}
public void 开始烧水(){
if (是否插电 && 当前水量 > 0 ){
是否正在烧水 = true ;
System.out.println("开始烧水..." );
try {
Thread.sleep(3000 );
} catch (InterruptedException e){}
System.out.println("✅ 水烧开了!" );
} else {
System.out.println("请先插电并加水" );
}
}
}
public class 家庭使用 {
public static void main (String[] args) {
电水壶 我家的壶 = new 电水壶();
我家的壶.插电();
我家的壶.加水 (1.2 );
我家的壶.开始烧水 ();
}
}
优点 白话解释 数据安全 用户不能直接修改内部状态(比如不能直接设置 是否正在烧水 = true) 使用简单 用户只需要会'插电、加水、烧水',不用懂原理 控制逻辑 在方法中可以加判断和保护逻辑(比如防止加太多水) 易于维护 如果以后换成了智能电水壶,只需改类内部逻辑,外部调用不变
封装就像是给复杂功能穿上一件衣服,别人只能看到按钮,不能乱动里面的零件。
比如我们有一个 Student 类,里面有学生的姓名、年龄和成绩:
class Student {
private String name;
private int age;
public void setName (String name) {
this .name = name;
}
public String getName () {
return name;
}
public void setAge (int age) {
if (age > 0 && age < 150 ){
this .age = age;
} else {
System.out.println("年龄不合法!" );
}
}
public int getAge () {
return age;
}
}
把 name 和 age 设为 private,表示外部不能直接访问
提供了 setName()、getName()、setAge()、getAge() 这些方法给外部使用
在 setAge() 中还做了判断,防止设置错误的年龄(比如 -5 岁)
封装可以保护数据安全,让别人只能用你允许的方式去操作数据。
说法 白话解释 封装 把数据和操作包在一起,不让别人乱动,只能通过规定的方式操作 private 私有的,只有自己能用 public 公开的,别人也可以用 getter/setter 对外提供访问和修改属性的方法
如果你现在写了一个类,但不想别人随便改里面的数据,就可以用封装来保护它!
5. 继承
爸爸会做饭、开车、赚钱养家。
儿子出生后,不用从零学起,天生就会这些本事(当然也有些事不能继承,比如私房钱 😂)。
儿子还可以在爸爸的基础上加点自己的本事,比如打篮球、写代码。
比如父类叫 Animal(动物)
他有个技能是 eat()(吃东西)
class Animal {
void eat () {
System.out.println("吃东西" );
}
}
子类叫 Dog(狗)
他不想重复写'吃东西'的代码,于是直接'继承'爸爸
class Dog extends Animal {
void bark () {
System.out.println("汪汪叫" );
}
}
Dog 不用手动写 eat(),也能吃东西(继承来的)
它还能加上自己的新技能:bark()(叫)
继承就是让一个类(子类)自动拥有另一个类(父类)的功能,然后你再在这个基础上加点自己的功能。
父类是一个 Phone(普通手机),可以打电话。
子类是一个 SmartPhone(智能手机),它继承了打电话的功能,还加了上网、拍照、刷抖音……
6. 多态 假设你点了外卖,系统派了一个骑手来送餐。你只知道他是'骑手',但不知道他骑的是电动车、自行车,还是摩托车。
在你眼里,他们都属于'骑手'这个类型,但他们实际的行为可能不一样:
骑电动车的骑手:跑得快,直接送到门口;
骑自行车的骑手:慢一点,但也能送到;
摩托车骑手:速度更快,风雨无阻。
一个统一的身份(比如'骑手'),背后有不同的具体实现(电动车、自行车、摩托车),执行时会根据真实身份做出不同的行为。
在 Java 中是怎么体现的?
假设有这么几个类:
class Animal {
void makeSound () {
System.out.println("叫了一声" );
}
}
class Dog extends Animal {
@Override
void makeSound () {
System.out.println("汪汪汪" );
}
}
class Cat extends Animal {
@Override
void makeSound () {
System.out.println("喵~" );
}
}
Animal 是父类,它有一个方法 makeSound()。
Dog 和 Cat 是子类,它们都重写了 makeSound() 方法。
Animal a1 = new Dog ();
Animal a2 = new Cat ();
a1.makeSound();
a2.makeSound();
虽然变量 a1 和 a2 的类型是 Animal,但它们指向的对象分别是 Dog 和 Cat,所以调用的方法也各不相同。
多态就是让程序在运行的时候,能自动识别对象的真实身份,然后调用它自己的方法。
就像你看到的是'骑手',但系统知道他骑的是电动车还是自行车,从而决定怎么送餐。
好处 解释 代码灵活 同一个接口可以处理不同类型的数据或对象 易于扩展 如果以后加了新的子类(比如 Bird),不用改原来的代码就能支持新功能 可维护性强 把变化封装在子类中,主逻辑不变
7. 抽象 就像你画一只猫,可能不会把每根毛都画出来,而是抓住'耳朵、眼睛、尾巴'这些关键特征,别人一看就知道是猫。这就是抽象。
汽车厂在设计'车'这个概念的时候,并不会一开始就考虑某个具体车型的细节(比如轮胎大小、颜色),而是先定义所有车都有的基本特征 :
这些通用行为就构成了一个'抽象的概念'——可以理解为 Java 中的 抽象类(abstract class) 或者 接口(interface) 。
Java 中的抽象类(abstract class)
Java 提供了 abstract 关键字来定义抽象类和抽象方法。
不能直接创建对象(不能 new)
可以有普通方法,也可以有没有实现的方法 (叫抽象方法)
子类必须实现这些抽象方法
abstract class Animal {
abstract void makeSound () ;
void breathe () {
System.out.println("呼吸空气" );
}
}
class Dog extends Animal {
@Override
void makeSound () {
System.out.println("汪汪汪" );
}
}
想象一下,如果你要写很多动物类(狗、猫、鸟),它们都有'叫'的行为,但叫声不一样。这时候你可以:
定义一个抽象类 Animal
里面有个抽象方法 makeSound(),表示'都会叫'
每个子类自己决定怎么叫
统一了结构(都知道要实现'叫'这个功能)
留出空间让每个子类自由发挥(猫喵喵,狗汪汪)
更容易扩展(加新动物只需要继承抽象类并实现方法)
Java 中的抽象,就是把共性提取出来,不关心具体怎么做,只规定要有这个功能,由子类去实现。
就像是给程序员定了一套'模板',大家按这个模板来开发,代码就更容易理解和维护。
生活中的例子 Java 中的抽象 所有人都会'吃饭',但吃法不同 抽象方法 eat(),子类重写实现 不同手机都有'打电话'功能 接口或抽象类中定义方法,不同类实现 动物都会'动',但方式不同 抽象类 Animal + 抽象方法 move()
如果你能理解'抽象就是抓重点、留空实现',那你就已经掌握 Java 抽象的核心思想啦
8. 构造器 构造器就是'生孩子'时顺便给孩子起个名、穿个衣裳的那个人。
你在 Java 里创建一个对象,就像是'生了一个孩子'。
这个孩子刚出生,总得给他起个名字、设个年龄吧?
这些事,就交给构造器 来做。
public class Dog {
String name;
public Dog (String name) {
this .name = name;
}
}
生了一只新狗狗;
它的名字叫'旺财';
这个名字是通过构造器设置进去的。
构造器 = 创建对象 + 初始化数据
没有构造器,对象也能生出来(Java 默认会给你一个),但啥都没有带
有构造器,就可以让对象一出生就有名字、有年龄、有颜色……
9. this 关键字 什么是 this?
你可以把 this 想象成 '我自己' 或者 '当前这个对象' 。
就像你在一个班级里,老师说:'你自己检查一下作业。'
这里的'你自己'就相当于 Java 中的 this。
public class Person {
String name;
public Person (String name) {
this .name = name;
}
}
this.name 表示'我自己的名字'(类里的变量);
name 是传进来的一个值;
这句话就是在说:'把传进来的名字,给我自己保存起来。'
public class Person {
public void sayHello () {
System.out.println("你好!" );
}
public void greet () {
this .sayHello();
}
}
this.sayHello() 就是在说:'我自己调用一下打招呼的方法。'
总结一句话:
this 就是表示'当前这个对象自己',就像是在说:'嘿,就是我!'
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online