《Java程序设计》第 6 周学习总结
目录
教材学习内容总结
- 第七章要点:
- 要点1:内部类;
- 要点2:匿名类:和子类有关、和接口有关;
- 要点3:异常类:try-catch 语句、自定义异常类;
- 要点4:断言、应用举例。
- 第十章要点:
- 要点1:File 类;
- 要点2:文件字节输入流、输出流、;
- 要点3:缓冲流、随机流、数组流、数据流、对象流;
- 要点4:序列化与对象克隆;
- 要点5:使用 Scanner 解析文件;
- 要点6:文件对话框;
- 要点7:带进度条的输入流;
- 要点8:文件锁、应用举例。
代码调试中的问题和解决过程
1. 编译运行时,跳过 Scanner.nextLine() 语句。
编译如下代码
复制import java.util.Scanner;
public class test {
public static void main(String args[]) {
System.out.println("Input the number of books:");
Scanner reader = new Scanner(System.in);
int num = reader.nextInt();
System.out.println("Input the book "+num+" information of bookName");
String name = reader.nextLine();
System.out.println("Input the book "+num+" information of bookWriter");
String writer = reader.nextLine();
}
}
结果如下:
复制Input the number of books:
1
Input the book 1 information of bookName
Input the book 1 information of bookWriter
- 问题1解决方案:
原因是:nextInt()结束的回车字符被nextLine()读取了,导致接下来的 name 无法录入,跳过一行,但下面的 writer 却能正常读写。
在第 5 行和第 6 行代码之间添加一条语句,即可正常读写:
复制reader.nextLine();
作用:吸收上个输入最后的回车字符(如下一个问题的 6、7 行代码)。
2. 提示 NullPointerException 错误。
代码如下:
复制import java.util.Scanner;
class Book {
String bookName;
public void setBookName(String bookName) {
this.bookName = bookName;
}
}
public class test {
public static void main(String args[]) {
System.out.println("Input the number of books:");
Scanner reader = new Scanner(System.in);
int num = reader.nextInt();
reader.nextLine();
Book book[] = new Book[3]; //[代码]
System.out.println("Input the book "+num+" information of bookName");
String name = reader.nextLine();
book[0].setBookName(name);
}
}
结果报错如下:
复制Input the number of books:
1
Input the information of bookName
Exception in thread "main" java.lang.NullPointerException
at Bookshelf.main(test.java:19)
Process finished with exit code 1
-
问题分析:
上述代码看似没有什么问题,却提示 NullPointerException 。空指针异常,也就是说,book[0], book[1], book[2]都是没有被初始化的。
Java在数组的定义中并不为数组元素分配内存,因此[]中不需指明数组长度,而且对于如上定义的数组是不能引用的,必须经过初始化才可以引用。
第 16 行代码Book book[] = new Book[3];
实际上并没有为数组元素分配内存。 -
问题2解决方案:
为空指针分配内存:
复制//在第 16 行和第 17 行间,添加如下代码
for (int i=0; i<num; i++) {
book[i] = new Book();
}
[代码托管]
- 代码提交过程截图:


学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 322/322 | 1/1 | 23/23 | |
第二周 | 520/842 | 3/4 | 25/48 | |
第三周 | 458/1300 | 2/6 | 16/64 | |
第三周 | 914/2214 | 2/8 | 21/85 | |
第四周 | 685/2899 | 1/9 | 18/103 | |
第五周 | 663/3562 | 2/11 | 20/103 |
-
计划学习时间:20小时
-
实际学习时间:20小时
参考资料
作者:Yogile
出处:https://www.cnblogs.com/Yogile/p/10665094.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构