Java课程课后作业合集报告

概述

本文整合课堂6项Java课后作业,包含IO流文件复制、匿名内部类耗时统计、枚举三大业务场景、素数判断、形式化方法与UML阅读笔记,每项附带完整可运行代码+原理文字分析,记录课堂练习,便于后续复习查阅。

一、作业1:匿名内部类——统计方法执行耗时(homework1)

需求说明

利用匿名内部类封装待执行业务逻辑,统一实现方法运行毫秒/秒数统计,体现匿名内部类「无需单独定义子类、快速重写接口方法」的典型使用场景。

完整代码

// 定义函数式接口,承载待执行任务
interface Task {
    void run();
}

public class TimeCountDemo {
    // 统一耗时统计模板方法
    public static void countTime(Task task) {
        long start = System.currentTimeMillis();
        // 执行传入的业务逻辑(匿名内部类实现)
        task.run();
        long end = System.currentTimeMillis();
        double sec = (end - start) / 1000.0;
        System.out.println("方法执行总耗时:" + sec + " 秒");
    }

    public static void main(String[] args) {
        // 匿名内部类重写run方法,传入自定义业务
        countTime(new Task() {
            @Override
            public void run() {
                // 模拟耗时业务:循环计算
                long sum = 0;
                for (long i = 1; i <= 100000000; i++) {
                    sum += i;
                }
                System.out.println("循环计算完成,总和:" + sum);
            }
        });
    }
}

代码分析

  1. 定义Task函数式接口,作为统一任务执行规范;
  2. countTime为通用耗时工具方法,固定记录起止时间,抽取公共逻辑,减少重复代码;
  3. main中使用匿名内部类实现接口,不用新建独立.java子类文件,适合一次性临时业务逻辑;
  4. 适用场景:工具类计时、回调逻辑、一次性执行任务,是匿名内部类最经典课堂案例。

二、作业2:IO流四类文件复制实现(文本/字符缓冲/字节/字节缓冲)

需求说明

分别实现4种文件复制方式,区分字符流(仅文本)、字节流(万能所有文件)、缓冲流(带缓冲区,读写性能最优)的差异。

完整代码

import java.io.*;

public class FileCopyDemo {
    // 1. 基础字符文件复制(仅txt文本,无缓冲)
    public static void copyByReaderWriter(String src, String dest) throws IOException {
        FileReader fr = new FileReader(src);
        FileWriter fw = new FileWriter(dest);
        int ch;
        while ((ch = fr.read()) != -1) {
            fw.write(ch);
        }
        fw.close();
        fr.close();
    }

    // 2. 字符缓冲流复制(课堂最常用,文本高性能)
    public static void copyByBufferedChar(String src, String dest) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(src));
        BufferedWriter bw = new BufferedWriter(new FileWriter(dest));
        String line;
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.newLine(); // 还原换行格式
        }
        bw.close();
        br.close();
    }

    // 3. 基础字节流复制(万能,支持图片/视频/压缩包)
    public static void copyByStream(String src, String dest) throws IOException {
        FileInputStream fis = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(dest);
        int b;
        while ((b = fis.read()) != -1) {
            fos.write(b);
        }
        fos.close();
        fis.close();
    }

    // 4. 字节缓冲流复制(万能复制,性能最优,工程推荐)
    public static void copyByBufferedByte(String src, String dest) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest));
        byte[] buf = new byte[1024]; // 自定义缓冲区数组
        int len;
        while ((len = bis.read(buf)) != -1) {
            bos.write(buf, 0, len);
        }
        bos.flush(); // 强制刷出缓冲区残留数据
        bos.close();
        bis.close();
    }

    public static void main(String[] args) throws IOException {
        String source = "test.txt";
        String target = "copy_test.txt";
        // 切换不同方法测试
        copyByBufferedChar(source, target);
        System.out.println("文件复制完成");
    }
}

代码分析

  1. 字符流(Reader/Writer):仅处理纯文本,无法复制图片、exe等二进制文件;基础单字符读写速度慢,Buffered缓冲字符流按行读取,课堂处理作业文档首选;
  2. 字节流(InputStream/OutputStream):底层二进制读写,万能适配全部文件类型;基础单字节循环效率极低;
  3. 缓冲流Buffered:内置缓冲区,减少磁盘IO交互,读写速度大幅提升,工程文件复制标准方案;
  4. 核心选择规则:文本文件优先字符缓冲流,多媒体/程序二进制文件必须字节缓冲流。

三、作业3:枚举类型三大应用场景实现

枚举课堂给出3个核心业务场景:状态/类型定义、策略模式替换if/else、后端统一返回码,分别实现案例代码。

场景1:状态/类型定义(订单状态,最常用)

// 例1:订单状态枚举
enum OrderStatus {
    UNPAID("未支付"), PAID("已付款"), DELIVERED("已发货"), FINISH("已完成");
    private String desc;
    OrderStatus(String desc) { this.desc = desc; }
    public String getDesc() { return desc; }
}

场景2:策略模式,替代大量if/else(支付方式)

// 例2:策略枚举,消除多层if判断
interface PayStrategy {
    void pay(double money);
}
enum PayType implements PayStrategy {
    WECHAT {
        @Override
        public void pay(double money) {
            System.out.println("微信支付:" + money + "元");
        }
    },
    ALIPAY {
        @Override
        public void pay(double money) {
            System.out.println("支付宝支付:" + money + "元");
        }
    };
}
// 测试
class EnumTest {
    public static void main(String[] args) {
        PayType.ALIPAY.pay(99.9);
    }
}

场景3:后端统一返回码(接口标准返回枚举)

// 例3:后端项目标准响应码
enum ResultCode {
    SUCCESS(200, "操作成功"),
    FAIL(500, "服务器异常"),
    PARAM_ERROR(400, "参数非法");
    private int code;
    private String msg;
    ResultCode(int c, String m) {
        code = c; msg = m;
    }
    // getter方法
    public int getCode() { return code; }
    public String getMsg() { return msg; }
}

代码分析

  1. 场景1:固定有限状态(订单、用户权限、消息类型),枚举替代魔法数字,可读性强、编译期校验,避免非法数值;
  2. 场景2:枚举实现接口,每个枚举常量独立重写业务方法,彻底消除臃肿if/else分支,符合开闭原则;
  3. 场景3:后端开发标配,统一接口返回状态码,团队开发规范统一,前端解析返回结果更便捷。

四、作业4:prime numbers 素数判断程序

完整代码

public class PrimeDemo {
    // 判断数字是否为素数
    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        if (num == 2) return true;
        if (num % 2 == 0) return false;
        // 优化:遍历到平方根即可,减少循环次数
        for (int i = 3; i <= Math.sqrt(num); i += 2) {
            if (num % i == 0) return false;
        }
        return true;
    }

    // 输出1~max范围内所有素数
    public static void printPrime(int max) {
        System.out.println("1-" + max + "范围内素数:");
        for (int i = 2; i <= max; i++) {
            if (isPrime(i)) System.out.print(i + " ");
        }
    }

    public static void main(String[] args) {
        printPrime(100);
    }
}

代码分析

  1. 素数定义:大于1,仅能被1和自身整除的自然数;
  2. 性能优化:偶数直接过滤,循环上限取数字平方根,大幅减少循环次数,提升运行效率;
  3. 单一职责拆分:isPrime负责单一数字判断,printPrime负责批量输出,方法复用性更强。

五、作业5:形式化方法阅读 + 《大象——thinking in UML》读书笔记

1. 什么是形式化方法

形式化方法是一套基于数学符号、严格逻辑推理的软件开发规范,用精准、无歧义的形式语言描述软件需求、架构与程序行为,和模糊、多义的自然文字描述形成对比。

  • 核心作用:消除需求漏洞、提前验证程序逻辑正确性,多用于高可靠场景(航空、嵌入式、操作系统、金融核心系统);
  • 三大分类:形式化规格说明、形式化验证、形式化开发。

2. 《大象——Thinking in UML》阅读总结

  1. 书籍定位:零基础友好的UML建模入门书籍,依托完整项目案例讲解统一建模语言;
  2. 核心知识点:用例图(需求梳理)、类图(Java类/枚举/接口结构)、时序图(方法调用执行流程);
  3. 和本次Java课程的关联价值:
    • 类图可以直观对应Java类、内部类、枚举、接口继承实现关系;
    • 时序图可梳理IO流读写、匿名内部类回调等代码执行流程;
  4. 学习建议:写Java项目前先用UML类图画清整体结构,降低后期代码重构成本,养成先设计后编码的开发思维。

六、作业整体总结

  1. 基础语法层:素数程序巩固循环、分支、方法封装基础语法;
  2. 面向对象层:匿名内部类、枚举,掌握Java特色封装、回调、多分支优化方案;
  3. IO操作层:区分字符/字节/缓冲流,掌握不同场景下文件读写工程标准实现;
  4. 软件工程层:形式化方法与UML建模,建立标准化软件开发设计思想;
    全部代码均可独立运行,覆盖课堂IO、内部类、枚举、基础算法核心知识点,适合长期归档复习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值