20165223 《JAVA程序设计》第五周学习总结

教材学习内容总结

第七章要点

  • 内部类
  • 匿名类
  • 异常类
  • 断言

第十章要点

  • File类
  • 文件字节/字符的输入、输出流
  • 缓冲流
  • 随机流
  • 数组流
  • 数据流
  • 对象流
  • 序列化和对象克隆
  • 使用Scanner解析文件
  • 文件锁

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

一、内部类

  • JAVA重要成员:成员变量、方法、内部类

  • 内部类:在一个类中定义另一个类,被定义的类叫内部类

  • 外嵌类:包含内部类的类称内部类的外嵌类

  • 内部类和外嵌类的重要关系

    • 外嵌类的成员变量在内部类仍然有效,内部类中的方法也可以调用外嵌类中的方法
    • 内部类中的类体不可以声明类变量和类方法。外嵌类的类体可以用内部类声明对象
    • 内部类仅供它的外嵌类使用
  • 内部类对应字节码文件名字格式外嵌类名$内部类名

  • 内部类可以被修饰为static内部类,但非内部类不可以是static类

二、匿名类

  • 和子类有关的匿名类

    • 匿名类:子类去掉类声明后的类体
    • 形式:
    new Bank() {
        匿名类的类体
    };
    
    • 特点:
      • 匿名类就是个子类
      • 匿名类亦可继承父类的方法也可以重写父类的方法
      • 匿名类一定是内部类,使用时直接在某个类中用匿名类创建对象
      • 匿名类可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法
      • 用匿名类创建对象时,要直接使用父类的构造方法
  • 和接口有关的匿名类

    • 匿名类:实现接口的类去掉类声明后的类体
    • 形式:
    new Computable() {
        实现接口匿名类的类体
    };
    

三、异常类

  • 异常:程序运行过程中可能出现的错误,异常类用作异常处理,给程序机会对错误作出处理

  • 常见异常类

    • 使用throw关键字抛出Exception子类的实例表示发生异常
    • 方法parseInt()在执行时使用throw抛出NumberFormatException对象出现异常
    • 流对象调用read方法读取不存在的文件时抛出IOException异常对象
    • ……
  • try-catch语句

    • 格式:
    try {
        包含可能发生异常的语句
    }
    catch(ExceptionSubClass1 e) {
        ...
    }
    catch(ExceptionSubClass2 e) {
        ...
    }
    
    • JAVA使用try-catch来处理异常
  • 自定义异常类

    • 区别throwthrows关键字,参考博客:Java中关键字throw和throws的区别
      • throw:作用是抛出异常,一般是在代码块的内部
      • throws:是方法可能抛出异常的声明(用在声明方法时,表示该方法可能要抛出异常)

四、断言

  • 断言语句的语法格式
assert booleanExpression;
assert booleanExpression:messageException;
  • 启用与关闭断言语句
java -ea mainClass

五、File类

  • 文件的属性

    File类 作用
    public String getName() 获取文件的名字
    public boolean canRead() 判断文件是否是可读的
    public boolean canWrite() 判断文件是否可被写入
    public boolean exists() 判断文件是否存在
    public long length() 获取文件的长度
    public String getAbsolutePath() 获取文件的绝对路径
    public String getParent() 获取文件的父目录
    public boolean isFile() 判断文件是否是一个普通文件
    public boolean isDirectory() 判断文件是否是一个目录
    public boolean isHidden() 判断文件是否是隐藏文件
    public long lastModified() 获取文件最后修改的时间
  • 创建目录public boolean mkdir()

  • 列出目录中的文件

    调用方法 作用
    public String[] list() 用字符串形式返回目录中的全部文件
    public File[] listFiles() 用File对象形式返回目录中的全部文件
    public String[] list(FilenameFilter filter) 用字符串返回由包含在目录中指定类型的所有文件
    public File[] listFiles(FileFilter filter) 用File对象形式返回由包含在目录中指定类型的所有文件
  • 文件的创建于删除

    • 用File类创建文件对象:File file =new file("C://myletter","letter.txt")
    • 删除文件:file.delete();
  • 运行可执行文件

    • 使用java.lang包中的Runtime类声明一个对象:Runtime ec;
    • 使用该类的getRuntime()静态方法创建这个对象:ec = Runtime.getRuntime;

六、输入输出流

  • 使用输入流步骤

    • 设定输入流的源
    • 创建指向源的输入流
    • 让输入流读取流中的数据
    • 关闭输入流
  • 使用输出流步骤

    • 给出输出流的目的地
    • 创建指向目的地的输出流
    • 让输出流把数据写入到目的地
    • 关闭输出流
  • 文件字节输入流

    • 构造方法:FileInputStream(String name);FileInputStream(File file);
    • 使用输入流读取字节:read
    • 关闭流:close()
  • 文件字节输出流

    • 构造方法:FileInputStream(String name);FileInputStream(File file);
    • 使用输入流读取字节:
    write方法 目的
    void write(int n) 输出流调用该方法向目的地写数据
    void write(byte b[]) 输出流调用该方法向目的地写入一个字节数组
    void write(byte b[],int off,int len) 给定字节数组中起始于偏移量off处取len个字节写到目的地
    void close() 关闭输出流
    • 关闭流:close()
  • 文件字符输入流,文件字符输入流

    • 构造方法:
    FileReader(String filename): FileReader(File filename);
    FileWrite(String filename):FileWrite(File filename);
    FileWrite(String filename,boolean append);
    FileWrite(File filename,boolean append);
    

七、其他流

  • 随机流:RandomAccessFile
  • 字节数组流:ByteArrayInputStreamByteArrayoutputStream
  • 字符数组流:CharArrayReaderCharArrayWrite
  • 数据流:DataInputStreamDataoutputStream
  • 对象流:ObjectInputStreamObjectoutputStream

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

上周安装完IDEA后就就一直使用IDEA编写代码,不得不说IDEA拥有的补全功能使得使用起来非常方便,有一键RUN自动编译运行,debug调试起来也更清晰方便。第七章代码没有出现什么问题,理解起来也不是很复杂,但第十章代码却大部分中枪,出现了很多问题,下面就一点点解决。

  • Example10_1.java

运行出现问题:

发现问题:

解决问题:

  • Example10_2.java

运行出现问题:

解决问题:

(方法一)将java文件复制到上一层文件夹才可以读出

(方法二)将源代码中的“.”改成“src/.”

  • Example10_3.java

发现问题:

解决问题:

  • 总结:IDEA中路径很重要!!不设置好可能会出现很多错误,如读取不到该文件等问题

代码托管

详见博客:https://gitee.com/BESTI-IS-JAVA-2018/20165223cn.git

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3000行 30篇 400小时
第五周 1324/200 3/11 20/20 逐渐深入

参考资料

  1. 教学视频
  2. 使用JDB调试Java程序
posted @ 2018-04-01 20:28  乐十六君  阅读(178)  评论(1编辑  收藏  举报