Day06
Map接口
Map内存储的是[键:值]对这样以成对的对象组(可以把一组对象当成一个元素)
通过"键"对象来查询"值"对象
Map是不同于Collection的另外一种集合接口
Map中,key值是唯一的(不能重复),而value可以重复,key对象时与value对象
关联在一起的
重复的添加同一个key的value,相当于替换操作,之前的value被新添加的value
覆盖掉了
Map接口有两个实现类:
HashMap key:value对 是按照hash算法存储的
HashMap 又叫散列桶,默认散列桶数量(元素个数)16,散列因子为0.75
TreeMap key:value对 是排序(Key)存储的
Map接口中常用方法:
put(Object key,Object value)添加元素
putAll(Map t)将映射t中的所有映射关系复制到此映射中
get(Object key)返回此映射中映射到指定键的值
remove(Object key)若存在此键的映射关系,将其从映射中移除
containsKey(Object key)若此映射包含指定键的映射关系,返回true
containsValue(Object value)若此映射为指定值映射一个或多个键,返回true
size() 返回此映射中的键值对对数
clear()清楚所有
isEmpty()若此映射未包含键-值关系,返回true(判断是否为空,空-true)
keySet()返回此映射中包含的键的set视图(显示出所有键)
返回包含此Map中所有键的Set型集合
values()返回此Map中包含所有value的Collection集合
Map的遍历
Map不能直接使用任何工具进行遍历
有两种方法遍历Map
1.把Map转换成keySet()视图,然后对这个Set进行遍历
2.把Map转换成Collection values 然后进行遍历
无论是Set还是Collection都不能使用普通for循环遍历
这事数据结构决定的
练习
在Test类中的main方法中创建一个Map,把咱们屋里所有人的姓名添加进去
Key---为添加顺序
Value-为姓名
因为随军和张合没来,删除他俩
然后添加一人,名字叫,苍井空(需要判断map中是否含有这个人,如果没有就添加)
遍历
创建一个学生类
属性:
姓名 年龄 性别
家庭住址 家长联系电话
属性设为私有,set get方法
重写toString,equals,hashCode方法
创建一个学校类
属性:
学校的名字 建校时间 校址
学生 分数 科目
其中学生与科目和分数互相映射
科目与分数互相映射
科目固定为数学,英语,语文,物理,化学
方法:
1.添加学生的方法
2.录入某个学生的方法
3.修改学生信息的方法
------------------------------------------------------------------------------------------------
Day07
IO流
Input and Output 输入 输出流
File类
该类用于描述文件系统中的一个文件或目录
File:通过它我们可以获取其描述的文件或目录的属性信息
对于文件的读写:RandomAccessFile
定义一个方法,传入一个String类型路径,显示出这个路径下的所有子项
名字和大小,是否可读,是否可写,最有一次修改时间
定义一个方法,实现把一个File复制到另一个File里面去
定义一个方法,查看一个目录里面包含多少个子项(子项里面的也算)
------------------------------------------------------------------------------------------------
Day08
IO流
流是按照我们编程人员角度去说的
输入流input(读取),输出流output(写入)
输入流:用于读取数据
输出流:写出数据
程序员→内存---输出流
程序员←内存---输入流
我们看待输入流与输出流是站在我们编写的程序的角度
流分为高级流与低级流
低级流:节点流
数据有明确的来源或去向
高级流:过滤流,处理流
不能独立存在,必须依托另一个流工作,往往使用高级流是为了简化读写
按照流向不同分为:输入流和输出流
按照读取的单位不同:
字节流: 一个byte
字符流: 一个char 只能用于文本格式的读写
FileInputStream:文件字节输入流
FileOutputStream:文件字节输出流
FileInputStream三个基本方法
int read() 读取一个字节,并将它返回
int read(byte[] b) 将数据读入一个字节数组,同时返回读取的字节个数
int read(byte[] b,int start,int length)将数据读入一个字节数组
放到数组的start指定位置,并用length来指定读取的最大字节数.
这三个方法读取到文件末尾时,都返回-1,可以用来判断是否全部读取完毕
其它方法:
void close() 关闭流
int available()返回可以从中读取的字节数
long skip(long n)在输入流中跳过n个字节,将实际跳过的字节数返回
FileOutputStream三个基本方法:
void write(int c); 写入一个字节
void write(byte[] b);写入一个byte数组
大专栏 Java学习Day06-10-培训班void write(byte[] b,int start,int length)
把byte数组b中的start开始length个长度写入到文件中
其它方法:
close()
flush():将缓冲中的字节发送到流中,同时清空缓存区
InputStream接口 低级流 输入流
InputStream:所有字节流的超类
OutputStream接口 低级流 输出流
OuputStream:所有字节流的超类
字符流
Reader/Writer处理的是字符类型的数据.它处理流的方式是以字符为
单位进行的(接口)
Reader:输入流
Writer:输出流
Reader/Writer也分为低级流(节点)和高级流(处理)
Reader低级流类
CharArrayReader
StringReader
PipedReader
FileReader
Reader高级流类
BufferedReader
InputStreamReader
LineNumberReader
------------------------------------------------------------------------------------------------
Day09
序列化与反序列化
序列化(Serialization)是将对象的信息转换为可以存储或传输的形式的过程
一般将一个对象存储至一个存储媒介,例如档案或是记忆体缓冲等.在网络传输
过程中,可以是字节或者是XML格式.而字节的XML编码格式还可以还原完全相等
的对象.这个相反的过程被称之为反序列化
Java对象的序列化与反序列化
在Java中我们可以通过很多方式来创建对象,并且只要对象没有被回收我们都可以
使用该对象,但是,我们创建出来的这些Java对象收拾存在于JVM的堆内存中.只有
JVM处于运行状态的时候,这些对象才可能存在,一旦JVM停止运行,这些对象的状态
也就随之而去了(丢了).
但是在真实的应用场景中,我们需要将这些对象持久化下来,并且能够在需要时在把
对象读取出来.Java的对象序列化就可以帮助我们实现该功能
对象序列化机制(object serialization) 是Java语言内建的一种对象持久化
方式
要想序列化一个对象,那么这个类必须实现Serializable接口
------------------------------------------------------------------------------------------------
Day10
异常:
什么是异常?
就是程序在运行时出现的不正常情况
异常的由来:
写程序是为了描述现实生活中的事物,那么现实生活中也包含很多的问题
而问题本身也是现实生活中的一类事物,也可也通过Java类的形式进行描
述并封装成对象,Java对描述问题的对象称之为不正常情况,也就是异常
Java中对对于问题的描述类是Throwable(Throwable是所有异常或错误的父类)
Java中对于问题的划分分为两种:
1.严重的问题,Java通过Error类进行描述
对于Error 一般我们不编写针对性的代码对其进行处理
2.是非严重的问题,Java通过Exception类进行描述
对于Exception可以使用针对性的代码对其进行针对性处理
对于Exception异常的处理
try{
被检测的代码;
}catch(异常类 变量){
处理异常的代码(处理方式);
}.................catch(){
}finally{
一定会执行的代码;
}
声明异常
在函数参数列表的后面写上throws 异常类 来声明一个异常,通知调用者
本方法可能会存在问题,调用者必须做出回应(处理方式),否则就编译失败
对于该问题有两种处理方式
1.把问题抛出给JVM(throws),JVM的处理方式就是终止程序
2.捕获该问题并做出处理(try catch)
多异常的处理
1.一个函数中可能会存在很多种异常,建议每种异常都声明的更为具体些
2.一个函数声明了几个异常,调用者就写几个catch代码块
原则:父类异常在后,子类异常在前
不要在catch快里写输出语句等简单的处理方法,要写具体处理方法
练习:
定义一个函数,声明
ArithmeticException
ArrayIndexOutOfBoundsException
异常,在main方法中调用该函数,try catch 除了声明的两种异常外
再加上空指针异常和Exception异常 对于算数异常的处理方式为等于
一个int类型最小值,数组越界异常处理方式为,输出一句话"越界了"
NullPointerException
自定义异常
class 自定义异常名a extends Exception{
}
使用
throw new a();
练习:
自定义3个异常类,在Demo04测试类里面定义一个函数,这个函数可能会
引发我们定义的这3个异常,在该函数中声明并确定在什么情况下抛出那个
异常,在main方法中调用该函数
自定义5个异常类,MeOne.........Exception
定义一个函数,该函数对String类型进行排序,如果这个字符串中不都是
大或小写英文字母,就抛出AbcException异常(自定义的),在Demo05中进行
测试
控制台输入月份判断这个月多少天?(2017)
如果输入月份不对就抛出MonthException异常