20145212 《Java程序设计》第6周学习总结

学习内容总结

第十章

1.Java将输入/输出抽象化为串流。读取数据对象成为输入流,能向其写入的对象叫输出流。

我从网上找到了一个可以更好梳理结构关系的图:

2.inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。

Inputstream类中的常用方法:  

  1. public abstract int read( )//读取一个byte的数据,返回值是高位补0的int类型值
  2. public int read(byte b[ ])//读取b.length个字节的数据放到b数组中,返回值是读取的字节数
  3. public int read(byte b[ ], int off, int len)//从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中
  4. public int available( )//返回输入流中可以读取的字节数
  5. public long skip(long n)//忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
  6. public int close( ) //我们在使用完后,必须对我们打开的流进行关闭 

OutputStream类中的常用方法:  

  1. public void write(byte b[ ])//将参数b中的字节写到输出流  
  2. public void write(byte b[ ], int off, int len) //将参数b的从偏移量off开始的len个字节写到输出流 
  3. public abstract void write(int b) //先将int转换为byte类型,把低字节写入到输出流中
  4. public void flush( ) //将数据缓冲区中数据全部输出,并清空缓冲区  
  5. public void close( ) //关闭输出流并释放与流相关的系统资源

3.FileInputStream类

FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。

使用方法如下:

  1. //方式1  
  2. File fin=new File("d:/abc.txt");
  3. FileInputStream in=new FileInputStream(fin);
  4. //方式2
  5. FileInputStream in=new FileInputStream("d: /abc.txt");  
  6. //方式3
  7. 构造函数将 FileDescriptor()对象作为其参数
  8. FileDescriptor() fd=new FileDescriptor();  
  9. FileInputStream f2=new FileInputStream(fd);

4.从一个流构造另一个流

为InputStream和OutputStream定义decorator类接口的类,分别是FilterInputStream和FilterOutputStream。

  1. FilterInputStream的种类:
  2. DataInputStreamDataOutputStream配合使用,就能以一种"可携带的方式(portable fashion)"从流里读取primitives了。(intcharlong等)
  3. BufferedInputStream用来解决"每次要用数据的时候都要进行物理读取"的问题。
  4. LineNumberInputStream跟踪输入流的行号;有getLineNumber( )和setLineNumber(int)方法。
  5. PushbackInputStream有一个"弹压单字节"的缓冲区(has a one byte push-back buffer),能把最后读到的那个字节压回去。
  1. FilterOutputStream的种类:
  2. DataOutputStream,与DataInputStream配合使用。
  3. PrintStream负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。
  4. BufferedOutputStream解决"每次往流里写数据,都要进行物理操作"的问题。就是"用缓冲区"。用flush( )清空缓冲区。

5.字符流的读取和写入:

java.io.Reader和 java.io.InputStream 组成了 Java 输入类。

Reader 用于读入16位字符,也就是 Unicode 编码的字符,InputStream 用于读入 ASCII 字符和二进制数据。

Reader体系结构如下:

6.FileReader  

FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:

  1. //将文件名作为字符串
  2. FileReader f=new FileReader(“c:/temp.txt”);  
  3. //构造函数将File对象作为其参数。  
  4. File f=new file(“c:/temp.txt”);  
  5. FileReader f1=new FileReader(f);  
  6. //构造函数将FileDescriptor对象作为参数  
  7. FileDescriptor() fd=new FileDescriptor();  
  8. FileReader f2=new FileReader(fd);  

7.Writer类体系结构如下:

8.DataInputStream类对象可以读取各种类型的数据;DataOutputStream类对象可以写各种类型的数据,创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。

例:  

  1. FileInputStream in=new FileInputStream("d:/abc.txt");  
  2. DataInputStream din=new DataInputStream(in);

第十一章

1.线程与并行程序代码实例:

  1. final List list; // 某些长的未排序的对象列表;已在其他地方初始化
  2. /** 用来在后台对List排序的Thread类*/
  3. class BackgroundSorter extends Thread {
  4. List l;
  5. public BackgroundSorter(List l) { this.l = l; } // 构造函数
  6. public void run() { Collections.sort(l); } // 线程主体
  7. }
  8. // 创建BackgroundSorter线程
  9. Thread sorter = new BackgroundSorter(list);// 开始运行;在原来的线程继续执行接下来// 的语句时,新的线程会执行run() methodsorter.start();
  10. // 这是另一个定义类似线程的方法
  11. Thread t = new Thread(new Runnable() { // 创建一个新的线程
  12. public void run() { Collections.sort(list); } // 为对象列表排序
  13. t.start(); // 开始运行
  14. }

2.我们可以对线程中未被捕获的异常安装自定义的处理程序:

  1. // 此线程正好抛出一个异常
  2. Thread t = new Thread() {
  3. public void run() {
  4. throw new UnsupportedOperationException();
  5. }
  6. }
  7. // 给线程一个名称以帮助调试
  8. t.setName("My Broken Thread");
  9. // 这是针对错误的处理程序
  10. t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
  11. public void uncaughtException(Thread t, Throwable e) {
  12. System.err.printf("Exception in thread %d '%s':" + "%s at line %d of %s%n",
  13. t.getId(), // 线程id
  14. t.getName(), // 线程名称
  15. e.toString(), // 异常名称与信息
  16. e.getStackTrace()[0].getLineNumber(), // 行号
  17. e.getStackTrace()[0].getFileName()); // 文件名
  18. }
  19. }

3.让线程在特定的一段时间休眠或停止运行,可以用静态的Thread.sleep() method做到,或者在Java中可以用TimeUnit类的列举常量的实用程序method:

  1. import static java.util.concurrent.TimeUnit.SECONDS; // 实用程序类
  2. public class Clock extends Thread {
  3. // 此字段是易变的,因为两个不同的线程会访问它
  4. volatile boolean keepRunning = true;
  5. public Clock() { // 构造函数
  6. setDaemon(true); //daemon线程:解释器可以在它运行时跳出
  7. }
  8. public void run() { // 线程主体
  9. while(keepRunning) { // 此线程会运行直到被要求停止为止
  10. long now = System.currentTimeMillis();// 取得当前时间
  11. System.out.printf("%tr%n", now);// 输出当前时间
  12. try { Thread.sleep(1000); }// 等待1000毫秒
  13. catch (InterruptedException e) { return; }// 在中断时结束
  14. }
  15. }

4.线程完成run()方法,就会进入Dead,进入(或者已经调用过start()方法)的线程,不可以再次调用start()方法,否则会抛出错误。

5.如果要停止线程,最好自行操作,让程序走完应有流程,而不是调用syop()方法

6.wait()、notify()与notifyAll()是由Object类别所提供的方法

7.当物件的wait()方法被调用,目前的线程会被放入对象的等待池中,线程归还对象的锁定

关于这一点的代码例子如下:

  1. public synchronized void setProduct(int product) {
  2. if(this.product != -1) {
  3. try { //目前店员没有空间收产品,请稍候!
  4. wait();
  5. }
  6. catch(InterruptedException e) {
  7. e.printStackTrace();
  8. }
  9. }
  10. this.product = product;
  11. System.out.printf("生产者设定(%d)%n", this.product); //通知等待区中的一个消费者可以继续工作了
  12. notify();
  13. }
  14. public synchronized int getProduct() {
  15. if(this.product == -1) {
  16. try { //缺货了,请稍候!
  17. wait(); }
  18. catch(InterruptedException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. int p = this.product;
  23. System.out.printf("消费者取走(%d)%n", this.product);
  24. this.product = -1; //取走产品,-1表示目前店员手上无产品
  25. //通知等待区中的一个生产者可以继续工作了
  26. notify();
  27. return p;
  28. }

本周代码托管截图

其他

随着学习越来越深入,我发现由于我之前的学习很不踏实,很多知识点被我忽略掉或者忘记了,导致我不能很好地理解后面书上所说的内容,有时候学习新知识的时候就会返回前面看基础,这样虽然有些慢但是对之前的内容学习也算是一种复习或者说巩固吧。

这一章的JAVA让我感觉到API的使用在Java的学习中非常重要,由于之前的学习中没有这么练习这方面的内容,对于很多类的用法也是模模糊糊,只能照搬书上的代码使用,学习这章之后,我才发现JAVA远比我想象的要复杂深奥的多,一个知识环节往往套着一堆更深入的知识,稍微一百度,就能牵扯到很多新的概念。对于我来说,JAVA学习的道路还很长,虽然目前我还是不能完全的消化掉书上的内容,但是我会努力通过实践和查阅更深入的资料将疑点一一解决。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 10/10
第二周 300/500 1/3 16/26
第三周 300/800 1/4 18/44
第四周 300/1100 1/5 18/62
第五周 250/1350 1/6 14/76
第五周 400/1750 2/8 14/90

参考资料

20145212 《Java程序设计》第6周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

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

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. android Baseadapter 和 ViewHolder的使用

    昨晚学习了徐大神的关于BaseAdapter的讲解,让我受益匪浅特来博客留下印记 说到baseadapter大家一定都不陌生,下面这张图就展示了数据.listview.baseadapter 之间的关 ...

  2. zabbix3.0安装教程

    一.Zabbix介绍 zabbix 简介 Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费 ...

  3. Beta项目冲刺 --第二天

    在几kb的上传速度中苦苦挣扎的程序员... 队伍:F4 成员:031302301 毕容甲 031302302 蔡逸轩 031302430 肖阳 031302418 黄彦宁 会议内容: 1.站立式会议照 ...

  4. SVN常见图标的含义

    项目视图   The Package Explorer view - 已忽略版本控制的文件.可以通过Window → Preferences → Team → Ignored Resources.来忽 ...

  5. Maven的生命周期和插件

    首先解释下maven build等 Maven build是这个插件让你自己去配置执行目标的.Maven clean 清除上一次Maven执行的结果Maven generate-sources会根据p ...

  6. android wifi热点 socket通信

    1.首先建立wifi热点服务器  wifi客户端连接 2.开启一个子线程循环监听某个端口,进行数据流输入输出 /* 服务器 接收数据 */ class Receiver extends Thread ...

  7. android相关技术及岗位

    Android应用开发    Android底层嵌入式    Android架构师 应用开发路线javaSE-->java for Android——>eclipse使用技巧-->A ...

  8. FragmentStatePageradapter 与 FragmentPageradapter的区别

    FragmentPageradapter : 会将fragment储存在内存中 每次加载页面读取内存中的fragment FragmentStatePageradapter: 不会将fragment储 ...

  9. java中的字符,字符串,数字之间的转换

    string 和int之间的转换 string转换成int  :Integer.valueOf("12") int转换成string : String.valueOf(12) ch ...

  10. ubuntu15.10下搭建cordova+ionic开发环境

    安装jdk 在命令下输入java如果没有安装会提示该命令包含于openjdk软件包 sudo apt-get install openjdk然后按下tab会列出openjdk开头的软件包 我这里就选择 ...