You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
App 52fbc958b3 w4 2 weeks ago
..
AI.txt w4 2 weeks ago
Circle.class w4 2 weeks ago
Circle.java w4 2 weeks ago
Main.class w4 2 weeks ago
Main.java w4 2 weeks ago
QQ20260326-202006.png w4 2 weeks ago
README.md w4 2 weeks ago
Rectangle.class w4 2 weeks ago
Rectangle.java w4 2 weeks ago
ShapeUtil.class w4 2 weeks ago
ShapeUtil.java w4 2 weeks ago
Triangle.class w4 2 weeks ago
Triangle.java w4 2 weeks ago
class_diagram_matplotlib.png w4 2 weeks ago
shape.class w4 2 weeks ago
shape.java w4 2 weeks ago

README.md

Lab 项目启动故障诊断与修复技术报告

项目路径:D:\VisualStudioProgram\VSCodePrograms\JavaProjects\Lab
运行环境:Windows + PowerShell 5 + JDK 25.0.2

目标与验收标准

  • 诊断并修复导致项目无法编译/运行的全部错误
  • 确保在 Lab 目录下可以“一次性”完成编译并启动
  • 验证既有图形面积计算与打印功能可正常工作,并保留日志证据

过程记录(按时间顺序)

1)首次复现:编译失败(类名与文件名不一致)

报错原始输出(完整)

执行命令(在 D:\VisualStudioProgram\VSCodePrograms\JavaProjects 目录下):

javac -encoding UTF-8 Lab\*.java

编译器输出:

Lab\Main.java:3: 错误: 类 main 是公共的, 应在名为 main.java 的文件中声明
public class main {
       ^
1 个错误

根本原因分析

  • Main.java 文件内声明的是 public class main(类名为小写 main)。
  • Java 规则:public 顶级类名必须与文件名完全一致(区分大小写)。因此 Main.java 只能声明 public class Main

修复步骤

  • Main.java 中的 public class main 更正为 public class Main

验证方式与结果

  • 重新执行 javac 编译,返回码为 0(编译通过)。

2)启动方式问题:包声明与目录作为“项目根”不匹配(导致直接在 Lab 目录下不便运行)

现象说明

源码最初包含 package Lab;。当用户将 Lab 目录直接作为工作目录(也就是把 Lab 当作 classpath 根)时:

  • package Lab; 期望类文件位于 ...\Lab\Lab\ 下(相对 classpath 根多一层 Lab 目录)。
  • 但实际源码文件就位于 ...\Lab\,导致“在 Lab 目录直接编译/运行”的体验与包结构冲突。

根本原因分析

  • “包名/目录层级/运行时 classpath 根”三者不一致。
  • 本项目为单文件夹小练习,更符合“默认包 + 在 Lab 目录直接 javac/java”的使用方式。

修复步骤

  • 从以下源码文件中移除 package Lab; 声明,使其落在默认包:
    • Main.java
    • shape.java
    • Circle.java
    • Rectangle.java
    • Triangle.java
    • ShapeUtil.java
  • 调整 Main.java 以调用现有功能(创建图形并打印面积),用于功能验证。

验证方式与结果

D:\VisualStudioProgram\VSCodePrograms\JavaProjects\Lab 目录下执行:

javac -encoding UTF-8 *.java
java Main

程序成功启动并输出面积信息(见“最终成功证据”)。


3)验证阶段二次报错:PowerShell 5 不支持 && 作为语句分隔符

报错原始输出(完整)

执行命令(在 Lab 目录下):

javac -encoding UTF-8 *.java && java Main

PowerShell 输出:

所在位置 行:1 字符: 30
+ javac -encoding UTF-8 *.java && java Main ; exit $LASTEXITCODE
+                              ~~
标记“&&”不是此版本中的有效语句分隔符。
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : InvalidEndOfLine

根本原因分析

  • Windows PowerShell 5 不支持 && 作为命令连接符(该特性在 PowerShell 7 才提供)。

修复步骤

  • 将“编译成功才运行”的命令改为 PowerShell 5 兼容写法:
javac -encoding UTF-8 *.java; if ($LASTEXITCODE -eq 0) { java Main }

验证方式与结果

  • 以上命令在 PowerShell 5 下成功执行并得到正确输出(见“最终成功证据”)。

最终成功证据(日志)

JDK 版本:

javac 25.0.2

Lab 目录下编译并启动:

javac -encoding UTF-8 *.java; if ($LASTEXITCODE -eq 0) { java Main }
The area of the shape is: 12.566370614359172
The area of the shape is: 12.0
The area of the shape is: 25.0

预防同类问题的改进建议

  • 规范类/文件命名:任何 public class X 必须位于 X.java 中,并保持大小写一致。
  • 明确“项目根”概念:若使用 package,应保证源码目录层级与包名一致;否则采用默认包并在同一目录下编译运行。
  • 统一运行脚本:在 Windows 环境建议提供 PowerShell 5 兼容命令,或明确要求 PowerShell 7+ 才能使用 &&