黑马程序员技术交流社区

标题: 【石家庄校区】学习笔记 [打印本页]

作者: 韶华白首zy    时间: 2018-4-23 14:53
标题: 【石家庄校区】学习笔记
本帖最后由 小石姐姐 于 2018-4-24 19:30 编辑

学习笔记

                                                                                                                                                                                                                                                                                     File类
A定文件和目录路径的抽象表现形式
B构造方法
     File(String partname)
     File(String paent,String child)
     File(File parent,String child)
C创建和删除功能
     
返回值
方法
说明
boolean
careateNewFile()
指定路径不存在文件时创建文件并返回true 否则false
boolean
Mkdir()
指定路径不存在时创建文件夹,并返回true,否则false
Boolean
Mkdirs()
指定路径不存在时创建多级目录,并返回true,否则false
boolean
delete()
删除文件或单级文件夹
D类的判断功能
返回值
方法
说明
boolean
exists():
判断指定路径的文件或文件夹是否存在
boolean
isAbsolute():
判断当前路路径是否是绝对路径
boolean
isDirectory():
判断当前的目录是否存在
boolean
isFile():
判断当前路径是否是一个文件
boolean
isHidden():
判断当前路径是否是隐藏文件
E  File类的获取和修改名字功能
返回值
方法
说明
***   File
getAbsoluteFile()
获取文件的绝对路径,返回File对象
String
getAbsolutePath():
获取文件的绝对路径,返回路径的字符串
String
getparent();
获取当前路径的父级路径
File
getparentFile();
获取当前路径的父级路径
***   String
getName();
获取当前文件或文件夹的名称
String
getPath();
返回创建File对象时给的路径
long
lastModified();
以毫秒值返回最后的修改时间
long
Length();
返回文件字节数
boolearn
renameTo(File dest);
将当前的File对象所指的路径进行修改(需要创建新的File对象)
File[]
listFile();
返回当前路径下所有文件和文件夹对象
String[]
List();
返回当前路径下所有文件和文件夹对象
staticFile[]
listRoots();
获取计算机中的所有盘符


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