Java SE 零基础入门Day06 方法重载+Debug调试+String字符串全套API详解(超全干货)

本文为Java零基础入门系列Day06核心笔记,全覆盖课堂知识点:方法重载、IDEA Debug调试实战、方法参数传递、循环嵌套、API文档使用、String字符串底层原理+全套API+综合案例,保姆级讲解,适合Java初学者学习、复习、面试!


今日学习目标(零基础必看)

  1. 掌握方法重载的定义、规则、易错点,能独立编写重载方法
  2. 熟练使用IDEA Debug调试工具排查程序问题
  3. 彻底理解Java方法的值传递机制
  4. 掌握循环嵌套的执行流程与经典案例
  5. 学会使用官方API帮助文档查询方法
  6. 掌握String字符串两种创建方式、常量池原理
  7. 熟练使用String全套常用API
  8. 独立完成用户登录、字符统计综合实战

第一章 方法重载(Overload)

1.1 核心定义

方法重载 :在同一个类 中,允许定义方法名相同 ,但参数列表不同的多个方法,是Java多态性的一种体现。

1.2 重载核心规则

三要素(构成重载)

  1. 同一个类
  2. 方法名完全相同
  3. 参数列表不同 (满足其一即可)
    • 参数个数不同
    • 参数类型不同
    • 参数顺序不同(不同类型参数交换顺序)

两无关(不影响重载)

  1. 返回值类型无关
  2. 访问权限修饰符(public/private/protected)无关

1.3 记忆口诀

同类同名不同参,返回权限不相关

1.4 代码实战(正确+错误示例)

java 复制代码
public class MethodOverload {
    // 1. 无参方法
    public void print() {
        System.out.println("无参方法");
    }

    // 2. 参数个数不同 → 重载
    public void print(int a) {
        System.out.println("int参数:" + a);
    }

    // 3. 参数类型不同 → 重载
    public void print(String s) {
        System.out.println("String参数:" + s);
    }

    // 4. 参数顺序不同 → 重载
    public void print(int a, String s) {}
    public void print(String s, int a) {}

    // ❌ 错误演示:仅返回值不同,不构成重载!编译报错
    // public int print() { return 0; }

    // ❌ 错误演示:仅权限修饰符不同,不构成重载!
    // private void print() {}
}

1.5 方法重载的作用

方便调用者使用,同一个方法名可以实现不同的功能,简化代码调用。


第二章 IDEA Debug调试 实战教程(重点)

Debug是程序员排查bug、查看程序执行流程的核心工具,零基础必须熟练掌握!

2.1 什么是Debug

在代码中设置断点 ,让程序暂停执行,逐行运行代码,实时查看变量值、执行流程。

2.2 Debug使用步骤(IDEA版)

  1. 加断点 :点击代码行号右侧空白处,出现蓝色小圆点即为断点
  2. 启动调试 :右键代码 → Debug '类名' 或点击右上角Debug按钮
  3. 调试控制:使用调试按钮控制程序执行
  4. 查看数据:在Debug面板查看变量、参数、返回值
  5. 结束调试:点击红色停止按钮

2.3 调试按钮详解(零基础必记)

按钮 快捷键 名称 作用
🟢 F8 Step Over(步进) 逐行执行代码,跳过方法内部
📥 F7 Step Into(步入) 进入自定义方法/源码内部
📤 Shift+F8 Step Out(步出) 跳出方法,返回方法调用处
▶️ F9 Resume(恢复) 直接执行到下一个断点
⏹️ - Stop(停止) 结束调试

2.4 Debug实战案例

java 复制代码
public class DebugTest {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int sum = a + b; // 在此处加断点
        System.out.println(sum);
    }
}

调试效果:可以清晰看到absum的数值变化,直观理解程序执行流程。


第三章 方法的参数传递

3.1 核心结论

Java中只有一种参数传递方式:值传递

  • 基本数据类型:传递数据的副本
  • 引用数据类型:传递地址值的副本

3.2 基本类型参数传递

  • 传递:变量的数值副本
  • 结果:方法内修改副本,不会影响方法外的原变量

3.3 引用类型参数传递

  • 传递:对象的内存地址值
  • 结果:方法内通过地址修改对象内容,会影响方法外的原对象

3.4 代码验证

java 复制代码
public class ParamTransfer {
    // 基本类型:值传递
    public static void change(int num) {
        num = 100;
    }

    // 引用类型:地址值传递
    public static void change(int[] arr) {
        arr[0] = 100;
    }

    public static void main(String[] args) {
        // 基本类型测试
        int a = 10;
        change(a);
        System.out.println(a); // 输出10,原变量不变

        // 引用类型测试
        int[] array = {1,2,3};
        change(array);
        System.out.println(array[0]); // 输出100,原数组被修改
    }
}

第四章 循环嵌套

4.1 核心概念

循环嵌套:一个循环内部包含另一个完整的循环

  • 外层循环:控制行数
  • 内层循环:控制列数
  • 执行规则:外层执行1次,内层执行完整一轮

4.2 经典案例1:打印矩形

java 复制代码
for (int i = 0; i < 3; i++) { // 3行
    for (int j = 0; j < 5; j++) { // 5列
        System.out.print("*");
    }
    System.out.println();
}

4.3 经典案例2:九九乘法表(必考)

java 复制代码
public class LoopDemo {
    public static void main(String[] args) {
        // 外层:控制行数 1~9
        for (int i = 1; i <= 9; i++) {
            // 内层:控制列数 1~i
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + (i*j) + "\t");
            }
            System.out.println(); // 换行
        }
    }
}

第五章 API帮助文档使用教程

5.1 什么是API

API(应用程序编程接口):Java官方提供的类、方法说明书,帮助我们快速使用Java内置功能。

5.2 API文档使用步骤

  1. 打开JDK官方API文档
  2. 左上角搜索框输入类名 (如String
  3. 查看类的所属包、构造方法、成员方法
  4. 重点看:方法功能、参数、返回值

5.3 IDEA快捷键

Ctrl + Q:鼠标悬停在方法上,快速查看方法注释/功能


第六章 String字符串 核心详解(重点+面试高频)

6.1 String基础概述

  • 全类名:java.lang.String无需导包,直接使用
  • 底层存储:JDK8+ 采用byte[]字节数组,早期为char[]字符数组
  • 不可变性:String对象一旦创建,内容永远无法修改

6.2 字符串常量池

JVM在堆内存 中划分的一块特殊内存区域 ,专门存储直接赋值的字符串 ,目的:节约内存,复用对象

6.3 String对象两种创建方式(核心区别)

方式1:直接赋值(推荐)

java 复制代码
String s1 = "abc";
  1. 先去字符串常量池 查找"abc"
  2. 存在:直接复用常量池中的地址
  3. 不存在:在常量池创建新对象,再复用
  4. 优点:节约内存,多个相同字符串共用一个对象

方式2:new 构造方法创建

java 复制代码
String s2 = new String("abc");
  1. new一次,在堆内存开辟新空间
  2. 即使内容相同,地址值一定不同
  3. 缺点:浪费内存,创建2个对象(堆+常量池)

6.4 == 和 equals() 区别(必考)

符号 作用
== 基本类型:比较值;引用类型:比较内存地址
equals() String类重写后,比较字符串内容是否完全相同

代码验证

java 复制代码
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");

System.out.println(s1 == s2);      // true(地址相同)
System.out.println(s1 == s3);      // false(地址不同)
System.out.println(s1.equals(s3)); // true(内容相同)

第七章 String 全套常用API(背会!开发/考试必用)

7.1 判断功能API

方法 作用
boolean equals(String s) 比较内容,区分大小写
boolean equalsIgnoreCase(String s) 比较内容,不区分大小写
boolean contains(String s) 判断是否包含指定子串
boolean isEmpty() 判断字符串是否为空(长度=0)
boolean startsWith(String s) 判断是否以指定字符串开头
boolean endsWith(String s) 判断是否以指定字符串结尾

7.2 获取功能API

方法 作用
int length() 获取字符串长度(字符个数)
char charAt(int index) 获取指定索引处的字符
int indexOf(String s) 获取子串第一次出现的索引,无则返回-1
String substring(int begin) 从begin索引截取到末尾
String substring(int begin, int end) 截取[begin, end),含头不含尾

7.3 转换功能API

方法 作用
char[] toCharArray() 字符串 → 字符数组
byte[] getBytes() 字符串 → 字节数组(编码)
String replace(old, new) 替换所有指定子串
String toUpperCase() 转大写
String toLowerCase() 转小写

7.4 分割功能API

方法 作用
String[] split(String regex) 按指定规则分割字符串,返回字符串数组

⚠️ 注意:特殊字符分割(. | *)需要加转义符\\

7.5 API综合代码示例

java 复制代码
public class StringAPIDemo {
    public static void main(String[] args) {
        String s = "Hello-Java-123";
        
        // 1. 获取长度
        System.out.println(s.length()); // 13
        
        // 2. 截取字符串 [0,5)
        System.out.println(s.substring(0,5)); // Hello
        
        // 3. 分割字符串
        String[] arr = s.split("-");
        for (String str : arr) {
            System.out.print(str + " "); // Hello Java 123
        }

        // 4. 替换
        System.out.println(s.replace("Java", "World"));
    }
}

第八章 字符串编码与解码

8.1 核心概念

  • 编码 :字符串 → 字节数组(getBytes()
  • 解码 :字节数组 → 字符串(new String(byte[])
  • 作用:解决数据传输、文件读写中的乱码问题

8.2 代码示例

java 复制代码
String s = "你好";
// 编码
byte[] bytes = s.getBytes();
// 解码
String newStr = new String(bytes);

第九章 综合实战案例(零基础必练)

案例1:用户登录验证(优化版:3次机会)

需求:输入用户名密码,验证是否正确,最多尝试3次

java 复制代码
import java.util.Scanner;
public class LoginDemo {
    public static void main(String[] args) {
        String rightUser = "admin";
        String rightPwd = "123456";
        Scanner sc = new Scanner(System.in);

        // 3次登录机会
        for (int i = 0; i < 3; i++) {
            System.out.print("请输入用户名:");
            String username = sc.next();
            System.out.print("请输入密码:");
            String password = sc.next();

            if (rightUser.equals(username) && rightPwd.equals(password)) {
                System.out.println("登录成功!");
                break;
            } else {
                System.out.println("用户名或密码错误,剩余" + (2-i) + "次机会");
            }
        }
    }
}

案例2:字符统计

需求:统计字符串中大写字母、小写字母、数字、其他字符的数量

java 复制代码
import java.util.Scanner;
public class CharCount {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String s = sc.next();

        int upper = 0, lower = 0, num = 0, other = 0;

        // 遍历字符串
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c >= 'A' && c <= 'Z') upper++;
            else if (c >= 'a' && c <= 'z') lower++;
            else if (c >= '0' && c <= '9') num++;
            else other++;
        }

        System.out.println("大写字母:" + upper);
        System.out.println("小写字母:" + lower);
        System.out.println("数字:" + num);
        System.out.println("其他字符:" + other);
    }
}

第十章 高频易错点+面试题总结

  1. 方法重载:仅方法名+参数决定,返回值、权限无关
  2. Debug:F8逐行执行,F7进入方法,F9跳到下断点
  3. 参数传递:Java只有值传递,基本类型传值,引用类型传地址
  4. String创建:直接赋值用常量池,new创建新对象
  5. == vs equals:==比地址,equals比字符串内容
  6. substring :截取范围[begin, end),含头不含尾
  7. split :特殊字符需要转义\\

第十一章 本章总结

  1. 方法重载:同类同名不同参,返回权限不相关
  2. Debug调试:程序员必备工具,逐行排查bug
  3. 值传递:Java唯一参数传递方式
  4. String核心:常量池复用、不可变性、两种创建方式
  5. String API:判断、获取、转换、分割四大类方法,开发高频使用
  6. 实战案例:登录验证、字符统计,巩固字符串API用法

相关推荐
AI+程序员在路上2 小时前
Qt6读取rtsp视频流的几种方法
开发语言·qt6.3
aidesignplus2 小时前
从平方到线性:Mamba如何挑战Transformer的长序列效率瓶颈?
人工智能·python·深度学习·vim·transformer
xiaoye37082 小时前
java接口文档工具 swagger2和swagger3对比
java·服务器·前端
2301_773553622 小时前
Redis怎样优化复制缓冲池大小_调大repl-backlog-size减少频繁的全量同步触发
jvm·数据库·python
三维频道2 小时前
工业级三维扫描实测:汽车灯具复杂结构件的全尺寸 3D 测量方案分析
java·人工智能·python·数码相机·3d·汽车·汽车轻量化制造
人工智能AI技术2 小时前
过拟合与欠拟合:机器学习最基础核心问题
人工智能
tongyiixiaohuang2 小时前
基于轻易云的数据集成,实现企业系统间灵活对接
java·前端·数据库
weixin_381288182 小时前
HTML lang 属性的正确取值规范:BCP 47 格式详解与最佳实践
jvm·数据库·python
码农飞哥2 小时前
从Java后端到AI应用开发,我这两年做了什么
java·开发语言·人工智能