20165202 2017-2018-2 《程序设计与数据结构》第5周学习总结
教材学习内容总结
Ch7
内部类
Java允许类可以有一种成员:内部类。
Java支持在一个类中定义另一个类,这个类称做内部类,而包含内部类的类称为内部类的外嵌类。
Java编译器生成的内部类的字节码文件的名字和通常的类不同,内部类对应的字节码文件的名字格式是 “外嵌类名$内部类名”。
内部类可以被static修饰。
创建对象,static内部类不能操作外嵌类中实例成员变量。
类是一种数据类型,那么static内部类就是外嵌类中的一种静态数据类型,这样一来,程序就可以在其他类中使用static内部类来匿名类
我们可以直接用一个类的子类的类体创建一个子类对象,也就是说创建子类对象时,除了使用父类的构造方法还有类体
,此类体被认为是一个子类去掉类声明后的类体称做匿名类。
Bank的匿名子类: new Bank() { 匿名类的类体 }; 注意:结尾加分号
匿名类可以继承父类的方法也可以重写父类的方法。使用匿名类时,必然是在某个类中匿名类创建对象,因此匿名类一定是内部类。
匿名类可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法。
由于匿名类是一个子类,但没有类名,所以用匿名类创建对象时,要直接使用父类的构造方法。
匿名对象的引用可以传递给一个匹配的参数
异常类:异常是指程序运行时可能出现的一些错误。
try — catch 语句
try {
包含可能发生异常的语句
}catch(ExceptionSubClass1 a) {}catch(ExceptionSubClass1 b) {
}
一旦try部分抛出异常,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,那么try部分将立刻结束执行,转向相应的catch部分。
程序可以将发生异常后的处理放在catch部分。
try — catch语句可以由几个catch组成,分别处理发生的相应异常。
各个catch参数中的异常类都是Exception的某个子类,表示try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可
ch10
输入输出流
File类
1.获取文件本身一些信息,不涉及对文件的读写操作。
2.构造方法 :File(String filename),File(String directoryPath,String filename),File(File dir,String filename)
3.创建目录 :f.mkdir();
4.文件创建 :File f = new File("a.txt");
5.文件删除 :f.delete();
6.运行可执行文件:Runtime ec; ec = Runtime.getRuntime();
文件字节输入流、输出流
1.构造方法 : 输入流--FileInputStream(String name);,输出流--FileOutputStream(String name);
2.使用 : 输入流读取 int read方法,输出流读取 void write方法。
3.关闭 :输入流 in.close();,输出流void.close();文件字符输入输出流
1.构造方法 : 输入流--FileReader(String filename);,输出流--FileWriter(String filename);
2.使用 : 输入流读取 int read方法,输出流读取 void write方法。
3.关闭 :输入流 in.close();,输出流void.close();
注:输出流调用flush()方法,将当前缓冲区内容写到目的地。- 缓冲流
1.文件字符输入流作为BufferedReader流的源,文件字符输出流作为BufferedWriter流的目的地,BufferedReader可以按行读取文件。
2.构造方法 :
BufferedReader(Reader in);, BufferedWriter(Writer out);
随机流
1.既可以读文件,也可以写文件。
2.构造方法 : RandomAccessFile(String name,String mode),RandomAccessFile(File file,String mode)- 数组流、数据流、对象流
- 序列化与对象克隆
- 使用Scanner解析文件
1.使用默认分隔表及解析文件 : 调用next()方法
2.只用正则表达式作为分隔标记解析文件 :使用useDelimiter方法 - 文件对话框
1.showSaveDialog(Componet a);,showOpenDialog(Componet a); 文件锁
教材学习中的问题和解决过程
- 问题1: FileInputStreaml流的read方法与FileReader 流的raed方法有何不同?
- 问题1解决方案:
两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,区别在于
FileInputStream :以字节流方式读取;
FileReader :把文件转换为字符流读入;
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
Reader类及其子类提供的字符流的读取char,inputStream及其子类提供字节流的读取byte,所以FileReader类是将文件按字符流的方式读取,FileInputStream则按字节流的方式读取文件;InputStreamReader可以将读如stream转换成字符流方式,是reader和stream之间的桥梁
代码调试中的问题和解决过程
- 问题1:无法将类中构造器应用到给定类型
- 问题1解决方案:
这是在其他书上看到的一个例题
public Book(String bookName, String author, String publisher, String publishDate)
Book b1 = new Book();
定义时b1中类名个数及名称必须与Book完全一致否则就会出现该问题
代码托管
上周考试错题总结
1.下列说法正确的是
A.如果想在方法中使用被隐藏的成员变量,可以使用关键字super。
B.double类型的成员变量的默认值为0,局部变量没有默认值。
C. 对成员变量的赋值操作只能放在方法中。
D . 面向对象语言中的“类”相当于C语言中的“函数”
解析:A项:应使用关键字this。B项:double类型的成员变量的默认值为0.0。D项:面向对象语言中的“方法”相当于C语言中的“函数”。
2.下列关于UML类图的说法,正确的是
A.抽象类和抽象方法一般用斜体表示。
B.一般情况下,方法的属性用+表示private,用-表示public。
C.在UML 里,一个类的属性能显示它的名字,类型,初始化值。
D.继承用一个带三角的直线表示,由父类指向子类。
解析:B项:用+表示public,用-表示private。D项:由子类指向父类。
3.下列关于创建对象的说法,错误的是
A.创建一个对象包括对象的声明和为对象分配变量两个步骤。
B.使用Student stu;声明对象变量后,stu的内存中还没有任何数据。
C.引用型成员变量的默认初值为0。
D.对象的引用存在堆中,对象的实体(分配给对象的变量)存在栈中。
E.String a="ab"+"cd";创建了3个对象。
解析:4.3.2节。C项:引用型成员变量的默认初值为null。D项:对象的引用存在栈中,对象的实体(分配给对象的变量)存在堆中。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 24/24 | 1/4 | 15/15 |
第二周 | 423/423 | 2/6 | 14/29 |
第三周 | 702/1109 | 1/7 | 16/45 |
第四周 | 918/2027 | 2/9 | 16/61 |
第五周 | 918/2027 | 2/11 | 15/76 |