第五周学习任务
教材学习内容总结
7.1内部类
外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。
内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员。
内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。
7.2匿名类
匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,却可以直接用匿名类创建一个对象。
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合创建一个匿名对象传递给方法的参数,类体必须要重写接口中的全部方法。
7.3异常类
Java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try部分,将发生异常后的处理放在catch部分。
一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。注:throw和throws是两个不同的关键字。
7.4断言
断言语句一般用于程序不准备通过捕获异常来处理的错误。
断言语句的两种格式:当booleanExpression的值是true时,程序从断言语句处继续执行;值是false时,程序从断言语句处停止执行。
assert booleanExpression;
assert booleanExpression:messageExpression;
并输出messageExpression表达式的值,提升用户出现了怎样的问题。
当运行应用程序时,默认地关闭断言语句,在调试程序时可以使用-ea启用断言语句,例如: java -ea mainClass
10.1.2目录
调用方法public boolean mkdir()创建一个目录,如果创建成功返回true,否则返回false(如果该目录已经存在将返回false)。
public String [] list()
用字符串形式返回目录下的全部文件;public File [] listFiles()
用File对象形式返回目录下的全部文件。
10.1.3文件的创建与删除
public boolean createNewFile();
文件对象file调用方法; file.delate();
可以删除当前文件。
10.1.4运行可执行文件
Runtime ec;
使用Runtime类声明一个对象
ec=Runtime.getRuntime()
使用getRuntime()静态方法创建这个对象
ec可以调用exec(String command)方法打开本地机器上的可执行文件或执行一个操作。
10.2~10.9
FileInputStream文件字节输入流,FileOutputStream文件字节输出流,
FileReader文件字符输入流,FileWriter文件字符输出流,
BufferedReader缓冲输入流,BufferedWriter缓冲输出流,
RandomAccessFile随机流,
ByteArrayInputStream字节数组输入流,ByteArrayOutputStream字节数组输出流,
DataInputStream数据输入流,DataOutputStream数据输出流,
ObjectInputStream对象输入流,ObjectOutputStream对象输出流。
10.10序列化与对象克隆
使用对象流很容易获取一个序列化对象的克隆,只需将该对象写入对象输出流指向的目的地,然后将该目的地作为一个对象输入流的源,那么该对象输入流从源中读出的对象一定是原对象的一个克隆。
教材中的问题和解决过程
问题1:
P163Java编译器生成的内部类的字节码文件的名字和通常的类不同,内部类对应的字节码文件的名字格式是“外嵌类名&内部类名”。
解答:
起初我不确定是否要把文件名或者主类名改成和“RedCowForm$RedCow”有关的,所以按照平常的做法,把“RedCowForm.java”和“E71”统一放到了“E71”文件夹中,发现可以正常编译运行,然后执行“tree”命令,原来内部类的字节码文件名本身就是“RedCowForm&RedCow.class”。
问题2:
P163内部类可以被修饰为static内部类,static内部类不能操作外嵌类中的实例成员变量。非内部类不可以是static类。
在第四章学到用static修饰的是类方法(静态方法)、类变量(静态变量),不用static修饰的是实例方法、实例变量,那么static类又是什么?
解答:
查找资料知道了:
(1)静态内部类不需要有指向外部类的引用;非静态内部类需要持有对外部类的引用。
(2)静态内部类可以声明普通成员变量和方法;非静态内部类不能声明static成员变量和方法。
(3)静态内部类不能访问外部类的非静态成员,只能访问外部类的静态成员;非静态内部类能够访问外部类的静态和非静态成员。
(4)静态内部类可以单独创建;非静态内部类不能脱离外部类实体被创建,它可以访问外部类的数据和方法,因为它就在外部类里面。
代码托管
上周考试错题总结
- 类是Java程序的基本要素(基本单位),是Java语言中最重要的“数据类型”。
- 写一个方法和C语言中写一个函数完全类似。
- 用一个类创建两个对象obj1和obj2后,二者的引用是不同的。
obj2=obj1;
这样obj2中存放的将是obj1中存放的将是obj1的值,即obj1的引用。因此,obj2所拥有的变量(实体),就和obj1完全一样了。 - 类变量与实例变量的区别:不同对象的实例变量互不相同,所有对象共享类变量;实例变量可以通过对象访问,类变量可以通过对象、类名访问。
- 类方法与实例方法的区别:对象调用实例方法,对象、类名调用类方法;实例方法操作实例、类变量,类方法操作类变量。
- 方法的返回类型和参数的名字不参与比较,即如果两个方法的名字相同,即使返回类型不同,也必须保证参数不同。
- this不能出现在类方法中,这是因为类方法可以通过类名直接调用,这时可能还没有任何对象产生。
- 类中的实例方法总是可以操作该类中的实例变量和类变量,类方法总是可以操作该类中的类变量,与访问限制符没有关系。
- 如果源文件使用import语句引用了另外一个包中的类,并用该类创建了一个对象,那么该类的这个对象将不能访问自己的友好变量和友好方法。
String a="ab"+"cd";
创建了3个对象。解析:“ab”和“cd”分别创建了一个对象,它们通过“+”连接后又创建了一个对象“abcd”,因此一共3个对象。只有使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | |
---|---|---|
目标 | 5000行 | 30篇 |
第五周 | 1051/3198 | 2/10 |