本帖最后由 小石姐姐 于 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> :文本域.
|