20165318 2017-2018-2 《Java程序设计》第五周学习总结
学习总结
- 在使用IDEA时,由于我之前编写的代码都是使用GBK编码,使用IDEA打开时,由于IDEA默认为UTF-8,代码会出现中文乱码,这时候可以使用如下方法,将IDEA的编码改成GBK
教材内容总结:
第七章 内部类与异常类
一、 内部类与匿名类
- 内部类:
1.内部类可以使用外嵌类的成员变量和方法。
2.类体中不可以声明类变量和类方法。
3.内部类仅供外嵌类使用。
4.类声明可以使用static修饰,static内部类不能操作外嵌类中的实例成员变量。
注:非内部类不可以是static类。
- 匿名类:
1.匿名类一定是内部类。
2.可以使用外嵌类的成员变量和方法。
3.不能声明类变量和类方法。
4.必须使用父类的构造方法。
5.可以直接使用父类的方法,也可重写。
用bank的一个子类(匿名类)创建对象
new Bank() { //使用父类的构造方法
匿名类的类体
}; //**注意:结尾加分号**
与接口有关的匿名类
new Computable() {
实现接口的匿名类的类体 //**类体必须要重写接口中的全部方法**
};
二、异常类
- 异常是指程序运行时可能出现的一些错误。
public static int parseInt(String s)
可以将“数字”格式的字符串转化为 int 型数据。try - catch
语句`
try { 包含可能发生异常的语句 } catch(ExceptionSubClass1 a) { ... } catch(ExceptionSubClass1 b) { ... }
- 一旦
try
部分抛出异常,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,那么try
部分将立刻结束执行,转向相应的catch
部分。程序可以将发生异常后的处理放在catch
部分。 try - catch
语句可以由几个catch
组成,分别处理发生的相应异常。- 各个
catch
参数中的异常类都是Exception
的某个子类,表示try
部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch
即可。 - 自定义异常类的步骤:
1.定义自己的异常类(
Exception
的子类);2.在可能出现异常的方法中,声明时使用throws关键字声明要产生的若干个异常,并在方法体中具体给出产生异常的操作,用throw抛出异常对象。
3.在程序中使用
try-catch
块语句调用可能发生异常的方法。 finally
语句- 如果在
try-catch
语句中执行了return
语句,那么finally
子语句依旧会被执行。 try-catch
语句中执行了程序退出代码,执行System.exit(0)
;那么不执行finally
子语句。
- 如果在
三、断言
- 程序正式运行时,断言语句自动关闭,可以使用
java -ea
文件名; - 程序调试阶段,断言语句发挥正常作用;
- 断言语句的两种格式
assert bolleanException
:当bolleanException
的值是true时,程序从断言语句处继续执行;值是false时,程序从断言语句处停止执行。assert blooeanException:messageException
:当bolleanException
的值是true时,程序从断言语句处继续执行;值是false时,程序从断言语句处停止执行,并输出messageException
表达式的值。
第十章 输入、输出流
- 输入流的指向称为它的源,程序通过输入流读取源中的数据
- 输出流的指向称为它的目的地,程序通过输出流把数据传送到目的地
一、File类
- File类的对象主要用来获取文件本身一些信息,不涉及对文件的读写操作。
- 构造方法 :
File(String filename)
File(String directoryPath,String filename)
File(File dir,String filename)
- 文件的属性:常使用File类的一些方法获取文件本身的一些信息。
- 创建目录:File对象调用方法
public boolean mkdir()
创建一个目录,成功返回true,否则(该目录已存在)返回false。 - 运行可执行文件:
Runtime ec = Runtime.getRuntime();
。 - 使用输入流步骤:
1.设定输入流的源;
2.创建指向源的输入流;
3.让输入流读取源中的数据;
4.关闭输入流;
注:程序必须在try-catch
语句中的try
块部分创建输入流,在catch
块部分检测并处理这个异常。
- 输出流步骤与输入流类似
- 读取 :输入流读取
int read
方法,输出流读取void write
方法。 - 关闭流:输入流
in.close();
,输出流void.close();
。 - 缓冲流
1.BufferedReader
和BufferedWriter
类创建的对象称为缓冲输入、输出流,二者增强了读写文件的能力。
2.BufferedReader
流和BufferedWriter
流,二者的源和目的地必须是字符输入流和输出流。
3.构造方法BufferedReader(Reader in);``BufferedWriter(Writer out);
。
- 随机流
1.
RandomAccessFile
类创建的流称为随机流,可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。2.
RandomAccessFile
流指向文件时,不刷新文件。 - 数组流
- 数据流
- 对象流
- 使用Scanner类和正则表达式来解析文件的特点是以时间换取空间,即解析的速度相对比较慢,但节省内存
教材中问题与解决过程
- 问题1:为什么要使用匿名类:
- 解决过程:如果一个方法的参数类型是A类,用户希望向方法传递A的子类对象,但系统没有提供符合要求的子类,那么用户在编写代码时就可以考虑使用匿名类。
代码调试过程中的问题与解决过程
- 问题1:运行Example7_2时报错
- 解决过程:检查后发现,使用输出方法时,习惯性的使用了
System.out.println
而正确的代码是System.out.printf
。 - 问题2:运行Example7_7时出现以下问题
- 解决过程:仔细检查代码后发现,在编码时多写了一个“}”,导致主类没办法被识别,使用IDEA中的代码格式化也没有发现错误。
- 问题3:自己编写课后习题第四大题,使用断言,本应该当输入数字大于100或小于0时,终止执行,但实际运行却出现如下错误:
- 解决过程:重新学习断言相关知识点时发现,当断言判断条件为true时,程序继续执行,为false时,才会停止执行。而我第一遍看的时候没有记清楚,刚好将判断条件写反了,导致程序不能运行,改正过后,就可以正常运行了。结果如下图:
- 问题4:调试Example10_2时,运行后没有输出结果。
- 解决过程:看书中相关知识后,发现我输入流打开的目录中没有
.java
类型的文件,在这个目录中添加.java
类型的文件,就可以正常运行了。 - 问题5:调试Example10_4时,运行提示以下错误:
- 解决过程:问题在于打开文件的路径不正确,将
Example10_4.java
改为src/Example10_4.java
就可以正常运行了。 - 问题6:运行Example10_17时,对话框不会操作问题,实际输出的对话框与书上的截图有差距
- 解决过程:需要点击左上角的“文件”下拉菜单的“打开”,才能得到书上截图的效果。同时我发现如果把 “楷体_gb2312” 改为 “UTF-8” 不会影响窗口的操作性。
码云链接
https://gitee.com/besti-is-java-2018/20165318_sun_xiaoxuan
代码截图
原文地址:https://www.cnblogs.com/sunxiaoxuan/p/8679423.html