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时,程序从断言处停止
第十章 输入、输出流
- 所有输入流都是抽象类
InputStream或Reader的子类 - 所有输出流都是抽象类
OutputStream或Writer的子类
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 |
参考资料
20165230 2017-2018-2 《Java程序设计》第5周学习总结的更多相关文章
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 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入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
随机推荐
- No module named 'MySQLdb' python3.6 + django 1.10 + mysql 无法连接
学习python 连接mysql数据库的时候遇到了问题 首先安装mysql: 工具栏 ===>file ==> default settings==>Project Interpre ...
- Java面试题大汇总
前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...
- 计算机网络【10】—— Cookie与Session
一.cookie 和session 的区别 a.cookie数据存放在客户的浏览器上,session数据放在服务器上. b.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKI ...
- 【Java并发编程】之八:多线程环境中安全使用集合API
在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...
- BZOJ5092 分割序列(贪心)
设si为该序列的异或前缀和,则显然相当于求Σmax{sj+sj^si} (i=1~n,j=0~i).从高位到低位考虑,如果该位si为1,无论sj怎么填都是一样的:如果该位si为0,则sj该位应尽量为1 ...
- Linux使用vim进行多文件查找和替换的方法
vim是Linux系统下常用的文本编辑,通过使用多种shell命令能够实现多文件的查找和替换,那么具体会使用到那些命令呢?下面小编就给大家介绍下Linux系统vim多文件查找和替换的方法. 在linu ...
- spring管理hibernate,mybatis,一级缓存失效原因
mybatis缓存:一级缓存和二级缓存 hibernate缓存:一级缓存和二级缓存 关于缓存: 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器, 其作用是为了减少应 ...
- GridView中网络图片延迟加载导致高度计算失败的问题
在使用下拉刷新以及加载更多控件的时候,出现了列表上滚不完的现象,经过半天的分析,最后得出结论:由于图片采用了延迟加载,导致列表按照没有加载图片时候的大小进行布局,相关的加载更多控件也就傻逼了. 最终解 ...
- bzoj 4568: [Scoi2016]幸运数字
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 848 Solved: 336[Submit][Status ...
- python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数
三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...