【Java +AI |基础篇day8 函数式编程 + 常用 API + 综合案例 + 15 道高频面试题】

📅 发布时间:2026/7/6 3:52:17 👁️ 浏览次数:
【Java +AI |基础篇day8 函数式编程 + 常用 API + 综合案例 + 15 道高频面试题】
第三份Java 面向对象编程OOP进阶篇③函数式编程 常用 API 综合案例 15 道高频面试题初学者友好 可运行代码 面试题详解前言初学 Java 函数式编程时我看不懂 Lambda 表达式的简化规则、方法引用的适用场景面试时面对综合案例题无从下手 —— 函数式编程是 JDK8 的核心特性常用 APIString、ArrayList是开发必备综合案例则是检验 OOP 掌握程度的关键。这篇内容把函数式编程、常用 API、GUI 编程和 15 道难度递增的面试题拆解清楚所有代码极简可运行帮新手从理论落地到实践应对面试和开发场景。一、核心思路 / 概念大白话讲透函数式编程核心是「关注做什么而非怎么做」—— 通过 Lambda 表达式和方法引用简化代码基于函数式接口实现告别冗余的匿名内部类。String 类核心是「不可变字符串」—— 创建后内容不能改常量池避免重复创建是开发中最常用的类。ArrayList 类核心是「动态数组」—— 支持自动扩容是存储数据的首选集合。GUI 编程Swing核心是「图形化界面」—— 用组件和布局管理器搭建界面事件监听处理用户操作虽日常开发少用但适合练手。二、实操步骤 可运行代码2.1 函数式编程JDK82.1.1 Lambda 表达式简化匿名内部类java运行import java.util.Arrays; import java.util.Comparator; class Student { String name; int age; public Student(String name, int age) { this.name name; this.age age; } Override public String toString() { return name age 岁; } } public class LambdaDemo { public static void main(String[] args) { Student[] students {new Student(张三,20), new Student(李四,18)}; // 匿名内部类排序 Arrays.sort(students, new ComparatorStudent() { Override public int compare(Student s1, Student s2) { return s1.age - s2.age; } }); // Lambda简化完整→最简 Arrays.sort(students, (s1, s2) - s1.age - s2.age); System.out.println(Arrays.toString(students)); // 输出李四18岁, 张三20岁 } }2.1.2 方法引用Lambda 进一步简化java运行import java.util.Arrays; import java.util.function.Supplier; public class MethodRefDemo { public static void main(String[] args) { // 1. 特定类型方法引用字符串按长度排序 String[] strs {apple, banana}; Arrays.sort(strs, String::length); System.out.println(Arrays.toString(strs)); // 输出[apple, banana] // 2. 构造器引用创建对象 SupplierStringBuilder sup StringBuilder::new; System.out.println(sup.get()); // 输出空字符串 } }2.2 常用 API2.2.1 String 类核心方法java运行public class StringDemo { public static void main(String[] args) { String s Hello World; System.out.println(s.length()); // 长度11 System.out.println(s.substring(0,5)); // 截取Hello System.out.println(s.replace(World, Java)); // 替换Hello Java System.out.println(s.contains(World)); // 包含true // 常量池直接赋值vs new String s1 abc; String s2 new String(abc).intern(); System.out.println(s1 s2); // true都指向常量池 } }2.2.2 ArrayList 类核心方法java运行import java.util.ArrayList; import java.util.List; public class ArrayListDemo { public static void main(String[] args) { ListString list new ArrayList(); list.add(a); // 添加 list.add(b); System.out.println(list.get(0)); // 获取a list.set(1, c); // 修改[a,c] list.remove(0); // 删除[c] System.out.println(list.size()); // 大小1 } }2.2.3 GUI 编程Swing 简单示例java运行import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class SwingDemo { public static void main(String[] args) { // 1. 创建窗口 JFrame frame new JFrame(Swing示例); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); // 2. 创建按钮 JButton btn new JButton(点击我); btn.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(frame, 按钮被点击); } }); // 3. 组装组件 frame.add(btn); frame.setVisible(true); } }2.3 综合案例员工信息管理系统核心代码2.3.1 员工实体类java运行public class Employee { private int id; private String name; private String job; private String dept; // 构造器getter/settertoString省略参考前文 }2.3.2 数据访问接口 实现java运行import java.util.ArrayList; import java.util.List; public interface EmployeeDAO { void add(Employee emp); ListEmployee queryAll(); boolean delete(int id); } public class EmployeeDAOImpl implements EmployeeDAO { private ListEmployee list new ArrayList(); private int nextId 1; Override public void add(Employee emp) { emp.setId(nextId); list.add(emp); } Override public ListEmployee queryAll() { return new ArrayList(list); } Override public boolean delete(int id) { for (Employee emp : list) { if (emp.getId() id) { list.remove(emp); return true; } } return false; } }2.3.3 GUI 界面核心逻辑java运行import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; public class EmployeeFrame extends JFrame { private EmployeeDAO dao new EmployeeDAOImpl(); private DefaultTableModel tableModel; public EmployeeFrame() { // 窗口初始化省略参考前文 // 表格展示、添加/删除按钮逻辑省略参考前文 } public static void main(String[] args) { new EmployeeFrame(); } }三、15 道 OOP 高级面试题核心精选题号核心考点核心答案摘要1方法重写规则方法名 / 参数列表一致、权限不缩小、返回值兼容、私有 / 静态方法不能重写2子类构造器规则必须先调用父类构造器super ()this ()/super () 不能共存都要第一行3多态的属性 vs 方法方法动态绑定看对象属性无多态看引用4向下转型需用 instanceof 校验避免 ClassCastException5final 关键字修饰类不可继承、方法不可重写、变量不可改值static final 是全局常量6抽象类不能创建对象子类必须实现所有抽象方法否则子类也需抽象7接口 JDK8 新特性默认方法可重写、静态方法接口名调用、私有方法接口内部用8抽象类 vs 接口抽象类单继承、含普通方法接口多实现、默认 public 成员9单例模式饿汉式线程安全但懒加载懒汉式需双重检查锁 volatile枚举单例最安全10枚举类不可继承、构造器私有、values () 返回所有常量类型安全11代码块执行顺序父静态→子静态→父实例→父构造→子实例→子构造12内部类成员内部类依赖外部实例静态内部类不依赖匿名内部类简化一次性实现13Lambda 表达式函数式接口为前提简化匿名内部类支持参数类型省略、大括号省略14方法引用Lambda 简化版分静态 / 实例 / 特定类型 / 构造器引用仅调用已有方法时使用15OOP 综合设计体现封装 / 多态 / 接口新增功能无需修改原有代码开闭原则四、总结函数式编程核心Lambda 基于函数式接口方法引用是 Lambda 的简化让代码更简洁常用 API 核心String 不可变、常量池优化ArrayList 动态扩容开发中优先使用综合案例核心接口定义规范、ArrayList 存储数据、Swing 搭建界面体现 OOP 封装 / 多态 / 开闭原则面试核心重点掌握方法重写、多态、抽象类 vs 接口、单例模式、Lambda 表达式理解底层逻辑而非死记。