20175209 《Java程序设计》第六周学习总结

时间:2021-12-20 15:49:46

20175209 《Java程序设计》第六周学习总结

一、教材知识点总结

第七章 内部类与异常类

1.内部类

  • 定义:在一个类中定义的另一个类称作内部类,包含内部类的类成为内部类的外嵌类。
  • 内部类与外嵌类关系:

    • 内部类的外嵌类的成员变量在内部类中依然有效,内部类方法可以调用外嵌类方法
    • 内部类的类体中不可以声明类变量和类方法,外嵌类类体中可以用内部类声明变量作为成员
    • 内部类仅供它的外嵌类使用,当用static修饰内部类时,内部类可以被其他类调用

2.匿名类

  • 和子类相关

    • 匿名类时是一个子类在创建对象时去掉类声明后的类体

      • 匿名类中的类体不可以声明static成员变量和static成员方法
      • 匿名类是内部类,在创建对象时,要使用父类的 构造方法
  • 和接口相关

    • 匿名类是实现了接口的类去掉类声明后的类体

      • 匿名类必须重写接口中的全部方法

3.异常类

  • try-catch语句
    格式
try {
    包含可能发生异常的语句(发生异常后的语句都不会被执行)
}
catch(ExceptionSubClass1  e) {
    ....
}
catch(ExceptionSubClass2  e) {
    ....
}
  • 自定义语句

    • 在声明方法时使用throws关键字声明要产生的若干个异常
    • try语句中用关键字throw抛出具体的异常
    • catch捕获throw关键字抛出的异常对象

4.断言

  • 关键字 assert

    • 格式
assert booleanExpression;
assert booleanExpression:messageException(booleanExpression值为true继续执行;为false给出问题信息
  • IDEA中开启和关闭断言的方法:Run->Edit Configurations->VM options中输入:-ea ->Apply

#### 第十章 输入、输出流

  • 输入流:将从外部的存储媒介或其他程序中读入所需要的数据,指向称为他的源
  • 输出流:将处理的结果写入到永久的存储媒介中或传送给其他的应用程序,指向称为他的目的地

1.File类

  • 构造方法
    • File(String filename(文件名));
    • File(String directotyPath(文件路径),String filename);
    • File(File dir(目录),String filename);
  • 目录
    • public boolean mkdir()创建目录
    • public String[] list(FilenameFilter obj)用字符串形式返回目录下指定类型的所有文件
    • public File [] listFiles(FilenameFilter obj)用File对象形式返回目录下的指定类型所有文件
  • 文件创建与删除

    • 当没有指定文件时,调用方法public boolean createNewFile()建立相应文件
    • file.delete();删除当前文件
  • 运行可执行文件

    • Runtime ec = Runtime.getRuntime();创建对象

2.文件字节输入流

  • 基本步骤

    • 设定输入流的源
    • 创建指向源的输入流
    • 让输入流读取源中的数据
    • 关闭输入流
  • 构造方法

FileInputStream(String name);
FileInputStream(File file);

3.文件字节输出流

  • 基本步骤

    • 给出输出流的目的地
    • 创建指向目的地的输出流
    • 让输出流吧数据写入目的地
    • 关闭输出流
  • 构造方法

FileOutputStream(String name);
FileOutputStream(File file);

4.文件字符输入输出流
构造方法

FileReader(Srting Filename); FileReader(File Filename); 
FileWriter(Srting Filename); FileWriter(File Filename);
FileWriter(Srting Filename,boolean append); FileWriter(File Filename,,boolean append);

5.缓冲流
BufferedReader和BufferedWriter创建的对象成为缓冲输入输出流,增强文件读写能力,二者的源和目的地必须是字符输入和输出流

  • 对象的创建
FileReader inOne = new FileReader("Wenjian.txt");
BufferedReader inTwo = BufferedReader(inOne);
FileWriter tofile = new FileWriter("Wenjian.txt");
BufferedWriter out = BufferedWriter(tofile);

6.随机流
RandomAccessFile类创建的对象称为随机流,该类既不是InputStream类的子类,也不是OutputStream的子类

  • 替换或尾加文件内容

  • 构造方法

RandomAccessFile(String name,String mode)
RandomAccessFile(File file,String mode)
  • seek(long a)方法
    • 定位读写位置距离文件开头的字节个数

7.数组流

  • 字节数组流
ByteArrayInputStream(bytep[] buf);
ByteArrayInputStream(bytep[] buf,in offset(开始取得位置),int length(字节长度));
ByteArrayOutputStream();      (默认大小32字节)
ByteArrayOutputStream(int size(初始大小));   
  • 字符数组流

    • CharArrayReader和CharArrayWriter

8.数据流

  • 构造方法
DataInputStream(InputStream in)   创建的数据输入流指向由参数in指向的底层输入流
DataOutputStream(OutputStream out)   创建的数据输出流指向由参数out指向的底层输出流
  • 允许按照和机器无关的风格读取Java原式数据

9.对象流

  • 输入流对象的创建
FIleOutputStream filOut = new FIleOutputStream("wenjian.txt");
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
  • 输出流对象的创建
FIleInputStream filIn = new FIleInputStream("wenjian.txt");
ObjectInputStream objectIn = new ObjectInputStream(fileIn);
  • 使用对象流时需要保证对象序列化,写入文件时需要保证对象的成员对象也是序列化的

10.序列化与对象克隆

  • 使用对象流获取序列化对象的克隆

11.使用Scanner解析文件

  • 默认分隔符:以空格作为分隔标记
File file = new File("wenjian.java");
Scanner sc = new Scanner(file);
  • 正则表达式作文分隔
File file = new File("wenjian.java");
Scanner sc = new Scanner(file);
sc.useDelimter(正则表达式);

12.文件对话框

  • 类JFileChooser创建文件对话框

13.带进度条的输入流

  • 输入流类ProgressMonitorInputStream

14.文件锁

  • 使用RandomAccessFile流建立指向文件的流对象
  • 流调用方法getChannel()获得连接到底层文件的FileChannel对象
  • 信道调用tryLock()或lock()方法获得FileLock对象
  • 读写是用release()释放文件锁

教材中问题和解决方法

问题1:在IDEA中运行Example10_4代码时总是提示找不到相应文件,尝试在终端下运行仍然出现相同错误

20175209 《Java程序设计》第六周学习总结

问题1解决办法:IDEA在运行时会自动把".class"文件放到out目录下,因此在运行时会提示找不到文件,之后还有一些例子中的代码也是同样的情况。在反复测试后,在外部建立一个文件将源文件和字节码文件放在一个文件夹中,就可以显示相应内容了

20175209 《Java程序设计》第六周学习总结

问题2:第十章中给出了很多输入输出类,首先对于这些类不是很了解,此外很多类中的方法都看不懂
问题2解决方法:对于输入输出类的具体作用和用法在观看了视频的讲解后有了更加深入的了解,虽然现在还有一些晕乎乎的,但是比刚刚学习的时候思路清晰了很多,对于流中类的具体功能,花费了大量时间查看API文档后已经了解了他们的作用

问题3:为什么书上的代码中自动产生的文件和运行过程中需要用到的文件都需要放在或者产生在仓库的根目录下(和src文件夹同级的目录下)
问题3解决办法:......虽然现在可以 让代码正常运行,但依旧暂时没搞懂......等待大佬的解答

代码调试中的问题和解决过程

已经融合到上面了

代码托管

https://gitee.com/wangzihong/20175209/tree/master/src

脚本运行截图

20175209 《Java程序设计》第六周学习总结

虚拟机崩掉了,所以这周的是在Windows里完成的

心得体会

本周的学习内容较多,因此花费了很多的时间,第七章的内容对于我比较简单,也比较容易理解。但是第十章学起来较为困难,首先第十章的内容很多有比较像,之间有很多相似和不同的地方用以弄混,尤其是构造方法和类中含有的特殊方法需要仔细记忆;此外很多类中的方法都不了解,需要花费大量的时间去查找理解,第十章后几节的内容比较总和,涉及到了标签和锁等知识点,还涉及到八九章还没有学的部分,虽然稍微看了一下下但是理解起来还是有些问题。我觉得Java现阶段已经到了质和量共存的时候,在大量学习的同时必须要保证学到的东西能掌握,否则往后学习会更加困难

学习进度条

代码行数(累计总数) 博客量 学习时间
目标 8000 40 300
第一周 19 1 12
第二周 309 2 15
第三周 740 3 10
第四周 1468 4 10
第五周 1922 8 8
第六周 3290 10 15