黑马程序员技术交流社区
标题: 【石家庄校区】学习笔记 [打印本页]
作者: 韶华白首zy 时间: 2018-4-23 14:53
标题: 【石家庄校区】学习笔记
本帖最后由 小石姐姐 于 2018-4-24 19:30 编辑
学习笔记
B构造方法
File(String partname)
File(String paent,String child)
File(File parent,String child)
C创建和删除功能
返回值 | | |
| | 指定路径不存在文件时创建文件并返回true 否则false |
| | 指定路径不存在时创建文件夹,并返回true,否则false |
| | 指定路径不存在时创建多级目录,并返回true,否则false |
| | |
D类的判断功能
E File类的获取和修改名字功能
返回值 | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | 将当前的File对象所指的路径进行修改(需要创建新的File对象) |
| | |
| | |
| | |
IO字节流
A分类
字节流
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer
B字符流特点
字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储
而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件
C字节流复制文件
FileInputStream fi=new FileInputStream(“源文件”);
FileOutputStream fo=new FileOutputStream(“目标文件”);
(1)一次读写一个数组
Int len;
Byte []by=new byte[1024];
While((len=by.read(by))!=-1){
Fo.write(by,0,len);}
(2)一次读写一个字节
Int len;
While((len=by.read())!=-1){
Fo.write();}
fo.close();
fi.close();
路径
A相对路径
§
以斜杠开头: \\a\\a.txt
以文件/目录名开头: a.txt, src
项目根目录: .
B绝对路径
以盘符开头: E:\\a\\a.txt
转换流
A: OutputStreamWriter:将字节输出流转换为字符输出流
例:将根目录下的文件输出到控制台
BufferedReader br=new BufferedReader(new FileReader(“源文件”));
BufferedWriter bw=new BufferedWriter(new OutputStreamWrite(System.out));
String line;
While((line=br.read())!=null){
bw.write(line);
bw.newLine();}
Br.close();
Bw.close();
B: InputStreamReader:将字节输入流转换为字符输入流
例:将控制台输入的字符存入目标文件当中
Reader i=new InputStreamReader(System.in);
FileWrite fw=new FileWrite(“目标文件”);
Int len;
Char[]arr=new arr[1024];
While((len=i.read(arr))!=-1){
Fw.write(arr,0,len);
Fw.flush();}
I.close();
Fw.close();
打印流
§ A 分类
PrintStream: 字节打印流
PrintWriter: 字符打印流
§ B方法
方法
(1)构造方法
PrintWriter PrintWriter(String filepath)
PrintWriter PrintWriter(Writer out, boolean autoFlush): 创建对象, 同时设置是否自动刷新
PrintWriter(OutputStream out, boolean autoFlush): 创建对象, 同时设置是否自动刷新
(2)成员方法
void write(String s): 写一个字符串
void print(String s): 输出字符串, 没有换行
void println(String s): 输出字符串并换行. 如果启动了自动刷新, 则会执行自动刷新写入数据
void printf(Locale l, String format, Object... args): 使用指定格式字符串和参数将格式化的字符串写入输出流. 如果启动了自动刷新, 则会执行自动刷新写入数据
void format(Locale l, String format, Object... args): 使用指定格式字符串和参数将格式化的字符串写入输出流. 如果启动了自动刷新, 则会执行自动刷新写入数据
§ 对象操作流
A作用: 读写对象到文件
ObjectInputStream: 对象输入流
ObjectOutputStream: 对象输出流
B注意
使用对象输出流写出对象到文件, 该文件只能使用对象输入流读取对象
只能将实现了java.io.Serializable接口的对象写入流中
Serializable接口
A定义
标记接口, 用于标记该类可以序列化
private static final long serialVersionUID: 序列版本号. 用于确定对象和类定义是否一致
InvalidClassException用对象读取流时发生该异常的原因:
该类的序列版本号与从流中读取的类描述符的版本号不匹配
该类包含未知数据类型(即可能添加了新的成员变量或方法)
该类没有可访问的无参数构造方法
B方法
构造方法:
ObjectOutputStream ObjectOutputStream(OutputStream out): 创建对象输出流
ObjectInputStream ObjectInputStream(InputStream in): 创建对象输入流
成员方法
void writeObject(Object o): 将对象写入对象输出流
Object readObject(): 从对象输入流读取对象, 一次只读取一个对象. 当读不到时抛出EOFException.
Properties
A含义
继承Hashtable<K, V>, 实现Map<K, V>
B作用:
以键值对方式保存信息到文本文件
C应用场景:
作为程序的配置文件
注意不能存null的键和值
只能保存英文字符和符号, 默认使用ISO-8859-1编码, 存中文会显示乱码
D注意:
如果配置文件保存为.txt, 会变成GBK编码, 可以显示中文. 但一般都存为.properties, 使用ISO-8859-1, 显示不了中文
键和值都是字符串
E方法
构造方法
Properties Properties()
成员方法
可以使用Map的方法
String getProperty(String key): 根据键获取值. 如果找不到该键, 则返回null
String getProperty(String key, String defaultValue): 根据键获取值, 如果值不存在, 则使用指定的默认值
void setProperty(String key, String value): 设置键值对
void load(InputStream in): 从字节输入流中读取Properties
void load(Reader reader): 从字符输入流中读取Properties
void list(PrintStream out): 将Properties输出到指定的字节打印输出流. 会自动加一个-- listing properties --文件头
void list(PrintWriter out): 将Properties输出到指定的字符打印输出流. 会自动加一个-- listing properties --文件头
void store(Writer writer, String comments): 将Properties输出到指定的输出流, 并添加一个注释. 如果不想要注释可传null. 无论有没有注释, 都会添加时间字符串的注释
void store(OutputStream os, String comments): 同上, 只是流不同
list方法和store方法的区别
list只能接收打印流(PrintStream, PrintWriter)
store可以接收任何输出流(OutputStream, Writer)
Properties读写操作步骤
写出到文件
创建Properties对象, 添加键值对, 使用list()或store()保存到文件中
从文件读取
创建Properties对象, 使用load()从文件加载数据, 使用getProperty()根据指定键获取值, 或使用遍历Map的方式遍历所有键和值
多线程
A定义
(1)进程:Process 一个应用程序在内存中的执行区域
(2)线程;Thread,是一个进程中的一个执行路径
(3)一个进程中可以有多个线程,每个线程可以执行自己的代码
B特点
(1)单线程同一时间只能做一件事,安全性高,但是效率低
(2)多线程 同一时间可以做多件事,安全性低,效率高
创建线程的方式
A,继承Thread类
(1)构造方法
Thread Thread();创建Thread对象
Thread Thread(Runnable r)通过Runnable对象创建Thread对象
(2)成员方法
Void run(); 用于让子类重写,表示该线程要执行的任务,不能直接调用
Void start(); 启动线程,就是让线程开始执行run方法里的代码
String getName();获取线程的名称
Void setName();设置线程名称
(3)静态方法
Static Thread currentThread();返回对当前正在执行的线程对象的引用
Static void sleep(long millis);让所在线程睡眠指定毫秒
(4)多线程实现方式
定义一个类,继承Thread
在子类中重写父类的run方法
创建子类的对象
调用子类的start方法,启动线程
B实现Runnable接口
(1)Runnable接口出现的原因
因为java只支持单线程,如果继承了Thread类,就无法继承其他类,局限性太大,
所以使用实现Runnable接口的方法,既能继承其他类,还能实现多个接口,不影响类 的扩展性
(2)步骤
定义一个类,实现Runnable接口
在子类中重写父类的run()方法
创建一个子类对象
创建Thread对象,在其构造方法中传入刚才创建的子类对象
多线程安全问题
A原因
线程会在执行过程中根据CPU调度来随机切换,可能暂停在任何一行代码上
多个线程同时操作了共享数据,在共享数据还没有发生变化时,其他线程就会继续操作,导致数据不准确
B解决方法
使用同步代码块
使用同步方法解决
面向网络
A,InetAddress 类
用于封装一个ip地址
B,方法
Static InetAddress getByName(String host)给定主机名确定ip地址
Static InetAddress getHostName()获取此ip地址的主机名
Static InetAddress getLocalHost()返回本地主机
String getHostAddress()返回ip地址字符串
C DatagramPacket 类
用于封装udp通信中接收或者发送数据
D构造方法
DatagreamPacket(byte[]buf,int length)
DatagramPacket(byte[]buf,int length,InetAddress address,int port)
UDP协议
A: UDP发送数据步骤
1. 为发送端创建Socket对象(DatagramSocket)
DatagramSocket datagramSocket = new DatagramSocket();
2. 创建数据并打包
DatagramPacket datagramPacket = new DatagramPacket(byte数组, 数组长度,
InetAddress对象, 端口号);
3. 发送数据
datagramSocket.send(datagramPacket);
4. 释放资源
datagramSocket.close();
B;UDP接收数据步骤
1. 创建接收端Socket对象:
DatagramSocket datagramSocket = DatagramSocket(接收方端口号);
2. 接收数据
DatagramPacket datagramPacket = new DatagramPacket(byte数组, 数组长度);
datagramSocket.receive(datagramPacket); // 该方法会阻塞等待接收数据
3. 解析数据
InetAddress inetAddress = datagramPacket.getAddress(); // 获取发送方IP地址
byte[] bytes = datagramPacket.getData(); // 获取数据
int dataLength = datagramPacket.getLength(); // 获取数据长度
String s = new String(bytes, 0, dataLength);
4. 输出数据
System.out.println(s);
5. 释放资源:
datagramSocket.close();
C:注意事项
不区分发出端与接收端,信号传输不能保证完整性,但效率高.
TCP协议
A: TCP发送数据步骤
// 1. 创建客户端Socket对象(建立连接)
Socket socket = new Socket(InetAddress地址, 端口号);
// 2. 获取输出流对象
OutputStream outputStream = socket.getOutputStream();
// 3. 发送数据
outputStream.write(byte数组);
// 4. 释放资源
socket.close();
B: TCP接收数据步骤
/ 1. 创建服务端ServerSocket对象:
ServerSocket serverSocket = new ServerSocket(端口号); // 指定要监听的端口号
2. 监听数据
Socket socket = serverSocket.accept(); // 该方法会阻塞, 直到有客户端连接
3. 获取输入流对象
InputStream inputStream = socket.getInputStream();//
4. 获取数据
int dataLength = inputStream.read(装数据的byte[]数组);
String s = new String(byte[], 0, dataLength);
5. 输出数据
System.out.println(s);
6. 释放资源:
s ocket.close();
serverSocket.close();
反射
A概念
反射可以在不修改源代码的前提下, 改变程序的运行方式
反射是后期web框架的底层实现基础, 帮助我们更好理解框架的原理
B使用
前提条件: 获取一个类的字节码对象, 然后通过该字节码对象可以:
获取一个类的所有构造方法
创建一个类的对象
获取一个类的所有成员属性
获取属性值
设置属性值
获取一个类的所有成员方法
调用成员方法
C获取成员属性
Field[] getFields(): 获取所有public的成员变量
Field[] getDeclaredFields(): 获取所有权限的成员变量, 包括private的
Field getField(String fieldName): 通过指定的成员变量名获取指定的public的成员变量
Field getDeclaredField(String fieldName): 通过指定的成员变量名获取指定的所有权 限的成员变量, 包括private的
D获取成员方法
Method[] getMethods(): 返回所有public的方法数组
Method[] getDeclaredMethods(): 返回所有权限的方法数组
Method getMethod(String name, Class<?>... parameterTypes): 获取public的方法, 传 入方法名和方法形参字节码对象
Method getDeclaredMethod(String name, Class<?>... parameterTypes): 获取所有权限 的指定方法, 传入方法名和方法形参字节码对象
BeanUtils
A概念
Apache组织提供的第三方类库Commons中的一个组件
利用反射技术给一个类的对象的成员属性赋值或获取值, 用于快速封装数据 到JavaBean
B使用
常用的3个方法
(1)static void setProperty(Object bean, String name, Object value): 给JavaBean对象的成员属性赋值, 传入对象, 成员属性名, 属性值
(2)static String getProperty(Object bean, String name): 获取JavaBean成员属性的属性值, 传入对象, 成员属性名, 返回属性值的字符串形式
(3)static void populate(Object bean, Map properties): 给JavaBean对象的成员属性赋值, 传入对象, Map的key是属性名, value是属性值
Web
A概念
超文本标记语言:就是通过一组标签描述一项事物的语言
B作用
用于制作静态的网页页面
C标签
根标签 <html></html>
头标签 <head></head>
体标签<body></body>
字体标签<font 属性名=”属性值” 属性名=”属性值”></font>
Font中的属性 size属性 字体大小
Face 属性 字体
Color属性 颜色
<p></p>段落标签 <b></b>字体加粗 <i></i>字体斜体
<u></u>下划线 <center></center>居中
<hr></hr>以横线换行 <br></br>换行
图片标签
A图片标签<img>
属性 src图片来源 width=”xxpx”图片的宽 px表示像素
Heig=”xxpx”图片的高 alt如果找不到图片输出的话
Src找的都是相对路径 同级路径可以直接写文件名
上一级路径../文件名 上两级路径../../文件名
下一级路径 文件夹名/文件名
D列表标签
(1)有序列表
<ol><li></li></ol>打出的列表前面有编号
属性 type(1:数字类 a:英文 i:拉丁)
(2)无序列表
<ul><li></li></ul>列表没有前面的顺序排列
属性 type(disc:实心点 circle:空心圆 square方块)
E超连接标签<a>
属性 href 连接路径
Target打开连接的方法(_self在本页面直接打开_blank新打开一个窗口打开)
F表格标签
<table></table>
<tr>(行数)
<td></td>列数
</tr>
(1)Table属性 width 表格的宽度(可以写百分比) height 表格的高度
Border边框的宽度 align水平位置(left左边right右边center居中)
(2)Td属性colspan=”列数”(就是合并单元格后所占的列数)
Rowspan=”行数”(就是合并后所占的行数)
表单标签
A :HTML的表单标签:<form>
* 常用属性:
* action属性:提交的路径.默认提交到当前页面
* method属性:请求的方式.GET和POST.默认是GET.
B:***** GET方式和POST方式的区别?
* GET :数据会显示到地址栏中.GET方式提交是有大小的限制.
* POST :数据不会显示到地址栏中.POST方式提交的是没有大小限制.
C:HTML中表单元素:
(1) <input type=”text”> :文本框.
常用属性:
name :表单元素的名称.必须有name属性,然后后台才可以接收数据.
value :文本框的默认值.
size :文本框的长度.
maxlength:文本框输入的最大长度.
(2) readonly:只读文本框.
(3)<input type=”password”> :密码框.
常用属性:
name :表单元素的名称.必须有name属性,然后后台才可以接收数据.
value :密码框的默认值.
size :密码框的长度.
maxlength:密码框输入的最大长度.
(4) <input type=”radio”> :单选按钮.
常用的属性:
name :表单元素的名称.必须有name属性,然后后台才可以接收数据.
value :单选按钮的默认值.
checked:单选按钮默认被选中.
(5) <input type=”checkbox”> :复选按钮.
(6) 常用的属性:
name :表单元素的名称.必须有name属性,然后后台才可以接收数据.
value :单选按钮的默认值.
checked:单选按钮默认被选中.
<input type=”button”> :普通按钮.没有任何功能的按钮.
<input type=”submit”> :提交按钮.
<input type=”reset”> :重置按钮.
<input type=”file”> :文件上传的表单项.
<input type=”hidden”> :隐藏字段.
<input type=”image”> :图片按钮
<select> :下拉列表.
<textarea> :文本域.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |