20145223《Java程序设计》第6周学习总结
20145223 《Java程序设计》第6周学习总结
教材学习内容总结
·Java中将数据从来源取出或是将数据写入目的地,使用输入、输出串流,其分别的代表对象为java.io.InputStream实例和java.io.OutputStream实例
·在不使用InputStream或者OutputStream实例的时候必须使用close()方法关闭串流。
FileInputStream fileInputStream =
new FileInputStream(new File(args[0]));
FileOutputStream fileOutputStream =
new FileOutputStream(new File(args[1]));
…
fileInputStream.close();
fileOutputStream.close();
while(true) {
if(fileInputStream.available() < 1024) {
//剩余的资料比1024字节少
//一位一位读出再写入目标文件
int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
}
break;
}
else {
//从来源档案读取数据至缓冲区
fileInputStream.read(buffer);
//将数组数据写入目标文件
fileOutputStream.write(buffer);
}
}
·FileInputStream是InputStream的子类,可指定文件名创建实例,文档创建后就可以直接读取数据。FileOutputStream是OutputStream的子类,同样可指定文件名创建实例读取数据。但是以上两者在不使用的时候也同样需要使用close()方法关闭文档。
·File实例用作一个档案或目录的抽象表示
File file = new File(args[0]);
if(file.isFile()) { //是否为档案
System.out.println(args[0] + "檔案");
System.out.print(
file.canRead() ?"可读" :"不可读");
System.out.print(
file.canWrite() ?"可写" :"不可写");
System.out.println(
file.length() +"位組");
}
else {
//列出所有的档案及目录
File[] files = file.listFiles();
ArrayList<File> fileList =
new ArrayList<File>();
for(int i = 0; i < files.length; i++) {
//先列出目录
if(files[i].isDirectory()) {//是否为目录
//取得路径名
System.out.println("[" +
files[i].getPath() + "]");
}
else {
//档案先存入fileList,待会再列出
fileList.add(files[i]);
}
}
//列出档案
for(File f: fileList) {
System.out.println(f.toString());
}
System.out.println();
}
·ByteArrayStream是InputStream的子类,可指定byte数组创建实例,创建后可将byte数组当做数据源进行数据的读取。(与此类似的还有OutputStream的子类ByteArrayOutStream)
·InputStream、OutS太热门提供串流基本操作。想要为输入或者输出的数据进行打包处理,可以使用打包器类。
·FileReader、FileWriter可以对文档做读写和写入,同时默认使用操作系统默认的编码进行编码的转换。
·想要存取的是一个文本文件,可直接使用java.io.FileReader、java.io.FileWriter类别
FileReader fileReader =
new FileReader(args[0]);
FileWriter fileWriter =
new FileWriter(args[0] + ".txt");
int in = 0;
char[] wlnChar = {'\r', '\n'};
while((in = fileReader.read()) != -1) {
if(in == '\n') {
//写入"\r\n"
fileWriter.write(wlnChar);
}
else
fileWriter.write(in);
}
fileReader.close();
fileWriter.close();
·想要目前流程暂停操作时间,可使用java.lang.Thread的静态sleep()方法,指定单位是毫秒,调用这个方法必须处理java.lang.InterruptedException。
·如果您的类别已经要继承某个类别,那么您就不能继承Thread类别
·继承了Thread类别,您就不能再继承其它类别
·实作java.lang.Runnable接口来定义具线程功能的类别
·Runnable接口中定义一个run()方法要实作
·在实例化一个Thread对象时,可以传入一个实作Runnable接口的对象作为自变量
·简单的继承Thread的例子:
public class EraserThreadextends Thread {
private boolean active;
private String mask;
…
//重新定义run()方法
public void run () {
while(isActive()) {
System.out.print(mask);
try {
//暂停目前的线程50毫秒
Thread.currentThread().sleep(50);
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
//启动Eraser线程
EraserThread eraserThread = new EraserThread('#');
eraserThread.start();
String password = scanner.next();
eraserThread.setActive(false);
·Runable
public class EraserimplementsRunnable { //实作Runnable
private boolean active;
private String mask;
…
//重新定义run()方法
public void run () {
while(isActive()) {
System.out.print(mask);
try {
//暂停目前的线程50毫秒
Thread.currentThread().sleep(50);
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
//Eraser实作Runnable界面
Eraser eraser = new Eraser('#');
//启动Eraser线程
Thread eraserThread = new Thread(eraser);
eraserThread.start();
String password = scanner.next();
eraser.setActive(false);
·进入Blocked状态,以下的几个对应情况让线程回到Runnable状态
--输入输出完成
--呼叫interrupt()
--取得对象锁定
--呼叫notify()或notifyAll()
Thread thread = new Thread(new Runnable() {
public void run() {
try {
//暂停99999毫秒
Thread.sleep(99999);
}
catch(InterruptedException e) {
System.out.println("I'm interrupted!!");
}
}
});
thread.start();
thread.interrupt(); // interrupt it right now
·线程完成run()方法,就会进入Dead,进入(或者已经调用过start()方法)的线程,不可以再次调用start()方法,否则会抛出错误。
·如果要停止线程,最好自行操作,让程序走完应有流程,而不是调用syop()方法
·wait()、notify()与notifyAll()是由Object类别所提供的方法
·当物件的wait()方法被调用,目前的线程会被放入对象的等待池中,线程归还对象的锁定
public synchronized void setProduct(int product) {
if(this.product != -1) {
try {
//目前店员没有空间收产品,请稍候!
wait();
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
this.product = product;
System.out.printf("生产者设定(%d)%n", this.product);
//通知等待区中的一个消费者可以继续工作了
notify();
}
public synchronized int getProduct() {
if(this.product == -1) {
try {
//缺货了,请稍候!
wait();
}
catch(InterruptedException e) {
e.printStackTrace();
}
}
int p = this.product;
System.out.printf("消费者取走(%d)%n", this.product);
this.product = -1; //取走产品,-1表示目前店员手上无产品
//通知等待区中的一个生产者可以继续工作了
notify();
return p;
}
教材学习中的问题和解决过程
·如果一个对象所持有的数据可以被多线程同时共享存取时,您必须考虑到「数据同步」的问题
·数据同步指的是两份数据整体性、一致性


·在学习的过程中,数据的不同步而可能引发的错误通常不易察觉,可能是在程序执行了几千几万次之后,才会发生错误。网上对于同步化有这样一个说法,这通常会发生在您的产品已经上线之后,甚至是程序已经执行了几年之后。
·所以,在程序一开始进行编译的过程中就要对同步化问题加以重视。
其他(感悟、思考等,可选)
随着往后的学习,我觉得java的内容越来越抽象和难以理解,很多时候你知道是这个一个东西,但是你不一定知道它是用来做什么的,在使用它的过程中应该注意些什么问题,甚至会和其他概念搞混。所以越往后,我觉得我投入java 的时间应该逐渐变多,不然书上的知识就很难完全消化理解了,也没有充足的时间进行动手实践了。
学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 4000行 | 20篇 | 400小时 | |
| 第一周 | 200/200 | 1/1 | 15/12 | |
| 第二周 | 180/380 | 1/1 | 18/12 | |
| 第三周 | 600/980 | 1/1 | 17/16 | |
| 第四周 | 400/380 | 1/1 | 16/15 | |
| 第五周 | 300/680 | 1/1 | 14/14 | |
| 第六周 | 200/200 | 2/2 | 10/10 |
代码托管截图


参考资料
20145223《Java程序设计》第6周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- iOS进阶面试题----多线程
1 多线程是什么 多线程是个复杂的概念,按字面意思是同步完成多 项任务,提高了资源的使用效率,从硬件.操作系统.应用软件不同的角度去看,多线程被赋予不同的内涵,对于硬件,现在市面上多数的CPU都是多核 ...
- 如何查看设备的 UDID
手机连接上电脑,打开 Xcode,确认手机已连上: command+shift+2,就可以查看到 UDID 了:
- iOS应用架构谈(三):View层的组织和调用方案(下)
iOS客户端应用架构看似简单,但实际上要考虑的事情不少.本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第二篇,主要讲View层的组织和调用方案.下篇主要讨论做View层架构的 ...
- AI调色板
AI新建图层时,要选择CMYK模式,才能出现如下图所示调色板,如果选RGB模式,那么调整颜色的时候只能通过输入RGB.
- Hive学习路线图(转)
Hadoophivehqlroadmap学习路线图 1 Comment Hive学习路线图 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig ...
- linux查看常用操作
linux下查看文件夹以及文件的大小: df命令可以显示目前所有文件系统的可用空间及使用情形 df -h Filesystem Size Used Avail Use% Mounted on /dev ...
- ***PHP Notice: Undefined index: ..问题的解决方法
首先,这个不是错误,是warning.所以如果服务器不能改,每个变量使用前应当先定义. 方法1:服务器配置修改 修改php.ini配置文件,error_reporting = E_ALL &a ...
- 重温WCF之WCF传输安全(十三)(1)前期准备之证书制作(转)
转载地址:http://www.cnblogs.com/lxblog/archive/2012/09/12/2682372.html 一.WCF中的安全方式 说到安全就会涉及到认证,消息一致性和机密性 ...
- Ubuntu16.04 + Win 10 双系统 时间同步,启动项顺序,NumLock指示灯常亮
1. Ubuntu & win10 双系统时间同步: 先在ubuntu下更新一下时间,确保时间无误: sudo apt-get install ntpdate sudo ntpdate tim ...
- 排队打饭 sdut 2443【最简单的贪心法应用举例】
排队打饭 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...