20175212童皓桢 《Java程序设计》第六周学习总结

20175212童皓桢 《Java程序设计》第六周学习总结

教材学习内容总结

第七章 内部类与异常类

1.内部类html

Java支持在一个类中定义另外一个类,这样的类称做内部类,包含内部类的类称为内部类的外嵌类。java

  • 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也能够调用外嵌类中的方法。
  • 内部类的类体不能声明类变量和类方法。外嵌类的类体中能够用内部类声明对象,做为外嵌类的成员。
  • 内部类仅供它的外嵌类使用,其余类不能够用某个类的内部类声明对象。

2.匿名类(被认为是一个子类去掉声明后的类体)c++

Bank是类,下列代码用Bank的一个子类(匿名类)建立对象。git

new Bank(){
     匿名的类体
}
  • 匿名类能够继承、重写父类的方法。
  • 匿名类必定是内部类
  • 匿名类能够访问外嵌类中的成员变量和方法
  • 匿名类因没有类名,所以匿名类建立对象时,直接使用父类的构造方法。
    感受匿名类的概念和使用方法不太好理解,故用书中例子以阐明:
board.showMess(new OutputAlphabet()  
                                                            //向参数传递OutputAlphabet的匿名子类对象
                       {  public void output() 
                          {  for(char c='α';c<='ω';c++)  //输出希腊字母
                               System.out.printf("%3c",c); 
                          }  
                       }
                     );

Example7_2.java的以上即为使用匿名类的部分。正则表达式

  • 另外的,可使用接口名和类体组合建立一个匿名对象传递给方法的参数,类体必需要重写接口中的所有方法,如:
machine.turnOn( new SpeakHello(){
                          public void speak() {
                             System.out.println("hello,you are welcome!");
                          }
                      } 
                    ); 
      machine.turnOn( new SpeakHello(){
                          public void speak() {
                              System.out.println("你好,欢迎光临!");
                          }
                      } 
                    );

3.异常类数组

Java容许定义方法时声明该方法调用过程当中可能出现的异常,即容许方法调用过程当中抛出异常对象,终止当前方法的继续执行。
另外,异常对象能够调用如下方法获得或输出有关异常的信息:dom

public String getMessage();
public void printStackTrace();
public String toString();
  • try-catch语句

将可能出现的一场操做放在try部分,一旦try部分抛出异常对象,那么try部分马上结束执行,转向执行相应的catch部分。学习

try{
  可能发生异常的语句
}
catch(ExceptionSubClass1 e) {
  …
}
catch(ExceptionSubClass2 e) {
  …
}
  • 自定义异常类

一个方法在声明时可使用throws关键词声明要产生的若干个异常,并在该方法体中具体给出产生异常的操做。以下:设计

public void income(int in,int out) throws BankException {
       if(in<=0||out>=0||in+out<=0) {
          throw new BankException(in,out); //方法抛出异常,致使方法结束
       }
       int netIncome=in+out;
       System.out.printf("本次计算出的纯收入是:%d元\n",netIncome);
       money=money+netIncome;
}

4.断言调试

在代码调试阶段中,断言语句通常用于程序不许备经过捕获异常来处理的错误。

  • 断言语句有如下两种格式:
    assert booleanExpression;
    若表达式为真,程序从断言语句处继续执行,不然程序从断言语句处中止执行。
assert booleanExpression:messageException;

与上一种相似,,另外的输出messageException表达式的值。

  • java -ea mainClass 启用断言语句

第十章

1. File类

  • 文件的属性

public String getName() 获取文件的名字。

public boolean canRead()判断文件是不是可读的。

public boolean canWrite() 判断文件是否可被写入。

public boolean exits() 判断文件是否存在。

public long length() 获取文件的长度(单位是字节)。

public String getAbsolutePath() 获取文件的绝对路径。

public String getParent() 获取文件的父目录。

public boolean isFile() 判断文件是不是一个普通文件,而不是目录。

public boolean isDirectroy() 判断文件是不是一个目录。

public boolean isHidden() 判断文件是不是隐藏文件。

public long lastModified() 获取文件最后修改的时间。

  • 目录

建立目录 public boolean mkdir()

public String[] list()用字符串形式返回目录下的所有文件。

public File [] listFiles() 用File对象形式返回目录下的所有文件。

public String[] list(FilenameFilter obj)用字符串形式返回目录下的指定类型的全部文件。

public File [] listFiles(FilenameFilter obj) 用File对象形式返回目录下的指定类型全部文件。

上述两方法的参数FilenameFilter是一个接口,该接口有一个方法:
public boolean accept(File dir,String name);

  • 文件的建立与删除

File file=new File("c:\\myletter","letter.txt");

若是c:\myletter目录中没有名字为letter.txt文件,
文件对象file调用方法

public boolean createNewFile();

文件对象调用方法 public boolean delete()

能够删除当前文件,
例如:file.delete();

  • 运行可执行文件

用Runtime 类声明一个对象( Runtime类在java.lang包)
Runtime ec;

而后使用该类的getRuntime()静态方法建立这个对象:
ec=Runtime.getRuntime();

ec能够调用exec(String command)方法打开本地机的可执行文件或执行一个操做。

2.文件字节输入流

使用输入流一般包括4个基本步骤:

(1)设定输入流的源
(2)建立指向源的输入流
(3)让输入流读取源中的数据
(4)关闭输入流。

3.文件字节输出流

(1)给出输出流的目的地
(2)建立指向目的地的输出流
(3)让输出流把数据写入到目的地
(4)关闭输出流。

4.文件字符输入、输出流

(1)Reader类提供的read方法以字符为单位顺序地读取源中的数据。

int read():

int read(char b[]):

int read(char b[], int off, int len):

void close():

long skip(long numBytes):

(2) Writer流以字符为单位顺序地写文件,每次调用write方法就顺序地向目的地写入内容。 Writer类有以下经常使用的方法。

void write(int n): 向输出流写入一个字符。

void write(byte b[]): 向输出流写入一个字符数组。

void write(byte b[],int off,int length): 从给定字符数组中起始于偏移量off处取len个字符写到输出流。

void close(): 关闭输出流。

5.缓冲流

(1)BufferedReaderBufferedWriter类建立的对象称做缓冲输入、输出流。两者的源和目的地必须是字符输入流和字符输出流。

构造方法:

BufferedReader(Reader in);

BufferedWriter (Writer out);

(2)BufferedReaderBufferedWriter类读写文件的方法:

readLine() 读取文本行

write(String s,int off,int len) 把字符串s写到文件中

newLine(); 向文件写入一个回行符

6.随机流

使用RandomAccessFile类来建立一个随机访问文件流。RandomAccessFile类建立的流的指向既能够做为源也能够做为目的地。

构造方法

RandomAccessFile(String name,String mode) ;

RandomAccessFile(File file,String mode) ;

相关方法:
seek(long a) 定位RandomAccessFile流的读写位置

getFilePointer() 获取流的当前读写位置

7.数组流

(1)字节数组流

字节数组输入流ByteArrayInputStream和字节数组输出流ByteArrayOutputStream分别使用字节数组做为流的源和目标。

ByteArrayInputStream构造方法及经常使用方法

ByteArrayInputStream(byte[] buf);

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

public int read();顺序地从源中读出一个字节

public int read(byte[] b,int off,int len);顺序地从源中读出参数len指定的字节数

ByteArrayOutputStream流构造方法及经常使用方法

ByteArrayOutputStream();

ByteArrayOutputStream(int size);

public void write(int b); 顺序地向缓冲区写入一个字节

public void write(byte[] b,int off,int len); 将参数b中指定的len个字节顺序地写入缓冲区

public byte[] toByteArray(); 返回输出流写入到缓冲区的所有字节

(2)字符数组

CharArrayReaderCharArrayWriter类是字符数组流,使用字符数组做为流的源和目标。

8.数据流

DataInputStreamDataOutputStream类建立的对象称为数据输入流和数据输出流。

构造方法:

DataInputStream(InputStream in)建立的数据输入流指向一个由参数in指定的底层输入流

DataOutputStream(OutnputStream out)建立的数据输出流指向一个由参数out指定的底层输出流

9.对象流

ObjectInputStreamObjectOutputStream类建立的对象称为对象输入流和对象输出流。

它的构造方法是:

ObjectInputStream(InputStream in)

ObjectOutputStream(OutputStream out)

相关方法:

writeObject(Object obj) 将一个对象obj写入到一个文件

readObject() 读取一个对象到程序中

所谓序列化:一个类若是实现了Serializable接口,那么这个类建立的对象就是所谓序列化的对象。

10.使用Scanner解析文件

(1)使用默认分隔标记解析文件

建立Scanner对象,并指向要解析的文件,例如:

File file = new File("hello.java");

Scanner sc = new Scanner(file);

sc将空白做为分隔标记

(2)使用正则表达式做为分隔标记解析文件 :

建立Scanner对象,指向要解析的文件,并使用useDelimiter方法指定正则表达式做为分隔标记。

11.文件对话框

构造方法JFileChooser()建立初始不可见的有模式的文件对话框。而后文件对话框调用下述2个方法:

showSaveDialog(Component a);

showOpenDialog(Component a);

均可以使得对话框可见,只是呈现的外观有所不一样,showSaveDialog方法提供保存文件的界面,showOpenDialog方法提供打开文件的界面。
上述两个方法中的参数a指定对话框可见时的位置,当a是null时,文件对话框出如今屏幕的中央;若是组件a不空,文件对话框在组件a的正前面居中显示。

11.带进度条的输入流

若是读取文件时但愿看见文件的读取进度可使用javax.swing包提供的输入流类:
ProgressMonitorInputStream
它的构造方法是:
ProgressMonitorInputStream(Conmponent c,String s,InputStream);

12.文件锁

FileLockFileChannel类处理Java提供的文件锁功能。它们分别在java.niojava.nio.channels包中。
输入、输出流读写文件时可使用文件锁。
RondomAccessFile建立的流在读写文件时使用文件锁的步骤以下:

(1)先使用RondomAccessFile流创建指向文件的流对象,该对象的读写属性必须是rw,例如:

RandomAccessFile input=new         
                  RandomAccessFile("Example.java","rw");

(2)input流调用方法getChannel()得到一个链接到地层文件的FileChannel对象(信道),例如
FileChannel channel=input.getChannel();

(3)信道调用tryLock()lock()方法得到一个FileLock(文件锁)对象,这一过程也称做对文件加锁.
例如:FileLock lock=channel.tryLock();

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

  • 问题1:
board.showMess(new OutputAlphabet()  
                                                            //向参数传递OutputAlphabet的匿名子类对象
                       {  public void output() 
                          {  for(char c='α';c<='ω';c++)  //输出希腊字母
                               System.out.printf("%3c",c); 
                          }  
                       }
                     );

中,对于匿名类的使用格式存有疑惑

  • 问题1解决方案:通过比较书中的范例和使用规范后得知,匿名类的使用和描述紧跟在声明以后,即便是在看成参数时。

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

  • 问题1:在IDEA中调试书中Example7_6时没法正确开启断言语句。
    输入图片说明
  • 问题1解决方案:发现班课中有同窗与我有相同问题,并找到了解决方法:
run->configrations->VM options:-ea

输入图片说明

以后成功调试并启用assert语句
输入图片说明

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题一:若是有如下程序片断
interface Some{

 void dosome ();

}

class SomeImpl implements Some {

 public void dosome(){

   System.out.println("作一些事");

 }

}

public class Main {

 public static void main (String [] args) {

  Some s= new SomeImpl();

  s.dosome ();

 }

}

如下描述正确的是

A
.
编译失败

B . 显示“作一些事”

C
.
发生ClassCastException

D
.
执行时不显示任何信息

缘由和分析:对接口的理解不很到位。在此题中简单的将接口Some做为父类,并最后调用在子类中重写的方法便可。

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):
    • 不使用Markdown不加分
    • 有语法错误的不加分(连接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)
    • 缺乏“教材学习中的问题和解决过程”的不加分
    • 缺乏“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺乏“结对及互评”的不能打开的不加分
    • 缺乏“上周考试错题总结”的不能加分
    • 缺乏“进度条”的不能加分
    • 缺乏“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分
  6. 其余加分:
    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进状况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深刻的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习状况真实可信的加1分
  7. 扣分:
    • 有抄袭的扣至0分
    • 代码做弊的扣至0分
    • 迟交做业的扣至0分

点评模板:

  • 博客中值得学习的或问题:
    • 对书上的内容有总结和本身的理解
    • 能够多尝试调试代码,发现问题
  • 代码中值得学习的或问题:
  • 基于评分标准,我给本博客打分:13分。
    得分状况以下:正确使用Markdown语法(加1分),模板中的要素齐全(加1分)教材学习中的问题和解决过程, 两个问题加2分,本周有效代码超过300分行的(加2分),感想,体会不假大空的加1分排版精美的加一分
    进度条中记录学习时间与改进状况的加1分
    有动手写新代码的加1分
    代码Commit Message规范的加1分
    错题学习深刻的加1分
    点评认真,能指出博客和代码中的问题的加1分
    结对学习状况真实可信的加1分

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20175227
    • 结对学习内容
      • 本周教材对于第七章、第十章的知识进行学习
      • 合做写出了四则运算练习器程序的第一阶段任务
  • 上周博客互评状况

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

  • 本周和结对伙伴初步设计出了四则运算练习器,扩展了如调用eval方法,getPercentInstance方法等知识
  • 经过对教材的学习,了解了两个特殊类的使用方法及输入、输出流相关知识

    学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 6/6 1/1 20/20
第二周 245/251 1/2 18/38
第三周 633/884 1/3 22/60
第四周 305/1189 1/4 30/90
第五周 410/1599 3/7 30/120
第六周 1135/2734 3/10 30/150

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进本身的计划能力。这个工做学习中很重要,也颇有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为何这么难软件工程 估计方法

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

相关文章
相关标签/搜索