20165214 第五周学习任务

20165214 2017-2018-2 《Java程序设计》第五周学习总结

教材学习内容总结

  • 第七章:内部类与异常类
    • 7.1内部类:内部类就是在一个类中再定义一个类,这个在类中定义的类就叫做内部类,而包含内部类的类叫做外嵌类。
      • 外嵌类的成员变量、方法可以在内部类中调用;内部类不能声明类变量和类方法(static);外嵌类的类体可以用内部类声明类对象;内部类仅供外嵌类使用,其他类不可以用某个类的内部类声明对象。
      • 由下图,内部类编译得到的字节码名字格式为[外嵌类名]$[内嵌类名].class
      • 内部类也可以用static来修饰。这样的内部类可以用来在其他类中创建对象,但是这样的内部类不能够操作外嵌类的实例变量。
    • 7.2匿名类:匿名类是子类的一种,它没有名字,所以不能声明对象,但是可以直接创建对象:new [父类名]() {匿名类类体};
      • 匿名类的几个特点:①匿名类可以继承、重写父类的方法;②匿名类是内部类,所以匿名类的使用要遵守内部类的规则;③匿名类没有类名,所以在创建时直接使用父类的构造方法。
      • 可以用接口名和类体来创建一个匿名的对象:new [接口名]() {匿名类类体};这个类体也叫做匿名类。此时,类体必须重写接口中的所有方法。
    • 7.3异常类:在这里先介绍一个在java.lang包中的类Integer中的一个方法public static int parseInt(String s)可以把数字格式的字符串转化为int类型。
      • try-catch语句:用来处理出现的异常操作。语句格式为try {可能发生异常的语句} catch(ExceptionSubclass1 e) {...} catch(ExceptionSubclass2 e) {...} 实现的功能是一旦在try部分出现异常,马上结束try的执行,然后在下面的语句中寻找相应的catch部分执行(catch关键字就是用来捕获被抛出的异常对象)。
      • throw关键字:当运行出现异常时,能够使用throw关键字来抛出异常的对象;而throws关键字用来声明要产生的若干个异常。要注意区分两者的区别
      • 我们能够通过扩展Exception类定义自己的异常类。
    • 7.4断言
      • 断言语句通过关键字assert来声明。有两种形式:①assert booleanExpression,当程序运行到这一句时,如果被修饰的表达式为true,程序接着运行,否则程序停止运行。②assert booleanExpression:messageException,当程序运行到这一句时,如果被修饰的表达式为true,程序接着运行,否则程序停止运行并输出“:”后的值。
      • 使用java解释器直接运行程序,默认关闭断言语句;但在程序调试中可以使用-ea启用断言语句:java -ea [主类名]
    • 7.5小节中出现了一个新的关键字finally,它的执行机制是,无论在运行程序的时候出现什么情况,finally子语句一定会被执行,除了如果在finally子语句前出现了程序对出代码System.exit(0);
  • 第十章:输入、输出流
    • 输入、输出流的作用是读入外部数据、向外部输出数据。所有输入流都是InputStreamReader的子类,所有的输出流都是OutputStreamWriter的子类。
    • 10.1 File类
      • File类的对象主要用来获取文件本身的一些信息,不涉及对文件的读写操作。创建一个File对象的构造方法:①File(String filename);File(String directoryPath,String filename);File(File dir,String filename); 。文件的属性:
      • 使用File对象调用方法public boolean mkdir()来创建一个目录,创建成功返回true,失败或者目录已经存在则返回false;
      • 当File对象是目录时,可以利用public String [] list(FilenameFilter obj)来返回目录下指定类型的所有文件,public File [] listFiles()来用File对象形式返回目录下的指定类型的文件。
      • 当使用File类创建一个文件对象后,若在指定的目录下没有指定名字的文件,则可以使用public boolean createNewFile()来在这个目录中创建一个该名的文件。对象调用方法public boolean delete()可以用来删除当前文件。
      • 要执行一个本地机器上的可执行文件时,可以使用Runtime类:Runtime [对象名]=Runtime.getRuntime();,然后借助这个对象调用exec([命令字符串]来进行打开可执行文件或者执行操作。
    • 10.2文件字节输入流:使用输入流的4个步骤:①设定输入流的源;②创建指向源的输入流;③让输入流读取源中的数据;④关闭输入流。
      • 可以使用InputStream*的子类FileInputStream来读取对需求比较简单的文件。可以使用FileInputStream(String name); 来设定名字为name**的文件为输入流的源,用 FileInputStream(File file);```来设定file指定的文件为输入流的源。
      • 创建输入流时可能会出现错误,比如指向的文件不存在。这时候会出现IO异常(IOException),因此可以使用try-catch语句来处理这个异常。
      • 输入流是读取源中数据的“通道”。文件字节流(FileInputStream)可以调用继承的read方法来顺序地读取文件(以字节为单位),而且只要不关闭流,每次调用read方法就能读取其余的内容,直至源的末尾或流被关闭。①int read()可以从源中读取单个字节的数据,返回0~255的一个整数,未读出字节返回-1。②int read(byte b[])可以从源中读取b.length个字节到字节数组b中,返回读取的字节数目。到达文件末尾返回-1。③int read(byte b[],int off,int len)可以用来读取源文件中从off开始共len个字节到数组b中,返回读取的字节数目。到达文件末尾返回-1。
      • 可以调用输入流的方法close();来关闭流。程序结束时会自动关闭所有打开的流,但是要学会显式地关闭打开的流。
    • 10.3文件字节输出流(通过学习可以知道,输出流与输入流的一些方面是类似的):使用输出流的4个步骤:①设定输出流的目的地;②创建指向目的地的输出流;③让输出流把数据写入到目的地;④关闭流;
      • 可以使用OutputStream*的子类FileOutputStream来读取对需求比较简单的文件。可以使用FileOutputStream(String name); 来设定名字为name**的文件为输入流的源,用 FileOutputStream(File file);```来设定file指定的文件为输入流的源。
      • 如果输出流指向的文件不存在,Java就会创建该文件,如果指向已存在的文件,会刷新这个文件(长度变为0)。创建输出流时可能会出现错误,比如指向的文件权限不够。这时候会出现IO异常(IOException),因此可以使用try-catch语句来处理这个异常。
      • FileOutputStream(String name,boolean append);和FileOutputStream(File file,boolean append)来判断是否对文件进行刷新:append取true不刷新,取false刷新。0
      • 输出流是通往目的地的“通道”。文件字节流可以调用write方法顺序地写入文件,只要不关闭流,每次调用就顺序写入,直到流被关闭。①void write(int n)可以用来向目的地写入单个字节。②void write(byte b[])可以用来向目的地写入一个字节数组。③void write(byte b[],int off , int len);可以用来向目的地写入数组b从off开始共len长度的字节。
      • void close()关闭输入流,同时可以保证冲洗掉缓冲区的内容。
    • 10.4 文件字符输入、输出流。
      • 一个汉字在文件中占两个字节。与字节流对应的是FileReaderFileWriter字符流。其构造方法也与10.3的内容相似。
    • 10.5 缓冲流:BufferedReader类和BufferedWriter类创建的对象叫做缓冲输入、输出流。构造方法分别为BufferedReader(Reader in);BufferedWriter(Writer out)缓冲流增强了读写文件的能力。
      • BufferedWriter能够读取文本行,方法是readLine();也可以向文件写入一个回行符,方法是newLine()
      • 关闭输出流首先要关闭上层流。
    • 10.6 随机流:随机流可以读、写文件。构造方法RandomAccessFile([文件名],[文件权限])RandomAccessFile([File对象名],[文件权限]),其中权限为r(只读)或rw(可读写)。当指向文件时不会刷新文件。
      • 可以使用seek(long a)和getFilePointer()```来获取流的读写位置。
    • 10.7 数组流:字节数组输入、输出流:ByteArrayInputStream();ByteArrayOutputStream(),相关用法与之前的流相似。
    • 10.8 数据流:数据输入、输出流:DateInputStreamDateOutputStream,它们允许程序按着与机器无关的风格读取Java原始数据。
    • 10.9 对象流:对象输入、输出流:ObjectInputStreamObjectOutputStream,使用对象流时要保证对象时序列化的。
    • 10.10 序列化与对象克隆:使用对象流较容易得到一个序列化对象的克隆:把一个对象写入输出流目的地,再把这个目的地作为输入流的源。
    • 10.11 使用Scanner解析文件。与8.3类似,只不过这里是解析文件中的数据。
    • 10.12 文件对话框:创建文件对话框有两步:①使用JFileChooser()创建初始不可见的有模式对话框;②使用showSaveDialog(Component a);或者showOpenDialog(Component a);使对话框可见。
    • 10.13 带进度条的输入流。可以使用ProgressMonitorInputStream(Component c,String s,InputStream);来在读取文件时弹出进度条。
    • 10.14 文件锁的使用步骤:①使用RandomAccessFile流创建流对象(读写属性为rw)②input流调用方法getChannel()获取一个连接到底层文件的FileChannel对象;③信道借用tryLock或lock方法获得一个FileLock(文件锁)对象。

教材学习中的问题和解决过程

  • 问题1:一个内部类A的内部是否还能再定义一个以A为外嵌类的内部类B?(即大农场——养殖场——养牛场的关系)
  • 问题1解决方案:自己尝试了一下,还真的可以。我只在一个内部类中再建了一个内部类,相当于总共有三层。由此我猜测,可以不断在新的内部类中创建内部类。不过过多层内部类也有一个很明显的缺点就是,很容易把人弄晕。。在写第三层的时候我就已经出现了很多次的错误。由此我断定,内部类的这种使用方式在现实中肯定用得很少。
  • 问题2:在书本P286的代码中出现了这样一句String s = new String (a,0,n);不知道这是什么用法。
  • 问题2解决方案:通过代码上下段还有输出结果来看,这是将数组a从开头开始算共n个复制到字符串s中。

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

  • 问题1:在调试课本Example7_2的时候,编译可以通过,但是运行却出现了这样的情况:

  • 问题1解决方案:把错误的原因翻译了一下,发现是输出的类型有所不对。接着看了一下主函数,发现原始是我把输出的格式c写成了d。改过来后问题解决了。
    其他问题都是自己输入的错误,就不列举了。

代码托管

上周考试错题总结

  • 错题1:“面向对象语言中的“类”相当于C语言中的函数”这是错的。应该是“面向对象语言中的“方法”相当于C语言中的函数”。

  • 错题2:UML类图中一个类的属性能显示它的名字、类型、初始化值。方法的属性用+表示public,用-表示private,做题的时候不小心记反了。

  • 错题3:String="ab"+"cd",只创建了一个对象。

结对及互评

点评过的同学博客和代码

  • 本周结对学习情况
    • 20165210

    • 结对学习内容
      共同安装IDEA,学习IDEA的调试

其他

这周的学习感觉比较艰难,因为涉及到了文件的内容,而且内容还很多,需要记下来的一些流的用法也不少。但是在学习的时候,还是蛮有兴趣的,因为可以学到如何编写一个文件对话框。以前我们学语言的时候,都只是在一个编译器上面运行,并没有出现图形界面。现在开始接触到了这一块,令人感觉还是蛮酷的,想把这块学好然后编写出自己的软件出来。相信自己一定能做到!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 36/36 1/1 8/8
第二周 432/468 2/3 15/23
第三周 964/1432 1/4 16/39
第四周 725/2157 1/5 14/53
第五周 1428/3585 3/8 18/71
  • 计划学习时间:15小时

  • 实际学习时间:18小时

posted @ 2018-03-31 23:42  刘璐瑾  阅读(214)  评论(2编辑  收藏  举报