JAVASE第二阶段day7--day14 学习笔记
Day7
Set集合的特点:
1 无序(存储和读取的顺序有可能不一样)
2 不允许重复(要求元素唯一)
3 没有索引
HashSet
重写hashCoude()方法和equals方法 去重
Collections:
面试题:Collection和Collections区别?
Collection是集合体系的最顶层,包含了集合体系的共性
Collections是一个工具类,方法都是用于操作Collection
HashMap集合
Map:是一个双列集合,常用于处理对应关系的数据,key是不可以重复的,也称之为夫妻对集合
Collection:是单列集合,Coll有不同的子体系
Map的常用功能:
判断:boolean containsKey
Value
isEmpty 是否有对应关系
映射 :put(key,value):就是讲key映射到value,如果key存在,则覆盖value,并将原value返回
删除:clear 清空
remove(Object key)根据key删除指定对应
int size()返回对应关系个数
get 根据key返回指定value
Map的第一种遍历方式:
1 keySet
首先着急所有的丈夫key
遍历所有丈夫
获取每一个丈夫
让每一个丈夫去找自己媳妇
创建Map对象
添加映射关系
遍历Map对象
2 entrySet()
通过结婚证对象来获取丈夫媳妇
创建Map对象
获取所有结婚证对象
添加映射关系
遍历包含了结婚证的集合
获取每个单独的记混证对象
通过结婚证对象来
可变参数:当参数不确定,类型明确,Java可以把多个参数直接帮我们转成数组
实参:一个参数一个参数的传递
形参:类型...变量名
注意:在可变参数之后不可再追加参数
参数的数量自定义,可以给多给也可一个都不给
Day 8 异常
异常:在写代码时出现的编译或者运行时的错误
异常包含了错误的类型,原因及位置
异常的体系结构:
Throwable (最顶层)
Error:出现的不能够处理的严重问题
Exception:可以处理的问题 编译时异常
RuntimeException运行时异常
异常处理方式:
1捕获处理:
try...catch 语句
try{
有可能出现问题的代码;
}catch (异常类型 异常对象名 ){
处理异常;
}
try...catch 的执行顺序:
首先try语句,发现异常下面的将不再执行直接跳入catch 语句,catch结束整个语句结束
如果没有发现发现语句,try执行完后,语句直接结束,不在执行catch
2抛出异常
当我们不想处理或者没有能力处理异常的时候,我们可以选择抛出去,水调用方法水处理异常
使用关键字throws在方法声明处抛出异常
jvm处理异常方式:
如果出现异常没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置现实在明亮行
并且还终止了程序,异常后面的代码将不再执行
如何处理多个异常:
1 可以使用多个try...catch语句
2 使用一个try和多个catch
多个catch之间的顺序:
可以有子父类
评级之间没有顺序
如果有子父类,父类异常必须放在后面
Throwable 常用方法:
String getMessage() 原因
String toString() 类型和原因
void printStackTrace() 类型原因和位置
finally
try{
有可能出现问题的代码;
}catch (异常类型 异常对象名 ){
处理异常;
}finally{
释放资源;
清理垃圾;
}
异常的分类:
1 运行时期异常
2 编译时期异常
注意:如果抛出的是编译时期异常,必须在方法声明处上抛出(throws)
递归:把大问题拆成很多小问题,然后把小问题茶城更多小问题,
当我们把更多小问题解决了,小问题也解决了,随着,大问题也随之解决了
递归注意事项:
递归一定要有出口,内存溢出
递归次数不宜过多,内存溢出
Day9 IO流
一:File类
File:文件和目录路径吗名的抽象表示形式,File类的实例是不可变得
构造方法:
File(String pathname):将制定的路径名转换成一个File对象
File(String parent,String child)根据制定父路径和文件路径创建File对象
File(File parent,String child)根据制定父路径和文件路径创建File对象
FIle常用功能:
创建功能 boolean createNewFile()
删除功能 boolean delete()
获取功能 File get
String get
判断功能 boolean exists()
注意:删除一个文件夹,该文件夹下不能有其他文件和文件夹
File重要获取功能:
String[]list()返回当前路径下所有文件和文件夹名称
File[]listFiles()
static File[]listRoots()返回的是所有盘符
IO流分类“
输入流,读取数据 FileReader Reader
输出流,写出数据 FileWriter Writer
数据类型:
字节流:
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer
路径
绝对路径
以盘符开头: E:\\a\\a.txt
相对路径
以斜杠开头: \\a\\a.txt
以文件/目录名开头: a
Day10
标准流
System.err: 标准错误流. (命令行输出错误信息)
System.in: 标准输入流. (键盘输入)
是InputStream类, 属于字节输入流
System.out: 标准输出流. (控制台输出)
是OutputStream的子类PrintStream, 属于字节输出流
转换流
InputStreamReader: 字节输入流转字符输入流
是Reader的子类, 属于字符输入流
OutputStreamWriter: 字符输出流转字节输出流
是Writer的子类, 属于字符输出流
特点
转换流也是包装类, 需要传入实际的输入输出流对象
打印流
PrintStream: 字节打印流
PrintWriter: 字符打印流
注意
打印是输出操作, 所以打印流只有输出, 没有输入
PrintWriter打印流的特点
可以自动换行, println(). 会根据系统自动确定换行符
不能输出字节, 可以输出其他任意类型(要输出字节需要使用PrintStream)
通过构造方法的配置可以实现自动刷新(flush)(只在调用println, printf, format时有用)
也是包装流, 自身没有写出功能
可以把字节输出流转换为字符输出流
关流不会抛出异常(此类中的方法不会抛出 I/O 异常,尽管其某些构造方法可能抛出异常)
list方法和store方法的区别
list只能接收打印流(PrintStream, PrintWriter)
store可以接收任何输出流(OutputStream, Writer)
Properties 集合
Properties 表示了一个持久性的属性集,属性列表中每个键及其对应值都是一个字符串
构造方法:
Properties()
编码表:把计算机底层的二进制数据转换成我们看懂
ASCII 码表
GB2312 --- GBK
Unicode 所有字符都占两个字节
UTF—8 长度可变的码表
ANSI:本地编码表 gbk
乱码:编码保持前后一致即可解决
Day 11
多线程:
进程 Process :当前正在运行的程序,一个应用程序在内存中的执行区域
线程 Thread :进程中的一个执行控制单元,执行路径
一个进程可以有多个线程,也可以有一个
单线程:安全性高,效率低
多线程:安全性低,效率高
多线程的实现方式1: 继承Thread类
创建线程实例
MyThread mt=new MyThread();
启动线程
mt.start();
String getName()返回该线程的名称
void setName(String name)改变线程名称
主方法是单线程 main
多线程的实现方式2 :实现Runnable接口
static Thread currentThread();返回当前线程对象
问题出现原因:
要有多个线程
要有被多个线程所共享的数据
多个线程并发的访问共享数据
synchronized:同步(锁),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他程序无法访问
同步代码块:
格式:
synchronized(锁对象){
需要同步的代码
}
注意:锁对象需要被所有的线程共享
同步:安全性高,效率低
非同步:效率高,但是安全性低
同步方法:
使用关键字synchronized修饰的方法,一旦被某个线程访问则被锁住
synchronized 同步方法的锁对象是this
静态的同步方法的锁对象是当前类的字节码对象
Day12
网络通信三要素:
传输协议
IP地址
端口号
InetAddress :此类表示互联网协议(IP)地址
使用UDP协议发送数据
创建发送端Socket对象
创建数据并打包
发送数据
释放资源
DatagramSocket 此类表示用来发送和接受数据,基于UDP协议的
使用UDP协议接收数据
创建接收端Socket对象
接收数据
解析数据
输出数据
释放资源
UDP收发数据注意事项:
端口号错误,数据可以正常发出,不会出现异常,但是收不到数据
端口号已经绑定了,端口号不能重复
使用TCP协议发送数据
创建发送端Socket对象(创建连接)
获取输出流对象
发送数据
释放资源
使用TCP协议接受数据
创建接收端Socket对象 ServerSocket:接收端《服务端Socket
监听(阻塞)
获取输入流对象
获取数据
输出数据
释放资源
Day13
反射:Reflection
在运行时,我们可以获取任意一个类的所有方法和属性
在运行时,我们可以调用任意一个对象的所有方法和属性
反射的前提:
要获取类的字节码对象(Class对象)
1 通过类名获取字节码对象 对象.getClass()
2 通过Object的getClass()方法获取,必须有对象 类名.class
3 Class.forName(String className)
通过反射获取构造方法
Constructor<?>[]getConstructors 获取所有public修饰的构造方法
.getConstructor() 过去无参
.getConstructor(String.class,int.class)获取有参
newInstance()获取无参
通过反射获取成员变量
//获取学生类的字节码对象
//获取学生类的对象
Field[]getFields()获取公共
getDeclaredFields()获取所有
Field getField(String name)根据字段名称获取公共的字段对象
set ( , )
通过反射获取私有的成员变量并使用
//获取学生类的字节码对象
//获取学生类的对象
//获取私有的字段对象
setAccessible(true)
通过反射获取成员方法
//获取学生类的字节码对象
//获取学生类的对象
//获取无参无返回值的方法
//获取有参无返回值的方法
//获取无参有返回值的方法
invoke
JavaBean:用于封装数据
类使用公共进行修饰
提供私有修饰的成员变量
为成员变量提供公共getter和setter方法
提供公共无参构造
实现序列号接口
BeanUtils:Apache Commons提供的一个组件,
主要功能就是为了简化JavaBean封装数据的操作
注意:BeanUtils的setProoerty和get方法底层并不是直接操作成员变量而是有关的get set方法
Day14 xml
xml是指可扩展标记语言
描述数据
XML只能有一个跟标签
注释只能写在文档声明下面,不能嵌套注释
把标签写成普通文本
DTD 约束
Schema 约束
xml解析
DOM:将整颗树一口气全部加载到内存中,我们可以随便操作标签和属性,但树太大了内存会溢出
节点:标签,属性,文本,甚至是换号都称之为节点
SAX:一个节点一个节点的进行解析
XML解析开发包
JAXP sun公司
Dom4j Dom for j 开源组织
* `org.dom4j.io.SAXReader`类: SAX解析器
* 构造方法:
* `SAXReader()`: 创建一个SAX解析器
* 成员方法:
* `Document read(String systemId)`: 读取XML文件, 返回一个Document对象
* `org.dom4j.io.OutputFormat`类: 配置XML输出格式
* `static OutputFormat createPrettyPrint()`: 创建一个用户输出美观格式的OutputFormat对象
* `void setEncoding(String encoding)`: 设置字符集
* `org.dom4j.io.XMLWriter`类: 用于向XML中写入数据的输出流
* 构造方法:
* `XMLWriter(OutputStream out)`: 使用字节流创建一个XMLWriter对象
* 成员方法:
* `void write(Document doc)`: 将Document对象中的数据写入到XML文件
* `org.dom4j.Document`接口: 代表一个XML文档
* `Element getRootElement()`: 获取根元素对象. 需要用根元素获取其他子元素
* `org.dom4j.Element`接口: 代表一个元素
* 获取元素信息
* `String getName()`: 获取元素名
* 元素增删改查
* 获取元素
* `List<Element> elements()`: 获取调用元素对象的所有子元素
* `List<Element> elements(String name)`: 获取所有的指定名称的子元素
* `Element element(String name)`: 获取第一个该名称的子元素对象
* `Element getParent()`: 获取当前元素的父元素对象
* 添加元素
* `Element addElement(String elementName)`: 在当前元素下添加指定名称的子元素
* 删除元素
* `boolean remove(Element child)`: 删除子元素
* 操作元素中的文本
* `String elementText(String name)`: 获取第一个该名称的子元素的文本内容
* `String getText()`: 获取当前元素对象的文本
* `void setText(String text)`: 设置当前元素对象的文本
* 操作元素的属性
* `String attributeValue(String name)`: 根据指定的属性名获取属性值
* `Element addAttribute(String name, String value)`: 添加或修改指定属性名的属性值
* `org.dom4j.DocumentHelper`类:
* `static Element createElement(String name)`: 使用指定名称作为元素名, 创建一个元素对象
|
|