JAVA基础

JAVA1个月前更新 D-Mr
56 0

文章目录

  • deepseek模型
  • JAVA
  • PHP
  • 个人数据信息泄露自检测
  • 挖币
  • 显卡
  • 短剧
  • 站长收藏
  • 谷歌插件
  • 账户购买
  • 1.BigDecimal 精度运算

    import java.math.BigDecimal;
    import java.math.RoundingMode;
    public class BigDecimalDemo {
    public static void main(String[] args) {
    // ================== 初始化(必须用字符串避免精度丢失)[6,7](@ref) ==================
    BigDecimal num1 = new BigDecimal("10.5");
    BigDecimal num2 = new BigDecimal("3.2");
    BigDecimal dividend = new BigDecimal("10");
    BigDecimal divisor = new BigDecimal("3");
    // ================== 基础算术运算 ==================
    // 加法 [3,5](@ref)
    BigDecimal sum = num1.add(num2);
    System.out.println("加法结果: " + sum); // 13.7
    // 减法 [3,5](@ref)
    BigDecimal difference = num1.subtract(num2);
    System.out.println("减法结果: " + difference); // 7.3
    // 乘法 [3,5](@ref)
    BigDecimal product = num1.multiply(num2);
    System.out.println("乘法结果: " + product); // 33.60
    // 除法(必须指定舍入模式)[1,5](@ref)
    BigDecimal quotient = num1.divide(num2, 2, RoundingMode.HALF_UP);
    System.out.println("除法结果: " + quotient); // 3.28
    // ================== 数学函数运算 ==================
    // 绝对值 [4](@ref)
    BigDecimal absValue = num1.abs();
    System.out.println("绝对值: " + absValue); // 10.5
    // 取反 [4](@ref)
    BigDecimal negated = num1.negate();
    System.out.println("取反结果: " + negated); // -10.5
    // 幂运算(JDK 9+)[1](@ref)
    BigDecimal power = num1.pow(2);
    System.out.println("平方: " + power); // 110.25
    // ================== 精度控制与标度操作 ==================
    // 设置标度(保留2位小数,四舍五入)[1,7](@ref)
    BigDecimal scaled = new BigDecimal("123.4567").setScale(2, RoundingMode.HALF_UP);
    System.out.println("四舍五入后: " + scaled); // 123.46
    // 去除尾部零 [1](@ref)
    BigDecimal stripped = new BigDecimal("123.45000").stripTrailingZeros();
    System.out.println("去除尾部零: " + stripped); // 123.45
    // 缩放十次幂 [1](@ref)
    BigDecimal scaledByTen = new BigDecimal("123.456789").scaleByPowerOfTen(3);
    System.out.println("缩放十次幂: " + scaledByTen); // 123456.789
    // ================== 比较与转换 ==================
    // 比较大小(忽略标度)[4,7](@ref)
    int comparison = num1.compareTo(new BigDecimal("10.50"));
    System.out.println("比较结果: " + comparison); // 0(数值相等)
    // 转换为基本类型(可能丢失精度)[4](@ref)
    double d = num1.doubleValue(); // 10.5
    int i = num1.intValue(); // 10(直接截断)
    System.out.println("转换为 double: " + d + ", int: " + i);
    // 精确转换(超出范围抛异常)[1](@ref)
    try {
    long lExact = num1.longValueExact(); // 10
    System.out.println("精确转换 long: " + lExact);
    } catch (ArithmeticException e) {
    System.out.println("转换异常: " + e.getMessage());
    }
    // ================== 特殊运算 ==================
    // 余数运算 [1](@ref)
    BigDecimal remainder = dividend.remainder(divisor);
    System.out.println("余数: " + remainder); // 1
    // 求商和余数数组 [1](@ref)
    BigDecimal[] divideAndRemainder = dividend.divideAndRemainder(divisor);
    System.out.println("商: " + divideAndRemainder[0] + ", 余数: " + divideAndRemainder[1]); // 3, 1
    // 最大值/最小值 [1](@ref)
    BigDecimal max = num1.max(num2);
    BigDecimal min = num1.min(num2);
    System.out.println("最大值: " + max + ", 最小值: " + min); // 10.5, 3.2
    // ================== 小数点移动 ==================
    // 左移2位 [1](@ref)
    BigDecimal movedLeft = num1.movePointLeft(2);
    System.out.println("小数点左移两位: " + movedLeft); // 0.105
    // 右移1位 [1](@ref)
    BigDecimal movedRight = num1.movePointRight(1);
    System.out.println("小数点右移一位: " + movedRight); // 105.0
    }
    }
    import java.math.BigDecimal; import java.math.RoundingMode; public class BigDecimalDemo { public static void main(String[] args) { // ================== 初始化(必须用字符串避免精度丢失)[6,7](@ref) ================== BigDecimal num1 = new BigDecimal("10.5"); BigDecimal num2 = new BigDecimal("3.2"); BigDecimal dividend = new BigDecimal("10"); BigDecimal divisor = new BigDecimal("3"); // ================== 基础算术运算 ================== // 加法 [3,5](@ref) BigDecimal sum = num1.add(num2); System.out.println("加法结果: " + sum); // 13.7 // 减法 [3,5](@ref) BigDecimal difference = num1.subtract(num2); System.out.println("减法结果: " + difference); // 7.3 // 乘法 [3,5](@ref) BigDecimal product = num1.multiply(num2); System.out.println("乘法结果: " + product); // 33.60 // 除法(必须指定舍入模式)[1,5](@ref) BigDecimal quotient = num1.divide(num2, 2, RoundingMode.HALF_UP); System.out.println("除法结果: " + quotient); // 3.28 // ================== 数学函数运算 ================== // 绝对值 [4](@ref) BigDecimal absValue = num1.abs(); System.out.println("绝对值: " + absValue); // 10.5 // 取反 [4](@ref) BigDecimal negated = num1.negate(); System.out.println("取反结果: " + negated); // -10.5 // 幂运算(JDK 9+)[1](@ref) BigDecimal power = num1.pow(2); System.out.println("平方: " + power); // 110.25 // ================== 精度控制与标度操作 ================== // 设置标度(保留2位小数,四舍五入)[1,7](@ref) BigDecimal scaled = new BigDecimal("123.4567").setScale(2, RoundingMode.HALF_UP); System.out.println("四舍五入后: " + scaled); // 123.46 // 去除尾部零 [1](@ref) BigDecimal stripped = new BigDecimal("123.45000").stripTrailingZeros(); System.out.println("去除尾部零: " + stripped); // 123.45 // 缩放十次幂 [1](@ref) BigDecimal scaledByTen = new BigDecimal("123.456789").scaleByPowerOfTen(3); System.out.println("缩放十次幂: " + scaledByTen); // 123456.789 // ================== 比较与转换 ================== // 比较大小(忽略标度)[4,7](@ref) int comparison = num1.compareTo(new BigDecimal("10.50")); System.out.println("比较结果: " + comparison); // 0(数值相等) // 转换为基本类型(可能丢失精度)[4](@ref) double d = num1.doubleValue(); // 10.5 int i = num1.intValue(); // 10(直接截断) System.out.println("转换为 double: " + d + ", int: " + i); // 精确转换(超出范围抛异常)[1](@ref) try { long lExact = num1.longValueExact(); // 10 System.out.println("精确转换 long: " + lExact); } catch (ArithmeticException e) { System.out.println("转换异常: " + e.getMessage()); } // ================== 特殊运算 ================== // 余数运算 [1](@ref) BigDecimal remainder = dividend.remainder(divisor); System.out.println("余数: " + remainder); // 1 // 求商和余数数组 [1](@ref) BigDecimal[] divideAndRemainder = dividend.divideAndRemainder(divisor); System.out.println("商: " + divideAndRemainder[0] + ", 余数: " + divideAndRemainder[1]); // 3, 1 // 最大值/最小值 [1](@ref) BigDecimal max = num1.max(num2); BigDecimal min = num1.min(num2); System.out.println("最大值: " + max + ", 最小值: " + min); // 10.5, 3.2 // ================== 小数点移动 ================== // 左移2位 [1](@ref) BigDecimal movedLeft = num1.movePointLeft(2); System.out.println("小数点左移两位: " + movedLeft); // 0.105 // 右移1位 [1](@ref) BigDecimal movedRight = num1.movePointRight(1); System.out.println("小数点右移一位: " + movedRight); // 105.0 } }


    2.类与对象

    // 类定义:描述对象的行为和状态
    class Dog {
    // 实例变量(对象状态)
    String name;
    String color;
    // 方法(对象行为)
    void bark() {
    System.out.println(name + "在汪汪叫");
    }
    }
    public class TestDog {
    public static void main(String[] args) {
    // 创建对象实例
    Dog myDog = new Dog();
    myDog.name = "阿黄";
    myDog.color = "黄色";
    myDog.bark(); // 输出:阿黄在汪汪叫
    }
    }
    // 类定义:描述对象的行为和状态 class Dog { // 实例变量(对象状态) String name; String color; // 方法(对象行为) void bark() { System.out.println(name + "在汪汪叫"); } } public class TestDog { public static void main(String[] args) { // 创建对象实例 Dog myDog = new Dog(); myDog.name = "阿黄"; myDog.color = "黄色"; myDog.bark(); // 输出:阿黄在汪汪叫 } }

    3.变量类型

    public class VariablesDemo {
    // 成员变量(非静态)
    int instanceVar = 10;
    // 类变量(静态)
    static String classVar = "全局变量";
    void method() {
    // 局部变量
    int localVar = 20;
    System.out.println(localVar);
    }
    public static void main(String[] args) {
    System.out.println(classVar); // 直接访问静态变量
    VariablesDemo obj = new VariablesDemo();
    System.out.println(obj.instanceVar);
    obj.method();
    }
    }
    public class VariablesDemo { // 成员变量(非静态) int instanceVar = 10; // 类变量(静态) static String classVar = "全局变量"; void method() { // 局部变量 int localVar = 20; System.out.println(localVar); } public static void main(String[] args) { System.out.println(classVar); // 直接访问静态变量 VariablesDemo obj = new VariablesDemo(); System.out.println(obj.instanceVar); obj.method(); } }

    4.数组

    public class ArrayDemo {
    public static void main(String[] args) {
    // 数组声明与初始化
    int[] numbers = {1, 2, 3};
    String[] names = new String[3];
    names[0] = "张三";
    // 多维数组
    int[][] matrix = {{1,2}, {3,4}};
    System.out.println(matrix[1][0]); // 输出3
    }
    }
    public class ArrayDemo { public static void main(String[] args) { // 数组声明与初始化 int[] numbers = {1, 2, 3}; String[] names = new String[3]; names[0] = "张三"; // 多维数组 int[][] matrix = {{1,2}, {3,4}}; System.out.println(matrix[1][0]); // 输出3 } }

    5.枚举

    // 单独声明枚举类型
    enum FreshJuiceSize { SMALL, MEDIUM, LARGE }
    class FreshJuice {
    FreshJuiceSize size;
    }
    public class EnumTest {
    public static void main(String[] args) {
    FreshJuice juice = new FreshJuice();
    juice.size = FreshJuiceSize.MEDIUM;
    System.out.println(juice.size); // 输出MEDIUM
    }
    }
    // 单独声明枚举类型 enum FreshJuiceSize { SMALL, MEDIUM, LARGE } class FreshJuice { FreshJuiceSize size; } public class EnumTest { public static void main(String[] args) { FreshJuice juice = new FreshJuice(); juice.size = FreshJuiceSize.MEDIUM; System.out.println(juice.size); // 输出MEDIUM } }

    6.继承

    // 父类
    class Animal {
    void eat() {
    System.out.println("动物进食");
    }
    }
    // 子类继承
    class Cat extends Animal {
    @Override
    void eat() {
    System.out.println("猫吃鱼");
    }
    }
    public class InheritanceDemo {
    public static void main(String[] args) {
    Cat myCat = new Cat();
    myCat.eat(); // 输出:猫吃鱼
    }
    }
    // 父类 class Animal { void eat() { System.out.println("动物进食"); } } // 子类继承 class Cat extends Animal { @Override void eat() { System.out.println("猫吃鱼"); } } public class InheritanceDemo { public static void main(String[] args) { Cat myCat = new Cat(); myCat.eat(); // 输出:猫吃鱼 } }

    7.接口

    // 接口定义
    interface Communication {
    void call();
    }
    // 类实现接口
    class Phone implements Communication {
    @Override
    public void call() {
    System.out.println("拨打电话中...");
    }
    }
    public class InterfaceDemo {
    public static void main(String[] args) {
    Phone myPhone = new Phone();
    myPhone.call();
    }
    }
    // 接口定义 interface Communication { void call(); } // 类实现接口 class Phone implements Communication { @Override public void call() { System.out.println("拨打电话中..."); } } public class InterfaceDemo { public static void main(String[] args) { Phone myPhone = new Phone(); myPhone.call(); } }

    8.修饰符与访问控制

    public class ModifierDemo {
    // 私有变量(仅本类可访问)
    private int privateVar = 1;
    // 公开方法
    public void publicMethod() {
    System.out.println("公开方法");
    }
    // 静态方法
    static void staticMethod() {
    System.out.println("类方法");
    }
    }
    public class ModifierDemo { // 私有变量(仅本类可访问) private int privateVar = 1; // 公开方法 public void publicMethod() { System.out.println("公开方法"); } // 静态方法 static void staticMethod() { System.out.println("类方法"); } }

    9.关键字

    /*
    ██████╗ █████╗ ██╗ ██╗ █████╗ ██╗ ██╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗
    ██╔════╝ ██╔══██╗ ██║ ██║██╔══██╗ ██║ ██║██╔═══██╗██║ ██║██╔════╝██╔═══██╗██╔══██╗██╔════╝
    ██║ ███████║ ██║ █╗ ██║███████║ ███████║██║ ██║██║ █╗ ██║██║ ██║ ██║██║ ██║█████╗
    ██║ ██╔══██║ ██║███╗██║██╔══██║ ██╔══██║██║ ██║██║███╗██║██║ ██║ ██║██║ ██║██╔══╝
    ╚██████╗ ██║ ██║ ╚███╔███╔╝██║ ██║ ██║ ██║╚██████╔╝╚███╔███╔╝╚██████╗╚██████╔╝██████╔╝███████╗
    ╚═════╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
    */
    // 访问控制修饰符示例
    class AccessModifiers {
    private int privateVar; // 仅本类可见
    protected void protectMethod() {} // 同包或子类可见
    public String publicField; // 全局可见
    /* default */ int packageVar; // 包级可见(默认修饰符,不需要显式声明) */
    }
    // 类/方法/变量修饰符示例
    abstract class Animal { // 抽象类
    final int LEGS = 4; // 不可修改的常量
    static String TYPE = "哺乳动物"; // 类变量
    abstract void sound(); // 抽象方法
    }
    class Dog extends Animal implements Runnable { // 继承+接口实现
    volatile boolean status; // 易失变量
    transient String tempData; // 不序列化的字段
    @Override
    synchronized void sound() { // 同步方法
    System.out.println("汪汪");
    }
    strictfp double calculate() { // 严格浮点计算
    return 0.1 + 0.2;
    }
    }
    // 程序控制语句示例
    class ControlFlow {
    void demo() {
    for (int i=0; i<5; i++) {
    if (i == 3) continue; // 跳过当前循环
    switch (i) {
    case 1:
    System.out.println("一");
    break;
    default:
    System.out.println("其他");
    }
    }
    do { // do-while循环
    System.out.println("执行");
    } while (false);
    while(true) { // 无限循环
    return; // 方法返回
    }
    }
    }
    // 错误处理示例
    class ExceptionDemo {
    void test() throws Exception { // 声明可能抛出异常
    try {
    if (1 > 0) throw new Exception("异常示例");
    } catch (Exception e) {
    System.out.println(e.getMessage());
    } finally {
    System.out.println("最终执行");
    }
    }
    }
    // 包与类型示例
    package com.example; // 包声明
    import java.util.List; // 导入包
    class PrimitiveTypes {
    boolean flag = true; // 布尔型
    byte smallNum = 127; // 字节型
    char ch = 'A'; // 字符型
    double price = 9.99; // 双精度
    float ratio = 3.14f; // 单精度
    int count = 100; // 整型
    long bigNum = 100000L; // 长整型
    short age = 30; // 短整型
    }
    class ReferenceDemo {
    void method() {
    this.toString(); // 当前对象引用
    super.hashCode(); // 父类方法调用
    }
    void emptyReturn() { // 无返回值方法
    System.out.println("void示例");
    }
    }
    /*
    ██████╗ ███████╗██████╗ ███████╗██████╗ ██████╗
    ██╔════╝ ██╔════╝██╔══██╗██╔════╝██╔══██╗██╔═══██╗
    ██║ ███╗█████╗ ██████╔╝█████╗ ██║ ██║██║ ██║
    ██║ ██║██╔══╝ ██╔══██╗██╔══╝ ██║ ██║██║ ██║
    ╚██████╔╝██║ ██║ ██║███████╗██████╔╝╚██████╔╝
    ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═════╝ ╚═════╝
    */
    // 注意:以下为保留关键字,不能实际使用
    // goto // 跳转语句(未实现)
    // const // 常量声明(未实现)
    代码结构说明:
    ​​访问控制​​:展示了private/protected/public/default四种访问权限
    ​​类修饰符​​:包含abstract/final/static等核心修饰符
    ​​方法控制​​:演示synchronized/strictfp/transient等特殊修饰符
    ​​流程控制​​:覆盖所有控制语句关键字的使用场景
    ​​异常处理​​:完整try-catch-finally-throw-throws工作流
    ​​类型系统​​:包含8种基本类型+void的声明方式
    ​​特殊引用​​:this/super的实际应用场景
    ​​保留关键字​​:展示未启用的goto/const(注释状态)
    /* ██████╗ █████╗ ██╗ ██╗ █████╗ ██╗ ██╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗ ██╔════╝ ██╔══██╗ ██║ ██║██╔══██╗ ██║ ██║██╔═══██╗██║ ██║██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██║ ███████║ ██║ █╗ ██║███████║ ███████║██║ ██║██║ █╗ ██║██║ ██║ ██║██║ ██║█████╗ ██║ ██╔══██║ ██║███╗██║██╔══██║ ██╔══██║██║ ██║██║███╗██║██║ ██║ ██║██║ ██║██╔══╝ ╚██████╗ ██║ ██║ ╚███╔███╔╝██║ ██║ ██║ ██║╚██████╔╝╚███╔███╔╝╚██████╗╚██████╔╝██████╔╝███████╗ ╚═════╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ */ // 访问控制修饰符示例 class AccessModifiers { private int privateVar; // 仅本类可见 protected void protectMethod() {} // 同包或子类可见 public String publicField; // 全局可见 /* default */ int packageVar; // 包级可见(默认修饰符,不需要显式声明) */ } // 类/方法/变量修饰符示例 abstract class Animal { // 抽象类 final int LEGS = 4; // 不可修改的常量 static String TYPE = "哺乳动物"; // 类变量 abstract void sound(); // 抽象方法 } class Dog extends Animal implements Runnable { // 继承+接口实现 volatile boolean status; // 易失变量 transient String tempData; // 不序列化的字段 @Override synchronized void sound() { // 同步方法 System.out.println("汪汪"); } strictfp double calculate() { // 严格浮点计算 return 0.1 + 0.2; } } // 程序控制语句示例 class ControlFlow { void demo() { for (int i=0; i<5; i++) { if (i == 3) continue; // 跳过当前循环 switch (i) { case 1: System.out.println("一"); break; default: System.out.println("其他"); } } do { // do-while循环 System.out.println("执行"); } while (false); while(true) { // 无限循环 return; // 方法返回 } } } // 错误处理示例 class ExceptionDemo { void test() throws Exception { // 声明可能抛出异常 try { if (1 > 0) throw new Exception("异常示例"); } catch (Exception e) { System.out.println(e.getMessage()); } finally { System.out.println("最终执行"); } } } // 包与类型示例 package com.example; // 包声明 import java.util.List; // 导入包 class PrimitiveTypes { boolean flag = true; // 布尔型 byte smallNum = 127; // 字节型 char ch = 'A'; // 字符型 double price = 9.99; // 双精度 float ratio = 3.14f; // 单精度 int count = 100; // 整型 long bigNum = 100000L; // 长整型 short age = 30; // 短整型 } class ReferenceDemo { void method() { this.toString(); // 当前对象引用 super.hashCode(); // 父类方法调用 } void emptyReturn() { // 无返回值方法 System.out.println("void示例"); } } /* ██████╗ ███████╗██████╗ ███████╗██████╗ ██████╗ ██╔════╝ ██╔════╝██╔══██╗██╔════╝██╔══██╗██╔═══██╗ ██║ ███╗█████╗ ██████╔╝█████╗ ██║ ██║██║ ██║ ██║ ██║██╔══╝ ██╔══██╗██╔══╝ ██║ ██║██║ ██║ ╚██████╔╝██║ ██║ ██║███████╗██████╔╝╚██████╔╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═════╝ ╚═════╝ */ // 注意:以下为保留关键字,不能实际使用 // goto // 跳转语句(未实现) // const // 常量声明(未实现) 代码结构说明: ​​访问控制​​:展示了private/protected/public/default四种访问权限 ​​类修饰符​​:包含abstract/final/static等核心修饰符 ​​方法控制​​:演示synchronized/strictfp/transient等特殊修饰符 ​​流程控制​​:覆盖所有控制语句关键字的使用场景 ​​异常处理​​:完整try-catch-finally-throw-throws工作流 ​​类型系统​​:包含8种基本类型+void的声明方式 ​​特殊引用​​:this/super的实际应用场景 ​​保留关键字​​:展示未启用的goto/const(注释状态)

    10.类与对象定义​

    // 文件名:Dog.java
    public class Dog {
    // 成员变量(属性)
    private String breed;
    private String color;
    private int age;
    // 类变量(静态变量)
    private static int dogCount = 0;
    // 构造方法
    public Dog(String breed, String color, int age) {
    this.breed = breed;
    this.color = color;
    this.age = age;
    dogCount++;
    }
    // 成员方法(行为)
    public void bark() {
    System.out.println("Woof! Woof!");
    }
    // 访问器方法(Getter/Setter)
    public String getBreed() { return breed; }
    public void setBreed(String breed) { this.breed = breed; }
    public static int getDogCount() { return dogCount; }
    // 重写 toString 方法
    @Override
    public String toString() {
    return "品种: " + breed + ", 颜色: " + color + ", 年龄: " + age;
    }
    }
    // 文件名:Dog.java public class Dog { // 成员变量(属性) private String breed; private String color; private int age; // 类变量(静态变量) private static int dogCount = 0; // 构造方法 public Dog(String breed, String color, int age) { this.breed = breed; this.color = color; this.age = age; dogCount++; } // 成员方法(行为) public void bark() { System.out.println("Woof! Woof!"); } // 访问器方法(Getter/Setter) public String getBreed() { return breed; } public void setBreed(String breed) { this.breed = breed; } public static int getDogCount() { return dogCount; } // 重写 toString 方法 @Override public String toString() { return "品种: " + breed + ", 颜色: " + color + ", 年龄: " + age; } }

    11.继承与多态​

    // 抽象类示例
    abstract class Animal {
    private String name;
    public Animal(String name) {
    this.name = name;
    }
    public abstract void makeSound(); // 抽象方法
    public String getName() { return name; }
    }
    // 子类继承抽象类
    class Cat extends Animal {
    public Cat(String name) {
    super(name);
    }
    @Override
    public void makeSound() { // 方法重写
    System.out.println("Meow!");
    }
    }
    // 抽象类示例 abstract class Animal { private String name; public Animal(String name) { this.name = name; } public abstract void makeSound(); // 抽象方法 public String getName() { return name; } } // 子类继承抽象类 class Cat extends Animal { public Cat(String name) { super(name); } @Override public void makeSound() { // 方法重写 System.out.println("Meow!"); } }

    12.接口与多继承​

    // 定义接口
    interface Eatable {
    void eat();
    }
    // 实现接口的类
    class Puppy extends Dog implements Eatable {
    public Puppy(String breed, String color, int age) {
    super(breed, color, age);
    }
    @Override
    public void eat() { // 实现接口方法
    System.out.println("Puppy is eating...");
    }
    // 方法重载(同名方法,参数不同)
    public void play(String toy) {
    System.out.println("Playing with " + toy);
    }
    public void play(int hours) {
    System.out.println("Playing for " + hours + " hours");
    }
    }
    // 定义接口 interface Eatable { void eat(); } // 实现接口的类 class Puppy extends Dog implements Eatable { public Puppy(String breed, String color, int age) { super(breed, color, age); } @Override public void eat() { // 实现接口方法 System.out.println("Puppy is eating..."); } // 方法重载(同名方法,参数不同) public void play(String toy) { System.out.println("Playing with " + toy); } public void play(int hours) { System.out.println("Playing for " + hours + " hours"); } }

    13.封装与测试类​

    // 文件名:Main.java
    public class Main {
    public static void main(String[] args) {
    // 创建对象
    Dog myDog = new Dog("Golden Retriever", "Golden", 3);
    System.out.println(myDog); // 调用 toString()
    myDog.bark();
    // 测试继承与多态
    Animal cat = new Cat("Tom");
    cat.makeSound(); // 输出: Meow!
    // 测试接口与多态
    Puppy puppy = new Puppy("Husky", "Gray", 1);
    puppy.eat(); // 输出: Puppy is eating...
    puppy.play("Ball"); // 方法重载示例
    puppy.play(2);
    // 访问静态变量
    System.out.println("已创建的小狗数量: " + Dog.getDogCount());
    }
    }
    // 文件名:Main.java public class Main { public static void main(String[] args) { // 创建对象 Dog myDog = new Dog("Golden Retriever", "Golden", 3); System.out.println(myDog); // 调用 toString() myDog.bark(); // 测试继承与多态 Animal cat = new Cat("Tom"); cat.makeSound(); // 输出: Meow! // 测试接口与多态 Puppy puppy = new Puppy("Husky", "Gray", 1); puppy.eat(); // 输出: Puppy is eating... puppy.play("Ball"); // 方法重载示例 puppy.play(2); // 访问静态变量 System.out.println("已创建的小狗数量: " + Dog.getDogCount()); } }

    14.Java 基本数据类型

    import java.util.Optional;
    /​**​
    * 本类展示 Java 基本数据类型及其相关特性,并包含 JDK 各版本的新特性示例
    */
    public class JavaDataTypesDemo {
    public static void main(String[] args) {
    // ============== 基础数据类型的定义与默认值(JDK 1.0+) ==============
    // 整数类型
    byte byteVal = 100; // 8位,-128~127
    short shortVal = 1000; // 16位,-32768~32767
    int intVal = 100000; // 32位(默认整数类型)
    long longVal = 100000L; // 64位,需加L后缀
    // 浮点类型
    float floatVal = 3.14f; // 32位,需加f后缀
    double doubleVal = 3.14; // 64位(默认浮点类型)
    // 布尔与字符
    boolean boolVal = true; // 1位,true/false
    char charVal = 'A'; // 16位,Unicode字符
    // ============== JDK 5 新特性:自动装箱/拆箱 ==============
    // 基本类型与包装类自动转换
    Integer autoBoxing = intVal; // 自动装箱(int -> Integer)
    int autoUnboxing = autoBoxing; // 自动拆箱(Integer -> int)
    // ============== JDK 7 新特性:二进制字面量 & 下划线分隔符 ==============
    int binaryLiteral = 0b1010; // 二进制前缀 0b
    long underscored = 1_000_000L; // 数字可加下划线增强可读性
    // ============== JDK 8 新特性:Optional 处理空引用 ==============
    Optional<String> optional = Optional.ofNullable(null);
    optional.ifPresentOrElse(
    str -> System.out.println(str),
    () -> System.out.println("值为空")
    );
    // ============== JDK 10 新特性:局部变量类型推断 (var) ==============
    var inferredInt = 100; // 编译器推断为 int 类型
    var inferredList = List.of(1, 2, 3); // 推断为 List<Integer>
    // ============== JDK 14 新特性:Record 类(简化不可变数据类) ==============
    record Point(int x, int y) {} // 自动生成构造器/getter/equals等方法
    Point p = new Point(10, 20);
    System.out.println(p.x() + ", " + p.y());
    =======================char 转Unicode 数字,表情,文字 ==============
    https://apps.timwhitlock.info/emoji/tables/unicode#
    https://www.emojiall.com/zh-hans
    char c = '并';
    System.out.println((int) c); // 输出 20013
    String emoji = new String(new int[]{128512}, 0, 1);
    System.out.println(emoji); // 输出 😊
    int[] codePoints = {0x1F1F7,0x1F601};
    String complexEmoji = new String(codePoints, 0, 2);
    System.out.println(complexEmoji); // 输出 👩🚀
    int[] codes = {119, 111, 114, 108, 100}; // "world" 的码点
    StringBuilder word = new StringBuilder();
    for (int code : codes) {
    word.append((char) code); // 将码点转为字符并拼接
    }
    System.out.println(word.toString()); // 输出 world
    // ============== 类型转换示例 ==============
    // 强制转换(可能丢失精度)
    double d = 100.5;
    int i = (int) d; // 结果为 100(截断小数)
    // ============== 其他重要特性 ==============
    // JDK 15 文本块(多行字符串)
    String json = """
    {
    "name": "Java",
    "version": 17
    }
    """;
    // JDK 16 模式匹配 instanceof
    Object obj = "Pattern Matching";
    if (obj instanceof String s) { // 直接绑定变量 s
    System.out.println(s.length());
    }
    }
    // ============== JDK 9 新特性:私有接口方法 ==============
    interface AdvancedMath {
    private static void log(String message) {
    System.out.println("Log: " + message);
    }
    default void calculate() {
    log("计算开始");
    // 实现逻辑...
    }
    }
    }
    import java.util.Optional; /​**​ * 本类展示 Java 基本数据类型及其相关特性,并包含 JDK 各版本的新特性示例 */ public class JavaDataTypesDemo { public static void main(String[] args) { // ============== 基础数据类型的定义与默认值(JDK 1.0+) ============== // 整数类型 byte byteVal = 100; // 8位,-128~127 short shortVal = 1000; // 16位,-32768~32767 int intVal = 100000; // 32位(默认整数类型) long longVal = 100000L; // 64位,需加L后缀 // 浮点类型 float floatVal = 3.14f; // 32位,需加f后缀 double doubleVal = 3.14; // 64位(默认浮点类型) // 布尔与字符 boolean boolVal = true; // 1位,true/false char charVal = 'A'; // 16位,Unicode字符 // ============== JDK 5 新特性:自动装箱/拆箱 ============== // 基本类型与包装类自动转换 Integer autoBoxing = intVal; // 自动装箱(int -> Integer) int autoUnboxing = autoBoxing; // 自动拆箱(Integer -> int) // ============== JDK 7 新特性:二进制字面量 & 下划线分隔符 ============== int binaryLiteral = 0b1010; // 二进制前缀 0b long underscored = 1_000_000L; // 数字可加下划线增强可读性 // ============== JDK 8 新特性:Optional 处理空引用 ============== Optional<String> optional = Optional.ofNullable(null); optional.ifPresentOrElse( str -> System.out.println(str), () -> System.out.println("值为空") ); // ============== JDK 10 新特性:局部变量类型推断 (var) ============== var inferredInt = 100; // 编译器推断为 int 类型 var inferredList = List.of(1, 2, 3); // 推断为 List<Integer> // ============== JDK 14 新特性:Record 类(简化不可变数据类) ============== record Point(int x, int y) {} // 自动生成构造器/getter/equals等方法 Point p = new Point(10, 20); System.out.println(p.x() + ", " + p.y()); =======================char 转Unicode 数字,表情,文字 ============== https://apps.timwhitlock.info/emoji/tables/unicode# https://www.emojiall.com/zh-hans char c = '并'; System.out.println((int) c); // 输出 20013 String emoji = new String(new int[]{128512}, 0, 1); System.out.println(emoji); // 输出 😊 int[] codePoints = {0x1F1F7,0x1F601}; String complexEmoji = new String(codePoints, 0, 2); System.out.println(complexEmoji); // 输出 👩🚀 int[] codes = {119, 111, 114, 108, 100}; // "world" 的码点 StringBuilder word = new StringBuilder(); for (int code : codes) { word.append((char) code); // 将码点转为字符并拼接 } System.out.println(word.toString()); // 输出 world // ============== 类型转换示例 ============== // 强制转换(可能丢失精度) double d = 100.5; int i = (int) d; // 结果为 100(截断小数) // ============== 其他重要特性 ============== // JDK 15 文本块(多行字符串) String json = """ { "name": "Java", "version": 17 } """; // JDK 16 模式匹配 instanceof Object obj = "Pattern Matching"; if (obj instanceof String s) { // 直接绑定变量 s System.out.println(s.length()); } } // ============== JDK 9 新特性:私有接口方法 ============== interface AdvancedMath { private static void log(String message) { System.out.println("Log: " + message); } default void calculate() { log("计算开始"); // 实现逻辑... } } }

    15.变量命名规则

    // 类名:驼峰命名法,首字母大写
    public class NamingExample {
    // 实例变量:驼峰命名法,首字母小写,通常为 private
    private int studentAge;
    // 静态变量(驼峰命名法):首字母小写
    public static int maxRetries = 3;
    // 静态变量(蛇形命名法):全大写+下划线,常用于常量
    public static final int MAX_CONNECTIONS = 10;
    // 方法参数:驼峰命名法,首字母小写
    public void processData(String inputData) {
    // 局部变量:驼峰命名法,首字母小写
    int temporaryResult = 0;
    // 有意义的命名示例
    double discountPercentage = 0.15;
    // 避免歧义:明确区分开始和结束时间
    long startTime = System.currentTimeMillis();
    long endTime = startTime + 1000;
    // ... 方法逻辑 ...
    }
    // 常量:全大写+下划线,final 修饰
    private static final double TAX_RATE = 0.07;
    // 错误示例(仅用于对比)
    // private int 1stValue; // 错误:数字开头
    // private String class; // 错误:使用关键字
    // public static int maxsize; // 错误:未使用驼峰命名
    }
    public class NamingExample { ... }
    private int studentAge;
    public static int maxRetries = 3;
    public static final int MAX_CONNECTIONS = 10;
    int temporaryResult = 0;
    double discountPercentage = 0.15;
    public void processData(String inputData) { ... }
    private static final double TAX_RATE = 0.07;
    // 类名:驼峰命名法,首字母大写 public class NamingExample { // 实例变量:驼峰命名法,首字母小写,通常为 private private int studentAge; // 静态变量(驼峰命名法):首字母小写 public static int maxRetries = 3; // 静态变量(蛇形命名法):全大写+下划线,常用于常量 public static final int MAX_CONNECTIONS = 10; // 方法参数:驼峰命名法,首字母小写 public void processData(String inputData) { // 局部变量:驼峰命名法,首字母小写 int temporaryResult = 0; // 有意义的命名示例 double discountPercentage = 0.15; // 避免歧义:明确区分开始和结束时间 long startTime = System.currentTimeMillis(); long endTime = startTime + 1000; // ... 方法逻辑 ... } // 常量:全大写+下划线,final 修饰 private static final double TAX_RATE = 0.07; // 错误示例(仅用于对比) // private int 1stValue; // 错误:数字开头 // private String class; // 错误:使用关键字 // public static int maxsize; // 错误:未使用驼峰命名 } public class NamingExample { ... } private int studentAge; public static int maxRetries = 3; public static final int MAX_CONNECTIONS = 10; int temporaryResult = 0; double discountPercentage = 0.15; public void processData(String inputData) { ... } private static final double TAX_RATE = 0.07;

    16.修饰符

    // 文件名:ModifiersExample.java
    // public类(访问修饰符)
    public class ModifiersExample {
    // 访问修饰符示例
    public int publicVar = 1; // 公有变量
    private int privateVar = 2; // 私有变量
    protected int protectedVar = 3; // 受保护变量
    int defaultVar = 4; // 默认访问变量
    // static修饰符
    public static int staticVar = 5; // 类变量
    private static int instanceCount = 0; // 静态私有计数器
    // final修饰符
    public static final double PI = 3.1415; // 常量
    // volatile修饰符(多线程可见性)
    private volatile boolean active = true;
    // synchronized方法(线程安全)
    public synchronized void increment() {
    instanceCount++;
    }
    // 构造方法
    public ModifiersExample() {
    instanceCount++;
    }
    // private方法
    private void privateMethod() {
    System.out.println("私有方法被调用");
    }
    // protected方法
    protected void protectedMethod() {
    System.out.println("受保护的方法被调用");
    }
    // 默认访问方法
    void defaultMethod() {
    System.out.println("默认访问方法被调用");
    }
    // 公有方法访问私有变量(封装性)
    public int getPrivateVar() {
    return privateVar;
    }
    // 内部抽象类(abstract修饰符)
    public abstract static class AbstractExample {
    public abstract void abstractMethod(); // 抽象方法
    }
    // 内部具体类继承抽象类
    public static class ConcreteExample extends AbstractExample {
    @Override
    public void abstractMethod() {
    System.out.println("抽象方法实现");
    }
    }
    // transient变量(不参与序列化)
    private transient String transientData = "临时数据";
    public static void main(String[] args) {
    // 实例化主类
    ModifiersExample example = new ModifiersExample();
    // 访问不同修饰符的变量
    example.publicVar = 10; // 直接访问公有变量
    System.out.println("publicVar: " + example.publicVar);
    // 访问私有变量需通过公共方法
    System.out.println("privateVar via getter: " + example.getPrivateVar());
    // 调用不同访问权限的方法
    example.protectedMethod();
    example.defaultMethod();
    // 访问静态变量
    System.out.println("staticVar: " + ModifiersExample.staticVar);
    // 访问final常量
    System.out.println("PI: " + ModifiersExample.PI);
    // 调用synchronized方法
    example.increment();
    System.out.println("instanceCount: " + instanceCount);
    // 实例化内部类
    ConcreteExample concrete = new ConcreteExample();
    concrete.abstractMethod();
    // volatile变量操作
    example.active = false;
    System.out.println("active状态已更新: " + example.active);
    }
    }
    // 文件名:ModifiersExample.java // public类(访问修饰符) public class ModifiersExample { // 访问修饰符示例 public int publicVar = 1; // 公有变量 private int privateVar = 2; // 私有变量 protected int protectedVar = 3; // 受保护变量 int defaultVar = 4; // 默认访问变量 // static修饰符 public static int staticVar = 5; // 类变量 private static int instanceCount = 0; // 静态私有计数器 // final修饰符 public static final double PI = 3.1415; // 常量 // volatile修饰符(多线程可见性) private volatile boolean active = true; // synchronized方法(线程安全) public synchronized void increment() { instanceCount++; } // 构造方法 public ModifiersExample() { instanceCount++; } // private方法 private void privateMethod() { System.out.println("私有方法被调用"); } // protected方法 protected void protectedMethod() { System.out.println("受保护的方法被调用"); } // 默认访问方法 void defaultMethod() { System.out.println("默认访问方法被调用"); } // 公有方法访问私有变量(封装性) public int getPrivateVar() { return privateVar; } // 内部抽象类(abstract修饰符) public abstract static class AbstractExample { public abstract void abstractMethod(); // 抽象方法 } // 内部具体类继承抽象类 public static class ConcreteExample extends AbstractExample { @Override public void abstractMethod() { System.out.println("抽象方法实现"); } } // transient变量(不参与序列化) private transient String transientData = "临时数据"; public static void main(String[] args) { // 实例化主类 ModifiersExample example = new ModifiersExample(); // 访问不同修饰符的变量 example.publicVar = 10; // 直接访问公有变量 System.out.println("publicVar: " + example.publicVar); // 访问私有变量需通过公共方法 System.out.println("privateVar via getter: " + example.getPrivateVar()); // 调用不同访问权限的方法 example.protectedMethod(); example.defaultMethod(); // 访问静态变量 System.out.println("staticVar: " + ModifiersExample.staticVar); // 访问final常量 System.out.println("PI: " + ModifiersExample.PI); // 调用synchronized方法 example.increment(); System.out.println("instanceCount: " + instanceCount); // 实例化内部类 ConcreteExample concrete = new ConcreteExample(); concrete.abstractMethod(); // volatile变量操作 example.active = false; System.out.println("active状态已更新: " + example.active); } }

    17.运算符

    /​**​
    * JavaOperatorsExample 类演示了 Java 中各种运算符的使用方法。
    * 包括:算术、关系、位运算、逻辑、赋值、条件运算符等。
    */
    public class JavaOperatorsExample {
    public static void main(String[] args) {
    // --------------------- 1. 算术运算符示例 ---------------------
    int a = 10;
    int b = 20;
    int c = 25;
    int d = 25;
    System.out.println("a + b = " + (a + b)); // 30
    System.out.println("a - b = " + (a - b)); // -10
    System.out.println("a * b = " + (a * b)); // 200
    System.out.println("b / a = " + (b / a)); // 2
    System.out.println("b % a = " + (b % a)); // 0
    System.out.println("c % a = " + (c % a)); // 5
    System.out.println("a++ = " + (a++)); // 10(先返回原值再自增)
    System.out.println("a-- = " + (a--)); // 11(先返回当前值再自减)
    System.out.println("d++ = " + (d++)); // 25
    System.out.println("++d = " + (++d)); // 27
    // --------------------- 2. 自增自减运算符示例 ---------------------
    int x = 5;
    int y = 2 * ++x; // 前缀自增:x先+1=6,再参与运算
    int z = 2 * x++; // 后缀自增:x先参与运算,再+1=7
    System.out.println("前缀自增后 x=" + x + ", y=" + y); // x=7, y=12
    System.out.println("后缀自增后 x=" + x + ", z=" + z); // x=7, z=12
    // --------------------- 3. 关系运算符示例 ---------------------
    System.out.println("a == b = " + (a == b)); // false
    System.out.println("a != b = " + (a != b)); // true
    System.out.println("a > b = " + (a > b)); // false
    System.out.println("a < b = " + (a < b)); // true
    // --------------------- 4. 位运算符示例 ---------------------
    int bitA = 60; // 二进制:0011 1100
    int bitB = 13; // 二进制:0000 1101
    System.out.println("bitA & bitB = " + (bitA & bitB)); // 12(0000 1100)
    System.out.println("bitA | bitB = " + (bitA | bitB)); // 61(0011 1101)
    System.out.println("bitA ^ bitB = " + (bitA ^ bitB)); // 49(0011 0001)
    System.out.println("~bitA = " + (~bitA)); // -61(1100 0011补码)
    System.out.println("bitA << 2 = " + (bitA << 2)); // 240(1111 0000)
    System.out.println("bitA >> 2 = " + (bitA >> 2)); // 15(0000 1111)
    // --------------------- 5. 逻辑运算符示例 ---------------------
    boolean boolA = true;
    boolean boolB = false;
    System.out.println("boolA && boolB = " + (boolA && boolB)); // false
    System.out.println("boolA || boolB = " + (boolA || boolB)); // true
    System.out.println("!(boolA && boolB) = " + !(boolA && boolB)); // true
    // 短路逻辑运算符示例
    int num = 5;
    boolean result = (num < 4) && (num++ < 10); // 第一个条件为 false,不会执行第二个条件
    System.out.println("result = " + result + ", num = " + num); // false, num=5
    // --------------------- 6. 赋值运算符示例 ---------------------
    int assignVar = 10;
    assignVar += 5; // 等价于 assignVar = assignVar + 5
    System.out.println("assignVar += 5 → " + assignVar); // 15
    assignVar %= 3; // 等价于 assignVar = assignVar % 3
    System.out.println("assignVar %= 3 → " + assignVar); // 0
    // --------------------- 7. 条件运算符(三元运算符)示例 ---------------------
    int score = 80;
    String grade = (score >= 60) ? "及格" : "不及格";
    System.out.println("成绩结果:" + grade); // 及格
    // --------------------- 8. instanceof 运算符示例 ---------------------
    Vehicle vehicle = new Car();
    System.out.println("vehicle 是 Car 的实例吗?" + (vehicle instanceof Car)); // true
    }
    // 定义内部类用于 instanceof 示例
    static class Vehicle {}
    static class Car extends Vehicle {}
    }
    /​**​ * JavaOperatorsExample 类演示了 Java 中各种运算符的使用方法。 * 包括:算术、关系、位运算、逻辑、赋值、条件运算符等。 */ public class JavaOperatorsExample { public static void main(String[] args) { // --------------------- 1. 算术运算符示例 --------------------- int a = 10; int b = 20; int c = 25; int d = 25; System.out.println("a + b = " + (a + b)); // 30 System.out.println("a - b = " + (a - b)); // -10 System.out.println("a * b = " + (a * b)); // 200 System.out.println("b / a = " + (b / a)); // 2 System.out.println("b % a = " + (b % a)); // 0 System.out.println("c % a = " + (c % a)); // 5 System.out.println("a++ = " + (a++)); // 10(先返回原值再自增) System.out.println("a-- = " + (a--)); // 11(先返回当前值再自减) System.out.println("d++ = " + (d++)); // 25 System.out.println("++d = " + (++d)); // 27 // --------------------- 2. 自增自减运算符示例 --------------------- int x = 5; int y = 2 * ++x; // 前缀自增:x先+1=6,再参与运算 int z = 2 * x++; // 后缀自增:x先参与运算,再+1=7 System.out.println("前缀自增后 x=" + x + ", y=" + y); // x=7, y=12 System.out.println("后缀自增后 x=" + x + ", z=" + z); // x=7, z=12 // --------------------- 3. 关系运算符示例 --------------------- System.out.println("a == b = " + (a == b)); // false System.out.println("a != b = " + (a != b)); // true System.out.println("a > b = " + (a > b)); // false System.out.println("a < b = " + (a < b)); // true // --------------------- 4. 位运算符示例 --------------------- int bitA = 60; // 二进制:0011 1100 int bitB = 13; // 二进制:0000 1101 System.out.println("bitA & bitB = " + (bitA & bitB)); // 12(0000 1100) System.out.println("bitA | bitB = " + (bitA | bitB)); // 61(0011 1101) System.out.println("bitA ^ bitB = " + (bitA ^ bitB)); // 49(0011 0001) System.out.println("~bitA = " + (~bitA)); // -61(1100 0011补码) System.out.println("bitA << 2 = " + (bitA << 2)); // 240(1111 0000) System.out.println("bitA >> 2 = " + (bitA >> 2)); // 15(0000 1111) // --------------------- 5. 逻辑运算符示例 --------------------- boolean boolA = true; boolean boolB = false; System.out.println("boolA && boolB = " + (boolA && boolB)); // false System.out.println("boolA || boolB = " + (boolA || boolB)); // true System.out.println("!(boolA && boolB) = " + !(boolA && boolB)); // true // 短路逻辑运算符示例 int num = 5; boolean result = (num < 4) && (num++ < 10); // 第一个条件为 false,不会执行第二个条件 System.out.println("result = " + result + ", num = " + num); // false, num=5 // --------------------- 6. 赋值运算符示例 --------------------- int assignVar = 10; assignVar += 5; // 等价于 assignVar = assignVar + 5 System.out.println("assignVar += 5 → " + assignVar); // 15 assignVar %= 3; // 等价于 assignVar = assignVar % 3 System.out.println("assignVar %= 3 → " + assignVar); // 0 // --------------------- 7. 条件运算符(三元运算符)示例 --------------------- int score = 80; String grade = (score >= 60) ? "及格" : "不及格"; System.out.println("成绩结果:" + grade); // 及格 // --------------------- 8. instanceof 运算符示例 --------------------- Vehicle vehicle = new Car(); System.out.println("vehicle 是 Car 的实例吗?" + (vehicle instanceof Car)); // true } // 定义内部类用于 instanceof 示例 static class Vehicle {} static class Car extends Vehicle {} }

    18.循环

    import java.util.*;
    import java.util.concurrent.*;
    import java.util.stream.*;
    public class AllLoopsDemo {
    public static void main(String[] args) {
    List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry", "Date");
    Map<Integer, String> map = Map.of(1, "A", 2, "B", 3, "C");
    // ========================
    // 基础循环结构 (JDK 1.0+)
    // ========================
    System.out.println("\n=== 传统 for 循环 ===");
    for (int i = 0; i < fruits.size(); i++) {
    System.out.println(fruits.get(i));
    }
    System.out.println("\n=== while 循环 ===");
    int count = 0;
    while (count < fruits.size()) {
    System.out.println(fruits.get(count++));
    }
    System.out.println("\n=== do..while 循环 ===");
    int index = 0;
    do {
    System.out.println(fruits.get(index++));
    } while (index < fruits.size());
    // ========================
    // 增强型循环 (JDK 5+)
    // ========================
    System.out.println("\n=== 增强型 for 循环 ===");
    for (String fruit : fruits) {
    System.out.println(fruit);
    }
    // ========================
    // 迭代器模式 (JDK 1.2+)
    // ========================
    System.out.println("\n=== 迭代器循环 ===");
    Iterator<String> it = fruits.iterator();
    while (it.hasNext()) {
    System.out.println(it.next());
    }
    // ========================
    // JDK 8+ 新特性循环
    // ========================
    System.out.println("\n=== Stream forEach ===");
    fruits.stream().forEach(System.out::println);
    System.out.println("\n=== 并行流循环 (JDK8) ===");
    fruits.parallelStream().forEach(System.out::println);
    System.out.println("\n=== forEach 方法 (JDK8) ===");
    fruits.forEach(fruit -> System.out.println(fruit.toUpperCase()));
    System.out.println("\n=== 方法引用循环 (JDK8) ===");
    fruits.forEach(System.out::println);
    // ========================
    // JDK 9+ 新特性循环
    // ========================
    System.out.println("\n=== takeWhile 循环 (JDK9) ===");
    Stream.of("A", "B", "C", "", "D")
    .takeWhile(s -> !s.isEmpty())
    .forEach(System.out::println);
    System.out.println("\n=== dropWhile 循环 (JDK9) ===");
    Stream.of(2, 4, 6, 8, 9, 10)
    .dropWhile(n -> n % 2 == 0)
    .forEach(System.out::println);
    // ========================
    // JDK 16+ 新特性
    // ========================
    System.out.println("\n=== Stream.mapMulti (JDK16) ===");
    record Pair(String k, int v) {}
    List<Pair> pairs = List.of(new Pair("A", 1), new Pair("B", 2));
    pairs.stream()
    .mapMulti((pair, consumer) -> {
    consumer.accept(pair.k());
    consumer.accept(pair.v());
    })
    .forEach(System.out::println);
    // ========================
    // 特殊数据结构循环
    // ========================
    System.out.println("\n=== Map 遍历 (JDK8+) ===");
    map.forEach((k, v) -> System.out.println(k + ":" + v));
    System.out.println("\n=== 枚举遍历 ===");
    Vector<String> vector = new Vector<>(fruits);
    Enumeration<String> en = vector.elements();
    while (en.hasMoreElements()) {
    System.out.println(en.nextElement());
    }
    // ========================
    // 异步循环 (JDK8+)
    // ========================
    System.out.println("\n=== CompletableFuture 循环 (JDK8) ===");
    List<CompletableFuture<Void>> futures = fruits.stream()
    .map(fruit -> CompletableFuture.runAsync(() ->
    System.out.println("Async: " + fruit)))
    .toList();
    CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
    }
    }
    import java.util.*; import java.util.concurrent.*; import java.util.stream.*; public class AllLoopsDemo { public static void main(String[] args) { List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry", "Date"); Map<Integer, String> map = Map.of(1, "A", 2, "B", 3, "C"); // ======================== // 基础循环结构 (JDK 1.0+) // ======================== System.out.println("\n=== 传统 for 循环 ==="); for (int i = 0; i < fruits.size(); i++) { System.out.println(fruits.get(i)); } System.out.println("\n=== while 循环 ==="); int count = 0; while (count < fruits.size()) { System.out.println(fruits.get(count++)); } System.out.println("\n=== do..while 循环 ==="); int index = 0; do { System.out.println(fruits.get(index++)); } while (index < fruits.size()); // ======================== // 增强型循环 (JDK 5+) // ======================== System.out.println("\n=== 增强型 for 循环 ==="); for (String fruit : fruits) { System.out.println(fruit); } // ======================== // 迭代器模式 (JDK 1.2+) // ======================== System.out.println("\n=== 迭代器循环 ==="); Iterator<String> it = fruits.iterator(); while (it.hasNext()) { System.out.println(it.next()); } // ======================== // JDK 8+ 新特性循环 // ======================== System.out.println("\n=== Stream forEach ==="); fruits.stream().forEach(System.out::println); System.out.println("\n=== 并行流循环 (JDK8) ==="); fruits.parallelStream().forEach(System.out::println); System.out.println("\n=== forEach 方法 (JDK8) ==="); fruits.forEach(fruit -> System.out.println(fruit.toUpperCase())); System.out.println("\n=== 方法引用循环 (JDK8) ==="); fruits.forEach(System.out::println); // ======================== // JDK 9+ 新特性循环 // ======================== System.out.println("\n=== takeWhile 循环 (JDK9) ==="); Stream.of("A", "B", "C", "", "D") .takeWhile(s -> !s.isEmpty()) .forEach(System.out::println); System.out.println("\n=== dropWhile 循环 (JDK9) ==="); Stream.of(2, 4, 6, 8, 9, 10) .dropWhile(n -> n % 2 == 0) .forEach(System.out::println); // ======================== // JDK 16+ 新特性 // ======================== System.out.println("\n=== Stream.mapMulti (JDK16) ==="); record Pair(String k, int v) {} List<Pair> pairs = List.of(new Pair("A", 1), new Pair("B", 2)); pairs.stream() .mapMulti((pair, consumer) -> { consumer.accept(pair.k()); consumer.accept(pair.v()); }) .forEach(System.out::println); // ======================== // 特殊数据结构循环 // ======================== System.out.println("\n=== Map 遍历 (JDK8+) ==="); map.forEach((k, v) -> System.out.println(k + ":" + v)); System.out.println("\n=== 枚举遍历 ==="); Vector<String> vector = new Vector<>(fruits); Enumeration<String> en = vector.elements(); while (en.hasMoreElements()) { System.out.println(en.nextElement()); } // ======================== // 异步循环 (JDK8+) // ======================== System.out.println("\n=== CompletableFuture 循环 (JDK8) ==="); List<CompletableFuture<Void>> futures = fruits.stream() .map(fruit -> CompletableFuture.runAsync(() -> System.out.println("Async: " + fruit))) .toList(); CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); } }

    19.涵盖条件语句、switch-caseNumber/Math 类、Character 类、String 类、StringBuilder 类

    import java.util.Locale;
    /​**​
    * 综合示例类:整合条件语句、switch-case、Number/Math、Character、String、StringBuilder 的使用
    */
    public class IntegrationExample {
    // 示例1:条件语句(链接1) + switch-case(链接2)
    public static void evaluateGrade(int score) {
    // if-else 条件分支(链接1)
    if (score < 0 || score > 100) {
    System.out.println("无效分数");
    return;
    }
    // switch-case 判断等级(链接2)
    String grade;
    switch (score / 10) {
    case 10:
    case 9:
    grade = "A";
    break;
    case 8:
    grade = "B";
    break;
    case 7:
    grade = "C";
    break;
    case 6:
    grade = "D";
    break;
    default:
    grade = "F";
    }
    System.out.println("得分等级: " + grade);
    }
    // 示例2:Number/Math 类(链接3) + Character 类(链接4)
    public static void numberAndCharDemo() {
    // 装箱拆箱(链接3)
    Integer numObj = 42; // 自动装箱
    int num = numObj; // 自动拆箱
    // Math 类方法(链接3)
    double sqrtVal = Math.sqrt(num);
    long rounded = Math.round(3.6);
    // Character 类方法(链接4)
    char ch = 'A';
    boolean isLetter = Character.isLetter(ch);
    boolean isDigit = Character.isDigit('7');
    System.out.printf("Math.sqrt(%d)=%.2f, 字符'%c'是字母:%b\n", num, sqrtVal, ch, isLetter);
    }
    // 示例3:String 类(链接5)操作
    public static void stringOperations() {
    // 字符串创建与连接
    String s1 = "Hello";
    String s2 = new String(" World");
    String combined = s1.concat(s2).toUpperCase();
    // 字符串格式化(链接5)
    String formatted = String.format(Locale.US, "格式化示例:%s 长度=%d", combined, combined.length());
    // 子字符串操作
    String substring = combined.substring(0, 5);
    System.out.println(formatted + " | 子串: " + substring);
    }
    // 示例4:StringBuilder(链接6)高效操作
    public static void stringBuilderDemo() {
    StringBuilder sb = new StringBuilder();
    sb.append("初始内容") // 追加内容
    .insert(2, "[插入]") // 在索引2处插入
    .delete(5, 7) // 删除索引5-7
    .reverse(); // 反转字符串
    System.out.println("StringBuilder结果: " + sb);
    }
    public static void main(String[] args) {
    // 执行所有示例
    evaluateGrade(85);
    numberAndCharDemo();
    stringOperations();
    stringBuilderDemo();
    }
    }
    import java.util.Locale; /​**​ * 综合示例类:整合条件语句、switch-case、Number/Math、Character、String、StringBuilder 的使用 */ public class IntegrationExample { // 示例1:条件语句(链接1) + switch-case(链接2) public static void evaluateGrade(int score) { // if-else 条件分支(链接1) if (score < 0 || score > 100) { System.out.println("无效分数"); return; } // switch-case 判断等级(链接2) String grade; switch (score / 10) { case 10: case 9: grade = "A"; break; case 8: grade = "B"; break; case 7: grade = "C"; break; case 6: grade = "D"; break; default: grade = "F"; } System.out.println("得分等级: " + grade); } // 示例2:Number/Math 类(链接3) + Character 类(链接4) public static void numberAndCharDemo() { // 装箱拆箱(链接3) Integer numObj = 42; // 自动装箱 int num = numObj; // 自动拆箱 // Math 类方法(链接3) double sqrtVal = Math.sqrt(num); long rounded = Math.round(3.6); // Character 类方法(链接4) char ch = 'A'; boolean isLetter = Character.isLetter(ch); boolean isDigit = Character.isDigit('7'); System.out.printf("Math.sqrt(%d)=%.2f, 字符'%c'是字母:%b\n", num, sqrtVal, ch, isLetter); } // 示例3:String 类(链接5)操作 public static void stringOperations() { // 字符串创建与连接 String s1 = "Hello"; String s2 = new String(" World"); String combined = s1.concat(s2).toUpperCase(); // 字符串格式化(链接5) String formatted = String.format(Locale.US, "格式化示例:%s 长度=%d", combined, combined.length()); // 子字符串操作 String substring = combined.substring(0, 5); System.out.println(formatted + " | 子串: " + substring); } // 示例4:StringBuilder(链接6)高效操作 public static void stringBuilderDemo() { StringBuilder sb = new StringBuilder(); sb.append("初始内容") // 追加内容 .insert(2, "[插入]") // 在索引2处插入 .delete(5, 7) // 删除索引5-7 .reverse(); // 反转字符串 System.out.println("StringBuilder结果: " + sb); } public static void main(String[] args) { // 执行所有示例 evaluateGrade(85); numberAndCharDemo(); stringOperations(); stringBuilderDemo(); } }

    20.涵盖数组、日期时间、正则表达式、方法、构造方法、文件 IO、Scanner 和异常处理

    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.regex.*;
    /​**​
    * 综合示例类,涵盖以下知识点:
    * 1. 数组(链接12. 日期时间(链接23. 正则表达式(链接3
    * 4. 方法(链接45. 构造方法(链接56. 文件IO(链接6
    * 7. Scanner(链接78. 异常处理(链接8
    */
    public class IntegratedExamples {
    // 自定义异常(对应链接8)
    static class InvalidEmailException extends Exception {
    public InvalidEmailException(String message) {
    super(message);
    }
    }
    // 示例方法:数组操作(对应链接1)
    public static void arrayExample() {
    int[] numbers = {10, 20, 30, 40, 50};
    System.out.println("数组遍历:");
    for (int num : numbers) {
    System.out.print(num + " ");
    }
    System.out.println("\n数组总和:" + calculateSum(numbers));
    }
    // 示例方法:计算数组总和(对应链接4的方法定义)
    private static int calculateSum(int[] arr) {
    int sum = 0;
    for (int num : arr) {
    sum += num;
    }
    return sum;
    }
    // 示例方法:日期时间处理(对应链接2)
    public static void dateTimeExample() {
    Date now = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println("当前时间:" + sdf.format(now));
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_MONTH, 7);
    System.out.println("7天后日期:" + sdf.format(calendar.getTime()));
    }
    // 示例方法:正则表达式验证邮箱(对应链接3)
    public static void validateEmail(String email) throws InvalidEmailException {
    String regex = "^[A-Za-z0-9+_.-]+@(.+)$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(email);
    if (!matcher.matches()) {
    throw new InvalidEmailException("无效邮箱格式:" + email);
    }
    System.out.println("邮箱验证通过:" + email);
    }
    // 示例方法:文件读写(对应链接6)
    public static void fileIOExample() throws IOException {
    String fileName = "demo.txt";
    try (FileWriter writer = new FileWriter(fileName)) {
    writer.write("Hello, File IO!\n");
    writer.write("当前时间:" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
    }
    System.out.println("\n文件内容:");
    try (Scanner fileScanner = new Scanner(new File(fileName))) {
    while (fileScanner.hasNextLine()) {
    System.out.println(fileScanner.nextLine());
    }
    }
    }
    // 主方法(整合所有功能)
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    try {
    // 1. 数组操作示例
    arrayExample();
    // 2. 日期时间示例
    dateTimeExample();
    // 3. 邮箱验证(用户输入)
    System.out.print("\n请输入邮箱地址:");
    String email = scanner.nextLine();
    validateEmail(email);
    // 4. 文件IO操作
    fileIOExample();
    // 5. 构造方法示例:处理自定义异常
    if (!email.contains("@company.com")) {
    throw new InvalidEmailException("仅支持公司邮箱");
    }
    } catch (ArrayIndexOutOfBoundsException e) {
    System.err.println("数组越界错误:" + e.getMessage());
    } catch (InvalidEmailException e) {
    System.err.println("邮箱错误:" + e.getMessage());
    } catch (IOException e) {
    System.err.println("文件操作失败:" + e.getMessage());
    } catch (InputMismatchException e) {
    System.err.println("输入类型不匹配");
    } finally {
    scanner.close();
    System.out.println("\n程序执行完毕,资源已释放");
    }
    }
    }
    import java.io.*; import java.text.SimpleDateFormat; import java.util.*; import java.util.regex.*; /​**​ * 综合示例类,涵盖以下知识点: * 1. 数组(链接1) 2. 日期时间(链接2) 3. 正则表达式(链接3) * 4. 方法(链接4) 5. 构造方法(链接5) 6. 文件IO(链接6) * 7. Scanner(链接7) 8. 异常处理(链接8) */ public class IntegratedExamples { // 自定义异常(对应链接8) static class InvalidEmailException extends Exception { public InvalidEmailException(String message) { super(message); } } // 示例方法:数组操作(对应链接1) public static void arrayExample() { int[] numbers = {10, 20, 30, 40, 50}; System.out.println("数组遍历:"); for (int num : numbers) { System.out.print(num + " "); } System.out.println("\n数组总和:" + calculateSum(numbers)); } // 示例方法:计算数组总和(对应链接4的方法定义) private static int calculateSum(int[] arr) { int sum = 0; for (int num : arr) { sum += num; } return sum; } // 示例方法:日期时间处理(对应链接2) public static void dateTimeExample() { Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("当前时间:" + sdf.format(now)); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, 7); System.out.println("7天后日期:" + sdf.format(calendar.getTime())); } // 示例方法:正则表达式验证邮箱(对应链接3) public static void validateEmail(String email) throws InvalidEmailException { String regex = "^[A-Za-z0-9+_.-]+@(.+)$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(email); if (!matcher.matches()) { throw new InvalidEmailException("无效邮箱格式:" + email); } System.out.println("邮箱验证通过:" + email); } // 示例方法:文件读写(对应链接6) public static void fileIOExample() throws IOException { String fileName = "demo.txt"; try (FileWriter writer = new FileWriter(fileName)) { writer.write("Hello, File IO!\n"); writer.write("当前时间:" + new SimpleDateFormat("yyyy-MM-dd").format(new Date())); } System.out.println("\n文件内容:"); try (Scanner fileScanner = new Scanner(new File(fileName))) { while (fileScanner.hasNextLine()) { System.out.println(fileScanner.nextLine()); } } } // 主方法(整合所有功能) public static void main(String[] args) { Scanner scanner = new Scanner(System.in); try { // 1. 数组操作示例 arrayExample(); // 2. 日期时间示例 dateTimeExample(); // 3. 邮箱验证(用户输入) System.out.print("\n请输入邮箱地址:"); String email = scanner.nextLine(); validateEmail(email); // 4. 文件IO操作 fileIOExample(); // 5. 构造方法示例:处理自定义异常 if (!email.contains("@company.com")) { throw new InvalidEmailException("仅支持公司邮箱"); } } catch (ArrayIndexOutOfBoundsException e) { System.err.println("数组越界错误:" + e.getMessage()); } catch (InvalidEmailException e) { System.err.println("邮箱错误:" + e.getMessage()); } catch (IOException e) { System.err.println("文件操作失败:" + e.getMessage()); } catch (InputMismatchException e) { System.err.println("输入类型不匹配"); } finally { scanner.close(); System.out.println("\n程序执行完毕,资源已释放"); } } }

    21.​​继承、多态、封装、抽象类、接口、枚举、反射、包​​ 等特性

    =================包结构与枚举定义=============
    // 文件路径: com/example/enums/AnimalType.java
    package com.example.enums;
    // 枚举:动物类型
    public enum AnimalType {
    MAMMAL, BIRD, REPTILE;
    }
    ==================抽象类与封装===========
    // 文件路径: com/example/model/Animal.java
    package com.example.model;
    import com.example.enums.AnimalType;
    // 抽象类 + 封装
    public abstract class Animal {
    // 封装属性
    private String name;
    private int age;
    private AnimalType type;
    public Animal(String name, int age, AnimalType type) {
    this.name = name;
    this.age = age;
    this.type = type;
    }
    // Getter/Setter
    public String getName() { return name; }
    public int getAge() { return age; }
    public AnimalType getType() { return type; }
    // 抽象方法
    public abstract void makeSound();
    // 通用方法(可被重写)
    public void eat() {
    System.out.println(name + " is eating.");
    }
    }
    =============接口定义=========
    // 文件路径: com/example/interfaces/Swimmable.java
    package com.example.interfaces;
    // 接口
    public interface Swimmable {
    void swim();
    }
    =============具体子类实现(继承、多态、重写、接口)========
    // 文件路径: com/example/model/Dog.java
    package com.example.model;
    import com.example.enums.AnimalType;
    import com.example.interfaces.Swimmable;
    // 继承 + 实现接口 + 重写
    public class Dog extends Animal implements Swimmable {
    public Dog(String name, int age) {
    super(name, age, AnimalType.MAMMAL);
    }
    @Override
    public void makeSound() {
    System.out.println(getName() + " says: Woof!");
    }
    @Override
    public void swim() {
    System.out.println(getName() + " is swimming.");
    }
    }
    // 文件路径: com/example/model/Penguin.java
    package com.example.model;
    import com.example.enums.AnimalType;
    public class Penguin extends Animal {
    public Penguin(String name, int age) {
    super(name, age, AnimalType.BIRD);
    }
    @Override
    public void makeSound() {
    System.out.println(getName() + " says: Honk!");
    }
    // 方法重载
    public void eat(String food) {
    System.out.println(getName() + " is eating " + food);
    }
    }
    ===============反射操作类=========
    // 文件路径: com/example/util/ReflectionDemo.java
    package com.example.util;
    import com.example.model.Animal;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    // 反射操作
    public class ReflectionDemo {
    public static void demoReflection() throws Exception {
    // 通过类名获取Class对象
    Class<?> clazz = Class.forName("com.example.model.Dog");
    // 创建实例
    Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
    Animal dog = (Animal) constructor.newInstance("Buddy", 3);
    // 调用方法
    Method makeSound = clazz.getMethod("makeSound");
    makeSound.invoke(dog);
    }
    }
    ================= 主类(多态、包、枚举使用===============
    // 文件路径: com/example/MainApp.java
    package com.example;
    import com.example.enums.AnimalType;
    import com.example.model.Animal;
    import com.example.model.Dog;
    import com.example.model.Penguin;
    import com.example.util.ReflectionDemo;
    public class MainApp {
    public static void main(String[] args) throws Exception {
    // 多态
    Animal animal1 = new Dog("Rex", 2);
    Animal animal2 = new Penguin("Pingu", 5);
    // 调用重写方法
    animal1.makeSound(); // 输出: Rex says: Woof!
    animal2.makeSound(); // 输出: Pingu says: Honk!
    // 接口方法调用
    ((Dog) animal1).swim(); // 输出: Rex is swimming.
    // 枚举使用
    System.out.println(animal2.getType()); // 输出: BIRD
    // 反射演示
    ReflectionDemo.demoReflection();
    }
    }
    =================包结构与枚举定义============= // 文件路径: com/example/enums/AnimalType.java package com.example.enums; // 枚举:动物类型 public enum AnimalType { MAMMAL, BIRD, REPTILE; } ==================抽象类与封装=========== // 文件路径: com/example/model/Animal.java package com.example.model; import com.example.enums.AnimalType; // 抽象类 + 封装 public abstract class Animal { // 封装属性 private String name; private int age; private AnimalType type; public Animal(String name, int age, AnimalType type) { this.name = name; this.age = age; this.type = type; } // Getter/Setter public String getName() { return name; } public int getAge() { return age; } public AnimalType getType() { return type; } // 抽象方法 public abstract void makeSound(); // 通用方法(可被重写) public void eat() { System.out.println(name + " is eating."); } } =============接口定义========= // 文件路径: com/example/interfaces/Swimmable.java package com.example.interfaces; // 接口 public interface Swimmable { void swim(); } =============具体子类实现(继承、多态、重写、接口)======== // 文件路径: com/example/model/Dog.java package com.example.model; import com.example.enums.AnimalType; import com.example.interfaces.Swimmable; // 继承 + 实现接口 + 重写 public class Dog extends Animal implements Swimmable { public Dog(String name, int age) { super(name, age, AnimalType.MAMMAL); } @Override public void makeSound() { System.out.println(getName() + " says: Woof!"); } @Override public void swim() { System.out.println(getName() + " is swimming."); } } // 文件路径: com/example/model/Penguin.java package com.example.model; import com.example.enums.AnimalType; public class Penguin extends Animal { public Penguin(String name, int age) { super(name, age, AnimalType.BIRD); } @Override public void makeSound() { System.out.println(getName() + " says: Honk!"); } // 方法重载 public void eat(String food) { System.out.println(getName() + " is eating " + food); } } ===============反射操作类========= // 文件路径: com/example/util/ReflectionDemo.java package com.example.util; import com.example.model.Animal; import java.lang.reflect.Constructor; import java.lang.reflect.Method; // 反射操作 public class ReflectionDemo { public static void demoReflection() throws Exception { // 通过类名获取Class对象 Class<?> clazz = Class.forName("com.example.model.Dog"); // 创建实例 Constructor<?> constructor = clazz.getConstructor(String.class, int.class); Animal dog = (Animal) constructor.newInstance("Buddy", 3); // 调用方法 Method makeSound = clazz.getMethod("makeSound"); makeSound.invoke(dog); } } ================= 主类(多态、包、枚举使用=============== // 文件路径: com/example/MainApp.java package com.example; import com.example.enums.AnimalType; import com.example.model.Animal; import com.example.model.Dog; import com.example.model.Penguin; import com.example.util.ReflectionDemo; public class MainApp { public static void main(String[] args) throws Exception { // 多态 Animal animal1 = new Dog("Rex", 2); Animal animal2 = new Penguin("Pingu", 5); // 调用重写方法 animal1.makeSound(); // 输出: Rex says: Woof! animal2.makeSound(); // 输出: Pingu says: Honk! // 接口方法调用 ((Dog) animal1).swim(); // 输出: Rex is swimming. // 枚举使用 System.out.println(animal2.getType()); // 输出: BIRD // 反射演示 ReflectionDemo.demoReflection(); } }

    22.结构实现、集合操作、新特性

    // 导入所有需要的Java集合类和特性
    import java.util.*;
    import java.util.concurrent.ConcurrentHashMap;
    import java.time.LocalDate;
    import java.util.stream.Collectors;
    /​**​
    * 本类演示Java集合框架核心组件及JDK 1-24关键特性
    * 包含数据结构实现、集合操作、新特性应用示例
    * 每个操作均包含详细注释说明
    */
    public class CollectionExamples {
    public static void main(String[] args) {
    // ==================== 基础数据结构示例 ====================
    // ArrayList示例(JDK 1.2引入)
    List<String> arrayList = new ArrayList<>(); // JDK7+ 菱形语法
    arrayList.add("Java"); // 添加元素
    arrayList.add(0, "Python"); // 在指定位置插入(JDK1.2)
    System.out.println("ArrayList: " + arrayList);
    // LinkedList示例(JDK 1.2)
    Deque<String> linkedList = new LinkedList<>(); // 实现Deque接口(JDK6+)
    linkedList.addFirst("First"); // 头部插入(JDK1.6)
    linkedList.addLast("Last"); // 尾部插入
    System.out.println("LinkedList: " + linkedList);
    // HashSet示例(JDK 1.2)
    Set<Integer> hashSet = new HashSet<>();
    hashSet.add(10);
    hashSet.add(10); // 重复元素自动过滤
    System.out.println("HashSet: " + hashSet);
    // HashMap示例(JDK 1.2)
    Map<String, Integer> hashMap = new HashMap<>();
    hashMap.put("Apple", 10); // 添加键值对
    hashMap.putIfAbsent("Apple", 20); // JDK8+ 方法
    System.out.println("HashMap: " + hashMap);
    // ==================== 迭代器与遍历 ====================
    // 传统迭代器(JDK1.2)
    Iterator<String> it = arrayList.iterator();
    while(it.hasNext()) {
    String element = it.next();
    if(element.equals("Python")) {
    it.remove(); // 安全删除元素
    }
    }
    // 增强for循环(JDK5+)
    for(String s : arrayList) {
    System.out.println("ForEach: " + s);
    }
    // ==================== JDK新特性示例 ====================
    // JDK8+ Lambda表达式
    arrayList.forEach(element ->
    System.out.println("Lambda: " + element));
    // JDK8+ Stream API
    List<String> filtered = arrayList.stream()
    .filter(s -> s.length() > 3) // 过滤
    .map(String::toUpperCase) // 转换
    .collect(Collectors.toList()); // 收集结果
    System.out.println("Stream处理: " + filtered);
    // JDK10+ 局部变量类型推断
    var varList = List.of("A", "B", "C"); // JDK9+ List.of
    // JDK16+ Record类(不可变数据载体)
    record Person(String name, int age) {} // 自动生成equals/hashCode
    Person p = new Person("Alice", 30);
    System.out.println("Record: " + p);
    // JDK14+ Switch表达式
    String result = switch(p.age()) {
    case 30 -> "Young"; // 箭头语法
    default -> "Other";
    };
    System.out.println("Switch表达式: " + result);
    // JDK15+ 文本块
    String json = """
    {
    "name": "%s",
    "age": %d
    }
    """.formatted(p.name(), p.age()); // JDK15+ formatted
    System.out.println("文本块JSON:\n" + json);
    // JDK21+ 虚拟线程(预览特性)
    Runnable task = () -> System.out.println(
    Thread.currentThread().isVirtual() ? "虚拟线程" : "平台线程");
    Thread.ofVirtual().start(task); // 创建虚拟线程
    // ==================== 并发集合示例 ====================
    // ConcurrentHashMap(JDK5+)
    Map<String, Integer> concurrentMap = new ConcurrentHashMap<>();
    concurrentMap.computeIfAbsent("key", k -> 100); // JDK8+方法
    // CopyOnWriteArrayList(JDK5+)
    List<String> cowList = new CopyOnWriteArrayList<>();
    cowList.addAll(List.of("线程安全", "写时复制"));
    // ==================== 其他重要特性 ====================
    // Optional避免空指针(JDK8+)
    Optional<String> opt = Optional.ofNullable(null);
    System.out.println("Optional: " + opt.orElse("默认值"));
    // 时间API(JDK8+)
    LocalDate today = LocalDate.now();
    System.out.println("当前日期: " + today);
    // 模块化系统(JDK9+)
    // module-info.java中需要声明: requires java.base;
    // 模式匹配instanceof(JDK16+预览,JDK21正式)
    Object obj = "字符串";
    if(obj instanceof String s && s.length() > 2) {
    System.out.println("模式匹配: " + s.toUpperCase());
    }
    }
    }
    // 导入所有需要的Java集合类和特性 import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.time.LocalDate; import java.util.stream.Collectors; /​**​ * 本类演示Java集合框架核心组件及JDK 1-24关键特性 * 包含数据结构实现、集合操作、新特性应用示例 * 每个操作均包含详细注释说明 */ public class CollectionExamples { public static void main(String[] args) { // ==================== 基础数据结构示例 ==================== // ArrayList示例(JDK 1.2引入) List<String> arrayList = new ArrayList<>(); // JDK7+ 菱形语法 arrayList.add("Java"); // 添加元素 arrayList.add(0, "Python"); // 在指定位置插入(JDK1.2) System.out.println("ArrayList: " + arrayList); // LinkedList示例(JDK 1.2) Deque<String> linkedList = new LinkedList<>(); // 实现Deque接口(JDK6+) linkedList.addFirst("First"); // 头部插入(JDK1.6) linkedList.addLast("Last"); // 尾部插入 System.out.println("LinkedList: " + linkedList); // HashSet示例(JDK 1.2) Set<Integer> hashSet = new HashSet<>(); hashSet.add(10); hashSet.add(10); // 重复元素自动过滤 System.out.println("HashSet: " + hashSet); // HashMap示例(JDK 1.2) Map<String, Integer> hashMap = new HashMap<>(); hashMap.put("Apple", 10); // 添加键值对 hashMap.putIfAbsent("Apple", 20); // JDK8+ 方法 System.out.println("HashMap: " + hashMap); // ==================== 迭代器与遍历 ==================== // 传统迭代器(JDK1.2) Iterator<String> it = arrayList.iterator(); while(it.hasNext()) { String element = it.next(); if(element.equals("Python")) { it.remove(); // 安全删除元素 } } // 增强for循环(JDK5+) for(String s : arrayList) { System.out.println("ForEach: " + s); } // ==================== JDK新特性示例 ==================== // JDK8+ Lambda表达式 arrayList.forEach(element -> System.out.println("Lambda: " + element)); // JDK8+ Stream API List<String> filtered = arrayList.stream() .filter(s -> s.length() > 3) // 过滤 .map(String::toUpperCase) // 转换 .collect(Collectors.toList()); // 收集结果 System.out.println("Stream处理: " + filtered); // JDK10+ 局部变量类型推断 var varList = List.of("A", "B", "C"); // JDK9+ List.of // JDK16+ Record类(不可变数据载体) record Person(String name, int age) {} // 自动生成equals/hashCode Person p = new Person("Alice", 30); System.out.println("Record: " + p); // JDK14+ Switch表达式 String result = switch(p.age()) { case 30 -> "Young"; // 箭头语法 default -> "Other"; }; System.out.println("Switch表达式: " + result); // JDK15+ 文本块 String json = """ { "name": "%s", "age": %d } """.formatted(p.name(), p.age()); // JDK15+ formatted System.out.println("文本块JSON:\n" + json); // JDK21+ 虚拟线程(预览特性) Runnable task = () -> System.out.println( Thread.currentThread().isVirtual() ? "虚拟线程" : "平台线程"); Thread.ofVirtual().start(task); // 创建虚拟线程 // ==================== 并发集合示例 ==================== // ConcurrentHashMap(JDK5+) Map<String, Integer> concurrentMap = new ConcurrentHashMap<>(); concurrentMap.computeIfAbsent("key", k -> 100); // JDK8+方法 // CopyOnWriteArrayList(JDK5+) List<String> cowList = new CopyOnWriteArrayList<>(); cowList.addAll(List.of("线程安全", "写时复制")); // ==================== 其他重要特性 ==================== // Optional避免空指针(JDK8+) Optional<String> opt = Optional.ofNullable(null); System.out.println("Optional: " + opt.orElse("默认值")); // 时间API(JDK8+) LocalDate today = LocalDate.now(); System.out.println("当前日期: " + today); // 模块化系统(JDK9+) // module-info.java中需要声明: requires java.base; // 模式匹配instanceof(JDK16+预览,JDK21正式) Object obj = "字符串"; if(obj instanceof String s && s.length() > 2) { System.out.println("模式匹配: " + s.toUpperCase()); } } }

    23.泛型示例代码

    ================有界类型参数 来限制泛型类型==============
    class A {
    String name;
    public A(String name) {
    this.name = name;
    }
    @Override
    public String toString() {
    return "A{name='" + name + "'}";
    }
    }
    class B extends A {
    public B(String name) {
    super(name);
    }
    }
    public class RestrictedGenericMethod {
    // 泛型方法,限制只有 A 类或其子类可以调用
    public static <T extends A> void process(T obj) {
    System.out.println("Processing object: " + obj);
    }
    public static void main(String[] args) {
    A a = new A("Object A");
    B b = new B("Object B");
    // 调用方法
    process(a); // 合法:A 是 T 的上限
    process(b); // 合法:B 是 A 的子类
    // 如果尝试传入非 A 类型的对象,编译器会报错
    // String str = "Hello";
    // process(str); // 编译错误:String 不是 A 的子类
    }
    }
    //如果 A 实现了某个接口(如 Comparable<A>),你还可以进一步限制泛型类型:
    public static <T extends A & Comparable<T>> void process(T obj) {
    System.out.println("Processing object: " + obj);
    }
    ====================泛型=================
    // 引入Java 5新特性:泛型(Generics)
    public class GenericDemo<T> { // 泛型类定义,T为类型参数(JDK5新特性)
    private T data; // 泛型字段,类型由实例化时指定(JDK5)
    public GenericDemo(T data) { // 泛型构造方法(JDK5)
    this.data = data;
    }
    // 泛型方法,E为独立类型参数(JDK5)
    public static <E> void printElements(E[] elements) {
    // 增强for循环(JDK5新特性)
    for (E element : elements) {
    System.out.print(element + " ");
    }
    System.out.println();
    }
    // 有界类型参数:T必须实现Comparable接口(JDK5)
    public static <T extends Comparable<T>> T findMax(T a, T b) {
    return a.compareTo(b) > 0 ? a : b;
    }
    // 类型通配符示例(JDK5)
    public static void printWildcardList(List<?> list) {
    System.out.println("List Content: " + list.get(0));
    }
    public static void main(String[] args) {
    // 泛型类实例化(JDK5)
    GenericDemo<Integer> intDemo = new GenericDemo<>(100);
    // 钻石操作符类型推断(JDK7新特性)
    System.out.println("Integer Data: " + intDemo.data);
    // 泛型方法调用
    String[] strArr = {"A", "B", "C"};
    printElements(strArr); // 类型自动推断(JDK5)
    // 有界泛型方法调用
    System.out.println("Max Value: " + findMax(15, 25));
    // 类型通配符使用
    List<Double> doubleList = List.of(3.14); // List.of(JDK9新特性)
    printWildcardList(doubleList);
    // var局部变量类型推断(JDK10新特性)
    var stringDemo = new GenericDemo<>("Hello Generics");
    System.out.println("String Data: " + stringDemo.data);
    }
    }
    ================有界类型参数 来限制泛型类型============== class A { String name; public A(String name) { this.name = name; } @Override public String toString() { return "A{name='" + name + "'}"; } } class B extends A { public B(String name) { super(name); } } public class RestrictedGenericMethod { // 泛型方法,限制只有 A 类或其子类可以调用 public static <T extends A> void process(T obj) { System.out.println("Processing object: " + obj); } public static void main(String[] args) { A a = new A("Object A"); B b = new B("Object B"); // 调用方法 process(a); // 合法:A 是 T 的上限 process(b); // 合法:B 是 A 的子类 // 如果尝试传入非 A 类型的对象,编译器会报错 // String str = "Hello"; // process(str); // 编译错误:String 不是 A 的子类 } } //如果 A 实现了某个接口(如 Comparable<A>),你还可以进一步限制泛型类型: public static <T extends A & Comparable<T>> void process(T obj) { System.out.println("Processing object: " + obj); } ====================泛型================= // 引入Java 5新特性:泛型(Generics) public class GenericDemo<T> { // 泛型类定义,T为类型参数(JDK5新特性) private T data; // 泛型字段,类型由实例化时指定(JDK5) public GenericDemo(T data) { // 泛型构造方法(JDK5) this.data = data; } // 泛型方法,E为独立类型参数(JDK5) public static <E> void printElements(E[] elements) { // 增强for循环(JDK5新特性) for (E element : elements) { System.out.print(element + " "); } System.out.println(); } // 有界类型参数:T必须实现Comparable接口(JDK5) public static <T extends Comparable<T>> T findMax(T a, T b) { return a.compareTo(b) > 0 ? a : b; } // 类型通配符示例(JDK5) public static void printWildcardList(List<?> list) { System.out.println("List Content: " + list.get(0)); } public static void main(String[] args) { // 泛型类实例化(JDK5) GenericDemo<Integer> intDemo = new GenericDemo<>(100); // 钻石操作符类型推断(JDK7新特性) System.out.println("Integer Data: " + intDemo.data); // 泛型方法调用 String[] strArr = {"A", "B", "C"}; printElements(strArr); // 类型自动推断(JDK5) // 有界泛型方法调用 System.out.println("Max Value: " + findMax(15, 25)); // 类型通配符使用 List<Double> doubleList = List.of(3.14); // List.of(JDK9新特性) printWildcardList(doubleList); // var局部变量类型推断(JDK10新特性) var stringDemo = new GenericDemo<>("Hello Generics"); System.out.println("String Data: " + stringDemo.data); } }

    24.序列化

    // 导入序列化相关类
    import java.io.Serializable;
    import java.io.ObjectOutputStream;
    import java.io.ObjectInputStream;
    import java.io.FileOutputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    /​**​
    * 示例类:实现Serializable接口以支持序列化
    * JDK 1.1+ 支持基础序列化功能
    */
    public class SerializationExample implements Serializable {
    // 普通字段,默认支持序列化
    private String name;
    // transient字段:不参与序列化(JDK 1.1+)
    private transient int sensitiveData;
    // 静态字段:不会被序列化(属于类级别)
    private static String staticField = "Class-Level Data";
    /​**​
    * 构造函数
    */
    public SerializationExample(String name, int sensitiveData) {
    this.name = name;
    this.sensitiveData = sensitiveData;
    }
    /​**​
    * 序列化对象到文件
    */
    public void serialize(String filename) {
    try (
    // 文件输出流(JDK 1.1+)
    FileOutputStream fileOut = new FileOutputStream(filename);
    // 对象输出流(JDK 1.1+)
    ObjectOutputStream out = new ObjectOutputStream(fileOut)
    ) {
    out.writeObject(this); // 将当前对象写入流
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    /​**​
    * 从文件反序列化对象
    */
    public static SerializationExample deserialize(String filename) {
    try (
    // 文件输入流(JDK 1.1+)
    FileInputStream fileIn = new FileInputStream(filename);
    // 对象输入流(JDK 1.1+)
    ObjectInputStream in = new ObjectInputStream(fileIn)
    ) {
    // 强制类型转换(JDK 1.5+ 泛型可优化此处)
    return (SerializationExample) in.readObject();
    } catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
    return null;
    }
    }
    /​**​
    * 重写toString方法(JDK 1.0+)
    */
    @Override
    public String toString() {
    return "Name: " + name + ", SensitiveData: " + sensitiveData;
    }
    /​**​
    * 主方法测试序列化与反序列化
    */
    public static void main(String[] args) {
    // 创建对象
    SerializationExample obj = new SerializationExample("Test", 12345);
    // 序列化到文件
    obj.serialize("example.ser");
    // 反序列化后输出
    SerializationExample restored = deserialize("example.ser");
    System.out.println(restored);
    // 输出:Name: Test, SensitiveData: 0(transient字段丢失)
    }
    }
    //JDK 8的Lambda序列化​
    // Lambda表达式需满足函数式接口且捕获变量可序列化
    Serializable lambda = (Serializable & Runnable) () -> System.out.println("Serializable Lambda");
    ​//JDK 17的反序列化过滤器​​
    // 设置反序列化过滤器(阻止特定类)
    ObjectInputFilter filter = info -> info.serialClass() == Dangerous.class ? Status.REJECTED : Status.ALLOWED;
    ObjectInputStream in = new ObjectInputStream(fileIn).setObjectInputFilter(filter);
    ​//JDK 16的记录类序列化​​
    // 记录类默认可序列化
    public record User(String name, int age) implements Serializable {}
    // 导入序列化相关类 import java.io.Serializable; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.IOException; /​**​ * 示例类:实现Serializable接口以支持序列化 * JDK 1.1+ 支持基础序列化功能 */ public class SerializationExample implements Serializable { // 普通字段,默认支持序列化 private String name; // transient字段:不参与序列化(JDK 1.1+) private transient int sensitiveData; // 静态字段:不会被序列化(属于类级别) private static String staticField = "Class-Level Data"; /​**​ * 构造函数 */ public SerializationExample(String name, int sensitiveData) { this.name = name; this.sensitiveData = sensitiveData; } /​**​ * 序列化对象到文件 */ public void serialize(String filename) { try ( // 文件输出流(JDK 1.1+) FileOutputStream fileOut = new FileOutputStream(filename); // 对象输出流(JDK 1.1+) ObjectOutputStream out = new ObjectOutputStream(fileOut) ) { out.writeObject(this); // 将当前对象写入流 } catch (IOException e) { e.printStackTrace(); } } /​**​ * 从文件反序列化对象 */ public static SerializationExample deserialize(String filename) { try ( // 文件输入流(JDK 1.1+) FileInputStream fileIn = new FileInputStream(filename); // 对象输入流(JDK 1.1+) ObjectInputStream in = new ObjectInputStream(fileIn) ) { // 强制类型转换(JDK 1.5+ 泛型可优化此处) return (SerializationExample) in.readObject(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); return null; } } /​**​ * 重写toString方法(JDK 1.0+) */ @Override public String toString() { return "Name: " + name + ", SensitiveData: " + sensitiveData; } /​**​ * 主方法测试序列化与反序列化 */ public static void main(String[] args) { // 创建对象 SerializationExample obj = new SerializationExample("Test", 12345); // 序列化到文件 obj.serialize("example.ser"); // 反序列化后输出 SerializationExample restored = deserialize("example.ser"); System.out.println(restored); // 输出:Name: Test, SensitiveData: 0(transient字段丢失) } } //JDK 8的Lambda序列化​ // Lambda表达式需满足函数式接口且捕获变量可序列化 Serializable lambda = (Serializable & Runnable) () -> System.out.println("Serializable Lambda"); ​​//JDK 17的反序列化过滤器​​ // 设置反序列化过滤器(阻止特定类) ObjectInputFilter filter = info -> info.serialClass() == Dangerous.class ? Status.REJECTED : Status.ALLOWED; ObjectInputStream in = new ObjectInputStream(fileIn).setObjectInputFilter(filter); ​​//JDK 16的记录类序列化​​ // 记录类默认可序列化 public record User(String name, int age) implements Serializable {}

    25.网络编程

    ==============客户端实现===========
    import java.io.*;
    import java.net.*;
    import java.util.concurrent.*;
    /*​**​
    * 支持实时通信的客户端实现
    * 启动命令: java ChatClient [主机] [端口]
    */
    public class ChatClient {
    private static volatile boolean connected = true;
    public static void main(String[] args) {
    String host = args.length > 0 ? args[0] : "localhost";
    int port = parsePort(args);
    try (Socket socket = new Socket(host, port);
    DataInputStream in = new DataInputStream(socket.getInputStream());
    DataOutputStream out = new DataOutputStream(socket.getOutputStream())) {
    System.out.printf("""
    🟢 连接成功
    ▶ 服务器地址: %s
    ▶ 输入消息回车发送
    ▶ 输入 exit 退出
    %n""", socket.getRemoteSocketAddress());
    // JDK 7 新特性:ForkJoinPool 实现消息并行处理
    ForkJoinPool.commonPool().execute(() -> receiveMessages(in));
    sendMessages(out);
    } catch (ConnectException e) {
    System.err.println("🔴 连接被拒绝,请检查:");
    System.err.println("1. 服务端是否启动");
    System.err.println("2. 防火墙设置");
    System.err.println("3. 地址是否正确 (" + host + ":" + port + ")");
    } catch (IOException e) {
    System.err.println("⚠️ 通信异常: " + e.getMessage());
    }
    }
    private static int parsePort(String[] args) {
    try {
    return args.length > 1 ? Integer.parseInt(args[1]) : 8080;
    } catch (NumberFormatException e) {
    System.out.println("❗ 使用默认端口 8080");
    return 8080;
    }
    }
    private static void sendMessages(DataOutputStream out) {
    try (BufferedReader consoleReader = new BufferedReader(
    new InputStreamReader(System.in))) {
    while (connected) {
    System.out.print("↘ 输入消息: ");
    String message = consoleReader.readLine();
    out.writeUTF(message);
    out.flush();
    if ("exit".equalsIgnoreCase(message)) {
    connected = false;
    System.out.println("⛔ 已断开连接");
    }
    }
    } catch (IOException e) {
    System.err.println("消息发送失败: " + e.getMessage());
    }
    }
    private static void receiveMessages(DataInputStream in) {
    try {
    while (connected) {
    String serverMsg = in.readUTF();
    System.out.printf("\n[服务器消息] << %s%n↘ 输入消息: ", serverMsg);
    }
    } catch (EOFException e) {
    System.err.println("\n⛔ 连接被服务器关闭");
    } catch (IOException e) {
    if (connected) {
    System.err.println("\n⚠️ 接收消息异常: " + e.getMessage());
    }
    }
    }
    }
    ========================服务端===========
    import java.io.*;
    import java.net.*;
    import java.util.concurrent.*;
    /*​**​
    * 支持实时通信的服务端实现
    * 启动命令: java ChatServer [端口]
    */
    public class ChatServer {
    private static final int MAX_CLIENTS = 100;
    private static final ExecutorService threadPool = Executors.newFixedThreadPool(MAX_CLIENTS);
    public static void main(String[] args) {
    int port = parsePort(args);
    try (ServerSocket serverSocket = new ServerSocket(port)) {
    System.out.printf("""
    🚀 服务端已启动
    ▶ 监听端口: %d
    ▶ 等待客户端连接...
    %n""", port);
    while (true) {
    Socket clientSocket = serverSocket.accept();
    System.out.printf("✅ 新客户端接入: %s%n",
    clientSocket.getRemoteSocketAddress());
    // 为每个客户端创建独立会话
    threadPool.execute(new ClientHandler(clientSocket));
    }
    } catch (IOException e) {
    System.err.println("⚠️ 服务端异常: " + e.getMessage());
    }
    }
    private static int parsePort(String[] args) {
    try {
    return args.length > 0 ? Integer.parseInt(args[0]) : 8080;
    } catch (NumberFormatException e) {
    System.out.println("❗ 使用默认端口 8080");
    return 8080;
    }
    }
    /*​**​
    * JDK 5 新特性:通过实现Runnable处理并发连接
    */
    private static class ClientHandler implements Runnable {
    private final Socket socket;
    private boolean running = true;
    ClientHandler(Socket socket) {
    this.socket = socket;
    }
    @Override
    public void run() {
    try (DataInputStream in = new DataInputStream(socket.getInputStream());
    DataOutputStream out = new DataOutputStream(socket.getOutputStream())) {
    // JDK 8 新特性:CompletableFuture 实现双工通信
    CompletableFuture.runAsync(() -> handleOutput(out));
    handleInput(in);
    } catch (IOException e) {
    System.err.println("客户端连接异常: " + e.getMessage());
    } finally {
    closeResources();
    }
    }
    private void handleInput(DataInputStream in) throws IOException {
    while (running) {
    String message = in.readUTF();
    if ("exit".equalsIgnoreCase(message)) {
    System.out.printf("⛔ 客户端 %s 断开连接%n",
    socket.getRemoteSocketAddress());
    break;
    }
    System.out.printf("[客户端消息] %s >> %s%n",
    socket.getRemoteSocketAddress(), message);
    }
    }
    private void handleOutput(DataOutputStream out) {
    try (BufferedReader consoleReader = new BufferedReader(
    new InputStreamReader(System.in))) {
    while (running) {
    System.out.print("↘ 输入服务端消息: ");
    String serverMsg = consoleReader.readLine();
    out.writeUTF(serverMsg);
    out.flush();
    }
    } catch (IOException e) {
    System.err.println("服务端消息发送失败: " + e.getMessage());
    }
    }
    private void closeResources() {
    try {
    running = false;
    if (!socket.isClosed()) socket.close();
    } catch (IOException e) {
    System.err.println("资源关闭异常: " + e.getMessage());
    }
    }
    }
    }
    ==============客户端实现=========== import java.io.*; import java.net.*; import java.util.concurrent.*; /*​**​ * 支持实时通信的客户端实现 * 启动命令: java ChatClient [主机] [端口] */ public class ChatClient { private static volatile boolean connected = true; public static void main(String[] args) { String host = args.length > 0 ? args[0] : "localhost"; int port = parsePort(args); try (Socket socket = new Socket(host, port); DataInputStream in = new DataInputStream(socket.getInputStream()); DataOutputStream out = new DataOutputStream(socket.getOutputStream())) { System.out.printf(""" 🟢 连接成功 ▶ 服务器地址: %s ▶ 输入消息回车发送 ▶ 输入 exit 退出 %n""", socket.getRemoteSocketAddress()); // JDK 7 新特性:ForkJoinPool 实现消息并行处理 ForkJoinPool.commonPool().execute(() -> receiveMessages(in)); sendMessages(out); } catch (ConnectException e) { System.err.println("🔴 连接被拒绝,请检查:"); System.err.println("1. 服务端是否启动"); System.err.println("2. 防火墙设置"); System.err.println("3. 地址是否正确 (" + host + ":" + port + ")"); } catch (IOException e) { System.err.println("⚠️ 通信异常: " + e.getMessage()); } } private static int parsePort(String[] args) { try { return args.length > 1 ? Integer.parseInt(args[1]) : 8080; } catch (NumberFormatException e) { System.out.println("❗ 使用默认端口 8080"); return 8080; } } private static void sendMessages(DataOutputStream out) { try (BufferedReader consoleReader = new BufferedReader( new InputStreamReader(System.in))) { while (connected) { System.out.print("↘ 输入消息: "); String message = consoleReader.readLine(); out.writeUTF(message); out.flush(); if ("exit".equalsIgnoreCase(message)) { connected = false; System.out.println("⛔ 已断开连接"); } } } catch (IOException e) { System.err.println("消息发送失败: " + e.getMessage()); } } private static void receiveMessages(DataInputStream in) { try { while (connected) { String serverMsg = in.readUTF(); System.out.printf("\n[服务器消息] << %s%n↘ 输入消息: ", serverMsg); } } catch (EOFException e) { System.err.println("\n⛔ 连接被服务器关闭"); } catch (IOException e) { if (connected) { System.err.println("\n⚠️ 接收消息异常: " + e.getMessage()); } } } } ========================服务端=========== import java.io.*; import java.net.*; import java.util.concurrent.*; /*​**​ * 支持实时通信的服务端实现 * 启动命令: java ChatServer [端口] */ public class ChatServer { private static final int MAX_CLIENTS = 100; private static final ExecutorService threadPool = Executors.newFixedThreadPool(MAX_CLIENTS); public static void main(String[] args) { int port = parsePort(args); try (ServerSocket serverSocket = new ServerSocket(port)) { System.out.printf(""" 🚀 服务端已启动 ▶ 监听端口: %d ▶ 等待客户端连接... %n""", port); while (true) { Socket clientSocket = serverSocket.accept(); System.out.printf("✅ 新客户端接入: %s%n", clientSocket.getRemoteSocketAddress()); // 为每个客户端创建独立会话 threadPool.execute(new ClientHandler(clientSocket)); } } catch (IOException e) { System.err.println("⚠️ 服务端异常: " + e.getMessage()); } } private static int parsePort(String[] args) { try { return args.length > 0 ? Integer.parseInt(args[0]) : 8080; } catch (NumberFormatException e) { System.out.println("❗ 使用默认端口 8080"); return 8080; } } /*​**​ * JDK 5 新特性:通过实现Runnable处理并发连接 */ private static class ClientHandler implements Runnable { private final Socket socket; private boolean running = true; ClientHandler(Socket socket) { this.socket = socket; } @Override public void run() { try (DataInputStream in = new DataInputStream(socket.getInputStream()); DataOutputStream out = new DataOutputStream(socket.getOutputStream())) { // JDK 8 新特性:CompletableFuture 实现双工通信 CompletableFuture.runAsync(() -> handleOutput(out)); handleInput(in); } catch (IOException e) { System.err.println("客户端连接异常: " + e.getMessage()); } finally { closeResources(); } } private void handleInput(DataInputStream in) throws IOException { while (running) { String message = in.readUTF(); if ("exit".equalsIgnoreCase(message)) { System.out.printf("⛔ 客户端 %s 断开连接%n", socket.getRemoteSocketAddress()); break; } System.out.printf("[客户端消息] %s >> %s%n", socket.getRemoteSocketAddress(), message); } } private void handleOutput(DataOutputStream out) { try (BufferedReader consoleReader = new BufferedReader( new InputStreamReader(System.in))) { while (running) { System.out.print("↘ 输入服务端消息: "); String serverMsg = consoleReader.readLine(); out.writeUTF(serverMsg); out.flush(); } } catch (IOException e) { System.err.println("服务端消息发送失败: " + e.getMessage()); } } private void closeResources() { try { running = false; if (!socket.isClosed()) socket.close(); } catch (IOException e) { System.err.println("资源关闭异常: " + e.getMessage()); } } } }

    26.发送邮件

    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import java.util.Properties;
    import com.sun.mail.util.MailSSLSocketFactory;
    import java.security.GeneralSecurityException;
    /​**​
    * 邮件发送工具类
    * 功能:支持文本邮件、HTML邮件、带附件邮件发送
    * 支持SMTP服务器认证和SSL加密(适用于QQ邮箱等需要SSL的服务器)
    * 依赖:mail.jar 和 activation.jar(需添加到项目构建路径)
    */
    public class EmailSender {
    // 邮件会话对象
    private Session session;
    // 发件人邮箱
    private String from;
    /​**​
    * 构造方法
    * @param smtpHost SMTP服务器地址 如"smtp.qq.com"
    * @param from 发件邮箱地址
    * @param authCode 授权码/密码(QQ邮箱使用授权码)
    * @param sslEnabled 是否启用SSL加密
    */
    public EmailSender(String smtpHost, String from, String authCode, boolean sslEnabled)
    throws GeneralSecurityException {
    this.from = from;
    Properties props = new Properties();
    // 基础配置
    props.setProperty("mail.smtp.host", smtpHost);
    props.put("mail.smtp.auth", "true"); // 启用认证
    // SSL加密配置
    if (sslEnabled) {
    MailSSLSocketFactory sf = new MailSSLSocketFactory();
    sf.setTrustAllHosts(true);
    props.put("mail.smtp.ssl.enable", "true");
    props.put("mail.smtp.ssl.socketFactory", sf);
    props.setProperty("mail.smtp.port", "465"); // QQ邮箱SSL端口
    }
    // 创建认证器
    Authenticator authenticator = new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(from, authCode);
    }
    };
    // 创建邮件会话
    this.session = Session.getInstance(props, authenticator);
    session.setDebug(true); // 启用调试模式(生产环境建议关闭)
    }
    /​**​
    * 发送文本邮件
    * @param to 收件人地址
    * @param subject 邮件主题
    * @param content 文本内容
    */
    public void sendTextEmail(String to, String subject, String content)
    throws MessagingException {
    MimeMessage message = new MimeMessage(session);
    configureBaseMessage(message, to, subject);
    message.setText(content); // 设置纯文本内容
    Transport.send(message);
    }
    /​**​
    * 发送HTML邮件
    * @param to 收件人地址
    * @param subject 邮件主题
    * @param htmlContent HTML内容
    */
    public void sendHtmlEmail(String to, String subject, String htmlContent)
    throws MessagingException {
    MimeMessage message = new MimeMessage(session);
    configureBaseMessage(message, to, subject);
    message.setContent(htmlContent, "text/html;charset=utf-8"); // 设置HTML内容
    Transport.send(message);
    }
    /​**​
    * 发送带附件的邮件
    * @param to 收件人地址
    * @param subject 邮件主题
    * @param textContent 正文内容
    * @param filePath 附件文件路径
    */
    public void sendAttachmentEmail(String to, String subject, String textContent, String filePath)
    throws MessagingException {
    MimeMessage message = new MimeMessage(session);
    configureBaseMessage(message, to, subject);
    // 创建多重消息容器
    MimeMultipart multipart = new MimeMultipart();
    // 添加文本内容
    MimeBodyPart textPart = new MimeBodyPart();
    textPart.setText(textContent);
    multipart.addBodyPart(textPart);
    // 添加附件
    MimeBodyPart attachmentPart = new MimeBodyPart();
    FileDataSource source = new FileDataSource(filePath);
    attachmentPart.setDataHandler(new DataHandler(source));
    attachmentPart.setFileName(source.getName());
    multipart.addBodyPart(attachmentPart);
    // 设置完整消息
    message.setContent(multipart);
    Transport.send(message);
    }
    /​**​
    * 配置基础邮件信息(发件人、收件人、主题)
    */
    private void configureBaseMessage(MimeMessage message, String to, String subject)
    throws MessagingException {
    message.setFrom(new InternetAddress(this.from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    message.setSubject(subject);
    }
    }
    import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import java.util.Properties; import com.sun.mail.util.MailSSLSocketFactory; import java.security.GeneralSecurityException; /​**​ * 邮件发送工具类 * 功能:支持文本邮件、HTML邮件、带附件邮件发送 * 支持SMTP服务器认证和SSL加密(适用于QQ邮箱等需要SSL的服务器) * 依赖:mail.jar 和 activation.jar(需添加到项目构建路径) */ public class EmailSender { // 邮件会话对象 private Session session; // 发件人邮箱 private String from; /​**​ * 构造方法 * @param smtpHost SMTP服务器地址 如"smtp.qq.com" * @param from 发件邮箱地址 * @param authCode 授权码/密码(QQ邮箱使用授权码) * @param sslEnabled 是否启用SSL加密 */ public EmailSender(String smtpHost, String from, String authCode, boolean sslEnabled) throws GeneralSecurityException { this.from = from; Properties props = new Properties(); // 基础配置 props.setProperty("mail.smtp.host", smtpHost); props.put("mail.smtp.auth", "true"); // 启用认证 // SSL加密配置 if (sslEnabled) { MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf); props.setProperty("mail.smtp.port", "465"); // QQ邮箱SSL端口 } // 创建认证器 Authenticator authenticator = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(from, authCode); } }; // 创建邮件会话 this.session = Session.getInstance(props, authenticator); session.setDebug(true); // 启用调试模式(生产环境建议关闭) } /​**​ * 发送文本邮件 * @param to 收件人地址 * @param subject 邮件主题 * @param content 文本内容 */ public void sendTextEmail(String to, String subject, String content) throws MessagingException { MimeMessage message = new MimeMessage(session); configureBaseMessage(message, to, subject); message.setText(content); // 设置纯文本内容 Transport.send(message); } /​**​ * 发送HTML邮件 * @param to 收件人地址 * @param subject 邮件主题 * @param htmlContent HTML内容 */ public void sendHtmlEmail(String to, String subject, String htmlContent) throws MessagingException { MimeMessage message = new MimeMessage(session); configureBaseMessage(message, to, subject); message.setContent(htmlContent, "text/html;charset=utf-8"); // 设置HTML内容 Transport.send(message); } /​**​ * 发送带附件的邮件 * @param to 收件人地址 * @param subject 邮件主题 * @param textContent 正文内容 * @param filePath 附件文件路径 */ public void sendAttachmentEmail(String to, String subject, String textContent, String filePath) throws MessagingException { MimeMessage message = new MimeMessage(session); configureBaseMessage(message, to, subject); // 创建多重消息容器 MimeMultipart multipart = new MimeMultipart(); // 添加文本内容 MimeBodyPart textPart = new MimeBodyPart(); textPart.setText(textContent); multipart.addBodyPart(textPart); // 添加附件 MimeBodyPart attachmentPart = new MimeBodyPart(); FileDataSource source = new FileDataSource(filePath); attachmentPart.setDataHandler(new DataHandler(source)); attachmentPart.setFileName(source.getName()); multipart.addBodyPart(attachmentPart); // 设置完整消息 message.setContent(multipart); Transport.send(message); } /​**​ * 配置基础邮件信息(发件人、收件人、主题) */ private void configureBaseMessage(MimeMessage message, String to, String subject) throws MessagingException { message.setFrom(new InternetAddress(this.from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(subject); } }

    27.多线程编程

    /*​**​
    * Java多线程编程综合演示类
    * 本类演示了三种创建线程的方式及常用线程方法的使用
    */
    public class MultiThreadingDemo {
    /*​**​
    * 一、通过实现Runnable接口创建线程(推荐方式)
    * 优点:
    * 1. 避免Java单继承的限制
    * 2. 便于多个线程共享资源
    * 3. 符合面向接口编程原则
    */
    static class RunnableExample implements Runnable {
    private final String threadName;
    public RunnableExample(String name) {
    this.threadName = name;
    System.out.println("创建Runnable线程: " + threadName);
    }
    @Override
    public void run() {
    System.out.println("运行中: " + threadName);
    try {
    for (int i = 3; i > 0; i--) {
    System.out.println(threadName + " 倒计时: " + i);
    Thread.sleep(500); // 阻塞状态示例
    }
    } catch (InterruptedException e) {
    System.out.println(threadName + " 被中断");
    }
    System.out.println(threadName + " 退出");
    }
    }
    /*​**​
    * 二、通过继承Thread类创建线程
    * 注意:
    * 1. Java不支持多继承,因此限制了扩展能力
    * 2. 直接调用run()只是普通方法,必须通过start()启动线程
    */
    static class ThreadSubclassExample extends Thread {
    public ThreadSubclassExample(String name) {
    super(name);
    System.out.println("创建Thread子类线程: " + getName());
    }
    @Override
    public void run() {
    System.out.println("运行中: " + getName());
    try {
    for (int i = 3; i > 0; i--) {
    System.out.println(getName() + " 倒计时: " + i);
    Thread.sleep(500);
    }
    } catch (InterruptedException e) {
    System.out.println(getName() + " 被中断");
    }
    System.out.println(getName() + " 退出");
    }
    }
    /*​**​
    * 三、通过Callable和Future创建线程(可获取返回值)
    * 特点:
    * 1. 可以返回执行结果
    * 2. 可以抛出异常
    * 3. 配合线程池使用更高效
    */
    static class CallableExample implements java.util.concurrent.Callable<Integer> {
    private final String taskName;
    public CallableExample(String name) {
    this.taskName = name;
    }
    @Override
    public Integer call() throws Exception {
    System.out.println(taskName + " 开始执行");
    int sum = 0;
    for (int i = 1; i <= 3; i++) {
    sum += i;
    System.out.println(taskName + " 计算中: " + i);
    Thread.sleep(500);
    }
    return sum;
    }
    }
    /*​**​
    * 主方法 - 线程调度演示
    */
    public static void main(String[] args) {
    // 演示线程优先级(1-10,默认5)
    final int MIN_PRIORITY = Thread.MIN_PRIORITY; // 1
    final int NORM_PRIORITY = Thread.NORM_PRIORITY;// 5
    final int MAX_PRIORITY = Thread.MAX_PRIORITY; // 10
    // 1. 使用Runnable方式创建线程
    Runnable runnableDemo = new RunnableExample("Runnable线程-1");
    Thread thread1 = new Thread(runnableDemo);
    thread1.setPriority(MAX_PRIORITY); // 设置最高优先级
    // 2. 使用Thread子类方式创建线程
    ThreadSubclassExample thread2 = new ThreadSubclassExample("Thread子类-2");
    thread2.setPriority(MIN_PRIORITY); // 设置最低优先级
    // 3. 使用Callable方式创建线程
    java.util.concurrent.FutureTask<Integer> futureTask =
    new java.util.concurrent.FutureTask<>(new CallableExample("Callable任务"));
    Thread thread3 = new Thread(futureTask);
    // 启动所有线程
    thread1.start();
    thread2.start();
    thread3.start();
    try {
    // 等待thread3执行完成
    thread3.join(2000); // 最多等待2秒
    if (futureTask.isDone()) {
    System.out.println("\nCallable任务结果: " + futureTask.get());
    }
    // 中断演示
    thread1.interrupt();
    // 判断线程状态
    System.out.println("\n线程状态:");
    System.out.println("thread1 存活状态: " + thread1.isAlive());
    System.out.println("thread2 存活状态: " + thread2.isAlive());
    System.out.println("thread3 存活状态: " + thread3.isAlive());
    } catch (Exception e) {
    e.printStackTrace();
    }
    // 守护线程示例(当所有非守护线程结束时自动终止)
    Thread daemonThread = new Thread(() -> {
    while (true) {
    System.out.println("守护线程运行中...");
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    break;
    }
    }
    });
    daemonThread.setDaemon(true);
    daemonThread.start();
    }
    /*​**​
    * 线程生命周期说明:
    * 1. 新建状态(New):线程对象被创建
    * 2. 就绪状态(Runnable):调用start()后进入就绪队列
    * 3. 运行状态(Running):获得CPU时间片开始执行run()
    * 4. 阻塞状态(Blocked):遇到sleep()/wait()/同步锁等情况
    * 5. 终止状态(Terminated):run()执行结束或发生异常
    *
    * 重要方法说明:
    * - start(): 启动线程进入就绪状态
    * - sleep(): 使线程暂停指定时间(不释放锁)
    * - join(): 等待目标线程终止
    * - yield(): 让出当前CPU时间片
    * - interrupt(): 中断线程
    * - setDaemon(): 设置为守护线程
    */
    }
    /*​**​ * Java多线程编程综合演示类 * 本类演示了三种创建线程的方式及常用线程方法的使用 */ public class MultiThreadingDemo { /*​**​ * 一、通过实现Runnable接口创建线程(推荐方式) * 优点: * 1. 避免Java单继承的限制 * 2. 便于多个线程共享资源 * 3. 符合面向接口编程原则 */ static class RunnableExample implements Runnable { private final String threadName; public RunnableExample(String name) { this.threadName = name; System.out.println("创建Runnable线程: " + threadName); } @Override public void run() { System.out.println("运行中: " + threadName); try { for (int i = 3; i > 0; i--) { System.out.println(threadName + " 倒计时: " + i); Thread.sleep(500); // 阻塞状态示例 } } catch (InterruptedException e) { System.out.println(threadName + " 被中断"); } System.out.println(threadName + " 退出"); } } /*​**​ * 二、通过继承Thread类创建线程 * 注意: * 1. Java不支持多继承,因此限制了扩展能力 * 2. 直接调用run()只是普通方法,必须通过start()启动线程 */ static class ThreadSubclassExample extends Thread { public ThreadSubclassExample(String name) { super(name); System.out.println("创建Thread子类线程: " + getName()); } @Override public void run() { System.out.println("运行中: " + getName()); try { for (int i = 3; i > 0; i--) { System.out.println(getName() + " 倒计时: " + i); Thread.sleep(500); } } catch (InterruptedException e) { System.out.println(getName() + " 被中断"); } System.out.println(getName() + " 退出"); } } /*​**​ * 三、通过Callable和Future创建线程(可获取返回值) * 特点: * 1. 可以返回执行结果 * 2. 可以抛出异常 * 3. 配合线程池使用更高效 */ static class CallableExample implements java.util.concurrent.Callable<Integer> { private final String taskName; public CallableExample(String name) { this.taskName = name; } @Override public Integer call() throws Exception { System.out.println(taskName + " 开始执行"); int sum = 0; for (int i = 1; i <= 3; i++) { sum += i; System.out.println(taskName + " 计算中: " + i); Thread.sleep(500); } return sum; } } /*​**​ * 主方法 - 线程调度演示 */ public static void main(String[] args) { // 演示线程优先级(1-10,默认5) final int MIN_PRIORITY = Thread.MIN_PRIORITY; // 1 final int NORM_PRIORITY = Thread.NORM_PRIORITY;// 5 final int MAX_PRIORITY = Thread.MAX_PRIORITY; // 10 // 1. 使用Runnable方式创建线程 Runnable runnableDemo = new RunnableExample("Runnable线程-1"); Thread thread1 = new Thread(runnableDemo); thread1.setPriority(MAX_PRIORITY); // 设置最高优先级 // 2. 使用Thread子类方式创建线程 ThreadSubclassExample thread2 = new ThreadSubclassExample("Thread子类-2"); thread2.setPriority(MIN_PRIORITY); // 设置最低优先级 // 3. 使用Callable方式创建线程 java.util.concurrent.FutureTask<Integer> futureTask = new java.util.concurrent.FutureTask<>(new CallableExample("Callable任务")); Thread thread3 = new Thread(futureTask); // 启动所有线程 thread1.start(); thread2.start(); thread3.start(); try { // 等待thread3执行完成 thread3.join(2000); // 最多等待2秒 if (futureTask.isDone()) { System.out.println("\nCallable任务结果: " + futureTask.get()); } // 中断演示 thread1.interrupt(); // 判断线程状态 System.out.println("\n线程状态:"); System.out.println("thread1 存活状态: " + thread1.isAlive()); System.out.println("thread2 存活状态: " + thread2.isAlive()); System.out.println("thread3 存活状态: " + thread3.isAlive()); } catch (Exception e) { e.printStackTrace(); } // 守护线程示例(当所有非守护线程结束时自动终止) Thread daemonThread = new Thread(() -> { while (true) { System.out.println("守护线程运行中..."); try { Thread.sleep(1000); } catch (InterruptedException e) { break; } } }); daemonThread.setDaemon(true); daemonThread.start(); } /*​**​ * 线程生命周期说明: * 1. 新建状态(New):线程对象被创建 * 2. 就绪状态(Runnable):调用start()后进入就绪队列 * 3. 运行状态(Running):获得CPU时间片开始执行run() * 4. 阻塞状态(Blocked):遇到sleep()/wait()/同步锁等情况 * 5. 终止状态(Terminated):run()执行结束或发生异常 * * 重要方法说明: * - start(): 启动线程进入就绪状态 * - sleep(): 使线程暂停指定时间(不释放锁) * - join(): 等待目标线程终止 * - yield(): 让出当前CPU时间片 * - interrupt(): 中断线程 * - setDaemon(): 设置为守护线程 */ }

    28.基础Applet程序

    /*
    * 示例:基础Applet程序 - HelloWorldApplet
    * 功能:在浏览器中显示"Hello World"文本,演示Applet基础结构
    */
    // 导入必要的包
    import java.applet.Applet; // Applet基类
    import java.awt.Graphics; // 图形绘制类
    /*​**​
    * HelloWorldApplet类继承自java.applet.Applet
    * 这是所有Applet程序的基类,提供生命周期管理和浏览器交互能力
    */
    public class HelloWorldApplet extends Applet {
    /*​**​
    * paint方法(重写自Container类)
    * 作用:执行图形界面绘制,当以下情况会自动调用:
    * 1. Applet首次加载
    * 2.浏览器窗口调整大小
    * 3.repaint()方法被调用时
    /*
    * @param g 图形上下文对象,由浏览器自动创建并传递
    * 包含绘制区域、颜色、字体等图形状态信息
    */
    @Override
    public void paint(Graphics g) {
    /*
    * 使用Graphics对象的drawString方法绘制文本
    * 参数说明:
    * 第1个参数:"Hello World" - 要显示的字符串
    * 第2个参数:25 - 文本基线起始X坐标(像素)
    * 第3个参数:50 - 文本基线起始Y坐标(像素)
    *
    * 坐标系说明:
    * 原点(0,0)位于Applet显示区域的左上角
    * X轴向右延伸,Y轴向下延伸
    */
    g.drawString("Hello World", 25, 50);
    }
    /*
    * Applet生命周期方法说明(未在本示例中重写的方法):
    *
    * 1. init():
    * - 首次加载时调用
    * - 用于初始化变量、加载资源、设置布局等
    * - 在param标签处理完成后执行
    *
    * 2. start():
    * - init()之后自动调用
    * - 每次页面获得焦点时调用(如浏览器切换回页面)
    * - 启动动画、线程等需要持续运行的功能
    *
    * 3. stop():
    * - 当页面失去焦点时调用(如切换浏览器标签)
    * - 暂停消耗资源的操作以节省系统资源
    *
    * 4. destroy():
    * - 浏览器正常关闭时调用
    * - 释放系统资源、保存状态等收尾操作
    */
    }
    /*
    * 配套HTML文件示例(需与.class文件同目录):
    *
    * <html>
    * <head>
    * <title>Hello World Applet Demo</title>
    * </head>
    * <body>
    * <hr>
    * <applet
    * code="HelloWorldApplet.class"
    * width="300"
    * height="100"
    * >
    * 您的浏览器不支持Java Applet,请使用支持Java的浏览器查看
    * </applet>
    * <hr>
    * </body>
    * </html>
    *
    * HTML参数说明:
    * code - 指定主类文件名(需包含.class扩展名)
    * width - Applet显示区域宽度(像素)
    * height - Applet显示区域高度(像素)
    */
    /* * 示例:基础Applet程序 - HelloWorldApplet * 功能:在浏览器中显示"Hello World"文本,演示Applet基础结构 */ // 导入必要的包 import java.applet.Applet; // Applet基类 import java.awt.Graphics; // 图形绘制类 /*​**​ * HelloWorldApplet类继承自java.applet.Applet * 这是所有Applet程序的基类,提供生命周期管理和浏览器交互能力 */ public class HelloWorldApplet extends Applet { /*​**​ * paint方法(重写自Container类) * 作用:执行图形界面绘制,当以下情况会自动调用: * 1. Applet首次加载 * 2.浏览器窗口调整大小 * 3.repaint()方法被调用时 /* * @param g 图形上下文对象,由浏览器自动创建并传递 * 包含绘制区域、颜色、字体等图形状态信息 */ @Override public void paint(Graphics g) { /* * 使用Graphics对象的drawString方法绘制文本 * 参数说明: * 第1个参数:"Hello World" - 要显示的字符串 * 第2个参数:25 - 文本基线起始X坐标(像素) * 第3个参数:50 - 文本基线起始Y坐标(像素) * * 坐标系说明: * 原点(0,0)位于Applet显示区域的左上角 * X轴向右延伸,Y轴向下延伸 */ g.drawString("Hello World", 25, 50); } /* * Applet生命周期方法说明(未在本示例中重写的方法): * * 1. init(): * - 首次加载时调用 * - 用于初始化变量、加载资源、设置布局等 * - 在param标签处理完成后执行 * * 2. start(): * - init()之后自动调用 * - 每次页面获得焦点时调用(如浏览器切换回页面) * - 启动动画、线程等需要持续运行的功能 * * 3. stop(): * - 当页面失去焦点时调用(如切换浏览器标签) * - 暂停消耗资源的操作以节省系统资源 * * 4. destroy(): * - 浏览器正常关闭时调用 * - 释放系统资源、保存状态等收尾操作 */ } /* * 配套HTML文件示例(需与.class文件同目录): * * <html> * <head> * <title>Hello World Applet Demo</title> * </head> * <body> * <hr> * <applet * code="HelloWorldApplet.class" * width="300" * height="100" * > * 您的浏览器不支持Java Applet,请使用支持Java的浏览器查看 * </applet> * <hr> * </body> * </html> * * HTML参数说明: * code - 指定主类文件名(需包含.class扩展名) * width - Applet显示区域宽度(像素) * height - Applet显示区域高度(像素) */

    29.注释

    /​**​
    * <p>项目名称: JavaDocDemo</p>
    * <p>文件名称: Student.java</p>
    * <p>描述: [学生信息模型类,用于管理学生基本数据和操作]</p>
    * <p>创建时间: 2023-10-10</p>
    * <p>公司信息: XXX公司 技术部</p>
    * @author <a href="mailto:author@example.com">张三</a>
    * @version v1.0
    * @update [1][2023-10-11][李四][新增年龄验证逻辑]
    */
    public class Student {
    // 类实现...
    }
    /​**​ 学生姓名 */
    private String name;
    /​**​ 学生年龄(需大于0) */
    private int age;
    /​**​
    * @Title: Student
    * @Description: [构造方法,初始化学生姓名和年龄]
    * @Param: name 学生姓名
    * @Param: age 学生年龄
    * @exception IllegalArgumentException 当年龄小于0时抛出
    * @author <a href="mailto:author@example.com">张三</a>
    * @CreateDate: 2023-10-10 14:30:00
    */
    public Student(String name, int age) {
    if (age < 0) throw new IllegalArgumentException("年龄无效");
    this.name = name;
    this.age = age;
    }
    /​**​
    * @Title: getAge
    * @Description: [获取学生年龄]
    * @Return: int 学生年龄
    * @author <a href="mailto:author@example.com">张三</a>
    * @CreateDate: 2023-10-10 14:30:00
    */
    public int getAge() {
    return age;
    }
    /​**​
    * @Title: setAge
    * @Description: [设置学生年龄,年龄必须大于0]
    * @Param: age 学生年龄
    * @exception IllegalArgumentException 当年龄小于0时抛出
    * @author <a href="mailto:author@example.com">张三</a>
    * @CreateDate: 2023-10-10 14:30:00
    * @update [1][2023-10-11][李四][新增年龄验证逻辑]
    */
    public void setAge(int age) {
    if (age < 0) throw new IllegalArgumentException("年龄无效");
    this.age = age;
    }
    /​**​ * <p>项目名称: JavaDocDemo</p> * <p>文件名称: Student.java</p> * <p>描述: [学生信息模型类,用于管理学生基本数据和操作]</p> * <p>创建时间: 2023-10-10</p> * <p>公司信息: XXX公司 技术部</p> * @author <a href="mailto:author@example.com">张三</a> * @version v1.0 * @update [1][2023-10-11][李四][新增年龄验证逻辑] */ public class Student { // 类实现... } /​**​ 学生姓名 */ private String name; /​**​ 学生年龄(需大于0) */ private int age; /​**​ * @Title: Student * @Description: [构造方法,初始化学生姓名和年龄] * @Param: name 学生姓名 * @Param: age 学生年龄 * @exception IllegalArgumentException 当年龄小于0时抛出 * @author <a href="mailto:author@example.com">张三</a> * @CreateDate: 2023-10-10 14:30:00 */ public Student(String name, int age) { if (age < 0) throw new IllegalArgumentException("年龄无效"); this.name = name; this.age = age; } /​**​ * @Title: getAge * @Description: [获取学生年龄] * @Return: int 学生年龄 * @author <a href="mailto:author@example.com">张三</a> * @CreateDate: 2023-10-10 14:30:00 */ public int getAge() { return age; } /​**​ * @Title: setAge * @Description: [设置学生年龄,年龄必须大于0] * @Param: age 学生年龄 * @exception IllegalArgumentException 当年龄小于0时抛出 * @author <a href="mailto:author@example.com">张三</a> * @CreateDate: 2023-10-10 14:30:00 * @update [1][2023-10-11][李四][新增年龄验证逻辑] */ public void setAge(int age) { if (age < 0) throw new IllegalArgumentException("年龄无效"); this.age = age; }

    30.MySQL 连接工具类实现

    package com.example.dbutils;
    import java.sql.*;
    /​**​
    * MySQL数据库连接工具类
    * 功能说明:
    * 1. 封装MySQL数据库连接、查询、资源释放等操作
    * 2. 支持MySQL 8.0+版本的特殊配置
    * 3. 提供基本查询执行和结果处理功能
    */
    public class MySQLConnector {
    // 数据库连接参数配置
    private static final String DEFAULT_DRIVER = "com.mysql.cj.jdbc.Driver"; // MySQL 8.0+驱动类
    private final String jdbcUrl; // 数据库连接URL
    private final String username; // 数据库用户名
    private final String password; // 数据库密码
    private Connection connection; // 数据库连接对象
    private Statement statement; // SQL执行对象
    private ResultSet resultSet; // 结果集对象
    /​**​
    * 构造方法
    * @param jdbcUrl 数据库连接URL,格式示例:
    * jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=UTC
    * @param username 数据库用户名
    * @param password 数据库密码
    */
    public MySQLConnector(String jdbcUrl, String username, String password) {
    this.jdbcUrl = jdbcUrl;
    this.username = username;
    this.password = password;
    }
    /​**​
    * 初始化数据库连接
    * @throws ClassNotFoundException 驱动类未找到异常
    * @throws SQLException 数据库连接失败异常
    */
    public void connect() throws ClassNotFoundException, SQLException {
    // 1. 加载JDBC驱动(MySQL 8.0+需要显式指定)
    Class.forName(DEFAULT_DRIVER);
    // 2. 建立数据库连接
    System.out.println("正在连接数据库...");
    connection = DriverManager.getConnection(jdbcUrl, username, password);
    // 3. 创建Statement对象(后续执行SQL使用)
    statement = connection.createStatement();
    }
    /​**​
    * 执行查询SQL语句
    * @param sql 需要执行的SELECT语句
    * @return ResultSet 查询结果集
    * @throws SQLException SQL执行异常
    */
    public ResultSet executeQuery(String sql) throws SQLException {
    if (statement == null) {
    throw new SQLException("Statement未初始化,请先调用connect()方法");
    }
    System.out.println("正在执行查询: " + sql);
    resultSet = statement.executeQuery(sql);
    return resultSet;
    }
    /​**​
    * 打印查询结果(示例方法)
    * @throws SQLException 结果集处理异常
    */
    public void printResults() throws SQLException {
    if (resultSet == null) {
    System.out.println("没有可用的结果集");
    return;
    }
    // 获取结果集元数据(用于获取列信息)
    ResultSetMetaData metaData = resultSet.getMetaData();
    int columnCount = metaData.getColumnCount();
    // 遍历结果集
    while (resultSet.next()) {
    for (int i = 1; i <= columnCount; i++) {
    String columnName = metaData.getColumnName(i);
    Object value = resultSet.getObject(i);
    System.out.printf("%s: %s\t", columnName, value);
    }
    System.out.println();
    }
    }
    /​**​
    * 关闭数据库资源
    */
    public void close() {
    try {
    if (resultSet != null) resultSet.close();
    if (statement != null) statement.close();
    if (connection != null) connection.close();
    System.out.println("数据库连接已关闭");
    } catch (SQLException e) {
    System.err.println("关闭连接时发生错误:");
    e.printStackTrace();
    }
    }
    /​**​
    * 使用示例
    */
    public static void main(String[] args) {
    // 配置连接参数(根据实际环境修改)
    String url = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
    String user = "root";
    String pass = "123456";
    MySQLConnector dbConnector = new MySQLConnector(url, user, pass);
    try {
    // 1. 建立连接
    dbConnector.connect();
    // 2. 执行查询
    String query = "SELECT id, name, url FROM websites";
    dbConnector.executeQuery(query);
    // 3. 处理结果(这里演示打印结果)
    System.out.println("查询结果:");
    dbConnector.printResults();
    } catch (ClassNotFoundException e) {
    System.err.println("JDBC驱动加载失败,请检查驱动包是否存在");
    e.printStackTrace();
    } catch (SQLException e) {
    System.err.println("数据库操作异常:");
    e.printStackTrace();
    } finally {
    // 4. 确保关闭连接
    dbConnector.close();
    }
    }
    }
    package com.example.dbutils; import java.sql.*; /​**​ * MySQL数据库连接工具类 * 功能说明: * 1. 封装MySQL数据库连接、查询、资源释放等操作 * 2. 支持MySQL 8.0+版本的特殊配置 * 3. 提供基本查询执行和结果处理功能 */ public class MySQLConnector { // 数据库连接参数配置 private static final String DEFAULT_DRIVER = "com.mysql.cj.jdbc.Driver"; // MySQL 8.0+驱动类 private final String jdbcUrl; // 数据库连接URL private final String username; // 数据库用户名 private final String password; // 数据库密码 private Connection connection; // 数据库连接对象 private Statement statement; // SQL执行对象 private ResultSet resultSet; // 结果集对象 /​**​ * 构造方法 * @param jdbcUrl 数据库连接URL,格式示例: * jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=UTC * @param username 数据库用户名 * @param password 数据库密码 */ public MySQLConnector(String jdbcUrl, String username, String password) { this.jdbcUrl = jdbcUrl; this.username = username; this.password = password; } /​**​ * 初始化数据库连接 * @throws ClassNotFoundException 驱动类未找到异常 * @throws SQLException 数据库连接失败异常 */ public void connect() throws ClassNotFoundException, SQLException { // 1. 加载JDBC驱动(MySQL 8.0+需要显式指定) Class.forName(DEFAULT_DRIVER); // 2. 建立数据库连接 System.out.println("正在连接数据库..."); connection = DriverManager.getConnection(jdbcUrl, username, password); // 3. 创建Statement对象(后续执行SQL使用) statement = connection.createStatement(); } /​**​ * 执行查询SQL语句 * @param sql 需要执行的SELECT语句 * @return ResultSet 查询结果集 * @throws SQLException SQL执行异常 */ public ResultSet executeQuery(String sql) throws SQLException { if (statement == null) { throw new SQLException("Statement未初始化,请先调用connect()方法"); } System.out.println("正在执行查询: " + sql); resultSet = statement.executeQuery(sql); return resultSet; } /​**​ * 打印查询结果(示例方法) * @throws SQLException 结果集处理异常 */ public void printResults() throws SQLException { if (resultSet == null) { System.out.println("没有可用的结果集"); return; } // 获取结果集元数据(用于获取列信息) ResultSetMetaData metaData = resultSet.getMetaData(); int columnCount = metaData.getColumnCount(); // 遍历结果集 while (resultSet.next()) { for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnName(i); Object value = resultSet.getObject(i); System.out.printf("%s: %s\t", columnName, value); } System.out.println(); } } /​**​ * 关闭数据库资源 */ public void close() { try { if (resultSet != null) resultSet.close(); if (statement != null) statement.close(); if (connection != null) connection.close(); System.out.println("数据库连接已关闭"); } catch (SQLException e) { System.err.println("关闭连接时发生错误:"); e.printStackTrace(); } } /​**​ * 使用示例 */ public static void main(String[] args) { // 配置连接参数(根据实际环境修改) String url = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"; String user = "root"; String pass = "123456"; MySQLConnector dbConnector = new MySQLConnector(url, user, pass); try { // 1. 建立连接 dbConnector.connect(); // 2. 执行查询 String query = "SELECT id, name, url FROM websites"; dbConnector.executeQuery(query); // 3. 处理结果(这里演示打印结果) System.out.println("查询结果:"); dbConnector.printResults(); } catch (ClassNotFoundException e) { System.err.println("JDBC驱动加载失败,请检查驱动包是否存在"); e.printStackTrace(); } catch (SQLException e) { System.err.println("数据库操作异常:"); e.printStackTrace(); } finally { // 4. 确保关闭连接 dbConnector.close(); } } }
    © 版权声明

    相关文章

    暂无评论

    none
    暂无评论...