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

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

教材学习内容总结

第七章 内部类与异常类

内部类与外嵌类

可以在类中定义另一个类,即内部类

包含内部类的类为内部类的外嵌类

  • 外嵌类的成员变量在内部类中有效,类体中可用内部类声明对象
  • 内嵌类的类体中不可以声明类变量和类方法,内部类中的方法可调用外嵌类的方法
  • 内部类仅供外嵌类使用
  • 内部类可为static内部类,即可用外嵌类.内部类的访问内部类,不可操作外嵌类中的实例成员变量

    匿名类

  • 创建和子类有关的匿名类对象:
    new 类(){
    匿名类类体
    };
  • 创建和接口有关的匿名类对象
new 接口名(){
    实现接口的匿名类类体
};
  • 匿名类一定是内部类
  • 匿名类类体中不可声明static成员变量和static方法
  • 匿名对象的引用常传递给一个参数

异常类

  • 使用throw抛出Exception子类的异常对象表示异常发生
  • try-catch语句

try {
    包含可能发生的异常语句//行为发生异常,就是方法调用
}
catch(Exception e){
···
}

catch参数中的异常类都是Exception子类,子类之间不能有父子关系

  • 自定义异常类

声明方法时用throws关键字声明要产生的若干个异常,并具体给出产生异常的操作。

断言

assert boolean逻辑判断语句;
assert  boolean逻辑判断语句:执行语句

当boolean为false时,程序从断言处停止

第十章 输入、输出流

  • 所有输入流都是抽象类InputStreamReader的子类
  • 所有输出流都是抽象类OutputStreamWriter的子类

    File类

    创建File对象的三个构造方法
File(String filename);
File(String directoryPath,String filename);
File(File dir,String filename);
目录

通过File f = new File(name/path)创建对象

  • 通过f.mkdir();创建目录
  • 列出目录中的文件:

1.f.list()

String [] filelist = f.list();//用字符串形式
File [] filelist = f.listFiles();//用File对象形式

2.列出指定类型的文件:f.list(FilenameFilter obj)

  • 向接口FilenameFilter传递类的对象,参数obj可回调accept(File dir,String name方法,来检验文件是否符合要求
创建删除与运行可执行文件
f.creatNewFile();//创建
f.delete();//删除
Runtime ec = Runtime.getRuntime()//通过调用类方法创建对象
ec.exec(String command)//ec调用方法打开机器上的可执行文件

文件字节输入/输出流

1.给出输入/输出流的源/目的地

File f = new File(name/path);

2.创建指向源/目的地的输入/输出流
  • 指向源

    FileInputStream(String name);
    FileInputStream(File file);
  • 指向目的地

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

    FileOutputStream(String name,boolean append); FileOutputStream(File file,boolean append);//当append的值为false时将刷新所指向的文件,否则将从文件末尾开始写入

必须在try-catch语句的try块部分创建

3.使用输入/输出流读取字节
  • 输入流

    int read()//读取单个字节
    int read(byte b[])//读取b.length个字节
    int read(byte b [],int off,int len)//从第off个位置起读取len个字节
  • 输出流
    void write(int n)//写入单个字节
    void write(byte b[])//写入字节数组
    void write(byte b [],int off,int len)//从第off个位置起写入len个字节
    4.关闭流

close()方法

文件字符输入/输出流

以字符为单位处理数据。

FileReader(String filename);
FileReader(File filename);
FileWriter(String filename);
FileWriter(File filename);
FileWriter(String name,boolean append);
FileWriter(File file,boolean)

缓冲流

BufferedReader流和BufferedWriter,二者的源和目的地必须是字符输入流和字符输出流,

不能与目的地/源直接相连

构造方法
BufferedReader(Reader in);
BufferedWriter(Writer out);

向BufferedReader传递一个Reader子类的对象(将两个流连接在一起),然后用readLine()方法即可按行读取文件

FileReader inOne = new FileReader("student.txt");
BufferedReader inTwo = BufferedReader(inOne);
String strLine = inTwo.readLine();
  • BufferWriter有写入回行符的方法newLine()

    随机流

  • RandomAccessFile类创建的流称为随机流,用该类创建的流的指向既可为源,也可为目的地。
  • 构造方法:

    RandomAccessFile(String name,String mode)

mode取r(只读),取rw(可读写)

  • 指向文件时,不刷新文件
  • 方法seek(long a)可确定读写位置距离文件开头的字节个数,可替换也可尾加

数组流

  • 字节数组流

输入流

ByteArrayInputStream(byte[] buf);
ByteArrayInputStream(byte[] buf,int offset,int length);

输出流

ByteArrayOutputStream();
ByteArrayOutputStream(int size);
  • 字符数组流

输入流

CharArrayReader(char[] buf);
CharArrayReader(char[] buf,int offset,int length);

输出流

CharArrayWriter();
CharArrayWriter(int size);

数据流

  • 允许程序按着机器无关风格读取java原始数据
  • 构造方法
DataInputStream(InputStream in)//创建输入流指向由参数in指定的底层输入流
DataOutputStream(OutputStream out)//创建输出流指向由参数in指定的底层输出流

对象流

  • 构造方法

    ObjectOutputStream(OutputStream out)//该指向是一个输出流对象
    ObjectInputStream(InputStream in)//该指向是一个输入流对象
  • 使用对象流写入或读入对象时,要保证对象和该对象的成员变量都是序列化的:类要实现serializable接口

    序列化与对象克隆

  • 将对象写入对象输出流指向的目的地,然后将该目的地作为一个对象输入流的源,即可克隆

    使用Scanner解析文件

  • 使用默认分割标记解析文件
File file = new File("hello.java");
Scanner sc = new Scanner(file);
  • 使用正则表达式作为分割标记解析文件

    File file = new File("hello.java");
    Scanner sc = new Scanner(file);
    sc.useDelimiter(正则表达式);

    文件对话框

  • JFileChooser()创建初始不可见的有模式的文件对话框
  • 调用两个方法,使对话框可见
int ShowSaveDialog(Component a);
int ShowSaveDialog(Component a);
  • “确定”,“取消”或“关闭”按钮,返回常量
JFileChooser.APPROVE_OPTION
JFileChooser.CANCEL_OPTION
  • 文件类型是用户需要的类型
FileNameExtensionFilter filter = new FileNameExtensionFilter(7"图像文件","jpg","gif");//创建对象
chooser.setFileFilter(filter);//对话框调用方法来设置对话框默认打开或显示的指定类型

带进度条的输入流

  • javax.swing包中的输入流:ProgressMonitorInputStream

    ProgressMonitorInputStream(Conmponent c,String s,InputStream)//进度条在参数c指定的组件的正前方显示,若为null,在屏幕正前方显示

    文件锁

RandomAccessFile input = new RandomAccessFile("Example.java","rw");//创建指向文件的流对象,读写属性必须是rw
FileChannel channel=input.getChanner();//调用方法获得连接到底层文件的对象(信道)
FileLock lock = channel.tryLock();//文件加锁,加锁后将禁止程序对文件进行操作

lock.release();//释放文件锁

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

  • 问题1:为什么内部类的类体中不可以声明类变量和类方法?
  • 问题1解决方案:通过网上查询学习到以下知识

    静态变量是要占用内存的,在编译时只要是定义为静态变量了,系统就会自动分配内存给他,而内部类是在宿主类编译完编译的,也就是说,必须有宿主类存在后才能有内部类,这也就和编译时就为静态变量分配内存产生了冲突,因为系统执行:运行宿主类->静态变量内存分配->内部类,而此时内部类的静态变量先于内部类生成,这显然是不可能的,所以不能定义静态变量!

  • 问题2:p289页的代码中,"新年快乐".getBytes()语句是什么意思?
  • 问题2解决方案:涉及到第八章的内容,见p185页知识点,String是一个类,其有许多方法,如此处即是调用getBytes()方法

    public byte [] getBytes()使用平台默认的字符编码,将当前String对象的字符序列存放到字节数组中,并返回数组的引用。

  • 问题3:p292页中代码的类StringTokenizer是什么意思?
  • 问题3解决方案:补充学习书上p191页有关StringTokenizer类的知识。
  • 问题4:什么是正则表达式
  • 问题4解决方案:通过查书得知

    正则表达式是一个String对象的字符序列,该字符序列中含有具有特殊意义的字符,这些特殊字符称作正则表达式中的元字符。

    在正则表达式中可以用方括号括起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符

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

  • 问题1:用idea导入代码文件时,提示编译发生错误
  • 问题1解决方案:可强行编译
  • 问题2:在p284页中的代码中,有以规定的名字结尾的方法,有没有以规定改的名字开头的方法?
  • 问题2解决方案:在网上查询得知有startswith方法,用name.startswith(extendName)即可设置为返回指定类型的文件
  • 问题3:在调试example10_3时,由于例子中的可执行文件在本虚拟机中没有,所以无法运行
  • 问题3解决方案:尝试打开虚拟机中已有的gedit编辑器,通过查询得其目的地为/usr/bin,所以修改路径为:
    File  file=new File("/usr/bin","gedit");

    可成功打开gedit文件

  • 问题4:example10_5运行出来的结果与书上不同,书上注释为0,8,22.但在虚拟机中运行的得到是0,12,26

  • 问题4解决方案:通过网上查询得知linux下汉字是3个字节

    ubuntu默认使用UTF-8编码,这种编码的一汉字占用三个字节

  • 问题5:运行虚拟机出现花屏现象

  • 问题5解决方案:通过网上查询得知修改分辨率即可

代码托管

其他(感悟、思考等,可选)

  • 本周学习任务较重,在学习第十章时,由于欠缺第八章知识,学起来比较吃力,对代码的理解不够深,遇到不懂的才往前翻对应的知识点边学边往补充,效率不高。应该

    遇到不懂的知识点后就将与之相关的知识呈体系化的补充上,再接着往后学,不然越到后面越吃力

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 13/13 1/30 19/19
第二周 426/426 3/30 12/12
第三周 562/562 4/30 15/15
第四周 1552/1958 5/30 16/16
第五周 1123/3086 6/30 14/14

参考资料

原文地址:https://www.cnblogs.com/tiankunye/p/8687101.html

时间: 2024-11-10 01:04:40

20165230 2017-2018-2 《Java程序设计》第5周学习总结的相关文章

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

20145201 《Java程序设计》第一周学习总结

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20145224-陈颢文 《Java程序设计》第一周学习总结

20145224 <Java程序设计>第一周学习总结 教材学习内容总结 通过第一周的学习让我对Java有了个初步的了解,知道了Java分为Java SE.Java EE.Java ME三大平台,其中Java SE是基础.Java的一大特点是它可以跨平台,而JVM对Java的跨平台提供了支持,它就类似于一个虚拟机,只要在当前平台安装了相应的JVM,Java程序就有了可以在此平台上运行的基础啦.JRE是Java的执行环境,在安装了JRE的计算机上就可以运行Java的程序了,当然光是可以跑代码对于程

20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结

学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不需接触底层数据库驱动程序的差异性. 本章,我们需要了解JDBC与API使用和概念,我们先要认识应用程序如何与数据库进行沟通,数据库本身是一种独立运行的应用程旭,程序员撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增加删除以及查找. 通常应用程序会利用一组专门与数据库进行通信协议的链接库,以简化

20145326《Java程序设计》第二周学习总结

20145326<Java程序设计>第二周学习总结 教材学习内容总结 本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型.变量.运算符.流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础.虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性. 1. 类型 在java的世界中,并非每个东西都

20145201 《Java程序设计》第一周学习总结(修改)

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145238-荆玉茗 《Java程序设计》第一周学习总结

20145238 <Java程序设计>第一周学习总结 教材学习内容总结 Java三大平台:由于java领域的应用越来越广,根据不同级别的应用开发区分了不同的应用版本,后正式更名为Java SE,Java EE,Java ME. Java SE主要分为四个部分:JVM,JRE,JDK和JAVA语言. 了解JCP与JSR.RI.TCK的关系:JSR必须经过JCP投票通过才能成为最终的标准文件,JSR成为最终文件后对其成果做出免费且开发原始码的参考实现,称为RI,由TCK作为技术兼容测试工具箱. 了

201521123045 &lt;java程序设计&gt;第11周学习总结

201521123045 <java程序设计>第11周学习总结 1. 本周学习总结 2. 书面作业 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问) import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; class Account{ private int balance; private Lock lock = new

20145311 《Java程序设计》第九周学习总结

20145311 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1JDBC 16.1.1JDBC简介 JDBC(Java DataBase Connectivity)是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性. 厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型: ·Type 1:JDBC-ODBC Bridge Driver·Type 2:Native API