2026春季学期在新加坡国立大学交换,上了CS2030DE-Programming Methodology II。主要是通过Java将一些软件工程的基础,比如继承,接口,泛型之类的知识。虽然我好像也不会太用到Java(我目前更喜欢Go),但是这也估计是本科四年里难得正儿八经上的编程课。
这个课程笔记主要记录初学Java的一些报错,希望以后能注意到。
1. 关于java.util.ArrayList#
ArrayList<Double> normalized_data = new ArrayList<>(listlen);
for (int i = 0; i < listlen; i++) {
normalized_data.set(i, ...); // 这里报错!
}java开始误以为:new ArrayList<>(listlen) 创建了一个长度为 listlen 的数组。
实际上:括号里的 listlen 只是 初始容量 (Initial Capacity),它告诉 Java “请预留这么多空间”。此时 ArrayList 的 实际大小 (size) 仍然是 0。在 Java 中,你不能 set 一个尚未存在的位置。
解决方法:使用 add()
ArrayList<Double> normalized_data = new ArrayList<>(listlen); // 预留空间是个好习惯
for (int i = 0; i < listlen; i++) {
double value = (data.get(i) - mean) / std;
normalized_data.add(value); // 使用 add() 自动增加 size
}plaintext2. 关于this关键字#
a. 一些bug排查#
1. IntellJ IDE无法提供基本代码提示(像 String, public, List 这种 Java 核心库和关键字)#
这个问题在没网的lab真的很抓狂,经过检查是第三种错误,没有添加Sources Root文件夹。
1. 检查是否开启了 “省电模式” (Power Save Mode)#
这是最常见但也最容易被忽视的原因。如果开启了这个模式,IDE 会关闭所有的自动代码分析和提示以节省电量。
- **检查方法:**看 IDE 窗口右下角是否有一个带着小电池图标的标志,或者直接去菜单栏检查。
- 操作: 点击
File(文件) -> 确认Power Save Mode没有被勾选。
2. 检查 Project SDK (JDK) 是否配置#
如果 IDE 不知道你用的是哪个版本的 Java,它就无法加载 String 这些基础类,自然也就没有提示。
- 操作:
- 按快捷键
Ctrl + Alt + Shift + S(或者点击File->Project Structure)。 - 在左侧选择
Project。 - 查看
SDK这一栏。如果是<No SDK>或者红色的,说明这就因。 - 解决: 下拉选择一个你本地安装的 JDK(Lab 电脑上通常会预装)。如果列表里没有,点击
Add SDK->JDK,然后找到电脑上安装 JDK 的目录(通常在C:\Program Files\Java\...或/usr/lib/jvm/...)。
- 按快捷键
3. 检查 “Sources Root” (源代码根目录)#
这是新手最容易遇到的坑。如果你的 Java 文件所在的文件夹图标是灰色的(普通文件夹),而不是蓝色的(Source Root),IDE 就不会去编译和分析里面的代码。
- 现象: 打开 Java 文件,发现左上角的图标是一个橘红色的 ‘J’ 都在圆圈里,或者文件内容全是白色,关键字没有变色高亮。
- 解决:
- 在左侧项目视图(Project View)中,找到你存放代码的文件夹(比如
src)。 - 右键点击 该文件夹。
- 选择
Mark Directory as(将目录标记为) ->Sources Root。 - 此时文件夹图标应该变蓝,代码提示通常会立即恢复。
- 在左侧项目视图(Project View)中,找到你存放代码的文件夹(比如
- 进阶:
- 如果还是不行,按下快捷键
Ctrl + Alt + Shift + S - 在左侧选择 Modules。
- 选择 新建模块 (New Module)。
- 之后再按照上面标记为源代码根目录。
- 如果还是不行,按下快捷键
b. java语言切换#
Java 安装包本身通常不分“中文版”或“英文版”。Java 虚拟机 (JVM) 会自动读取你的操作系统语言设置(Locale)。如果你的 Windows 是中文环境,Java 输出(如报错信息、java -version 信息)通常会自动显示为中文。
永久切换:
[System.Environment]::SetEnvironmentVariable("JAVA_TOOL_OPTIONS", "-Duser.language=en -Duser.country=US", "User")powershell当前会话临时切换:
$env:JAVA_TOOL_OPTIONS = "-Duser.language=en -Duser.country=US"powershell恢复默认:
[System.Environment]::SetEnvironmentVariable("JAVA_TOOL_OPTIONS", $null, "User")powershell指定中文:
[System.Environment]::SetEnvironmentVariable("JAVA_TOOL_OPTIONS", "-Duser.language=zh -Duser.country=CN", "User")powershell