本帖最后由 小石姐姐 于 2018-4-26 14:19 编辑
就业班第五天到Web第一天笔记
IO流
构造方法:
File(String pathname) :将一个字符串路径封装成File对象
File(String parent,String child):传入一个父级路径和子级路径
File(File parent,String child):传入一个File类型的父级路径和子级路径
*File的各种功能:
创建删除:
boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
boolean delete():删除文件或者删除单级文件夹
判断功能:
boolean exists():判断指定路径的文件或文件夹是否存在
boolean isAbsolute():判断当前路路径是否是绝对路径
boolean isDirectory():判断当前的目录是否存在
boolean isFile():判断当前路径是否是一个文件
boolean isHidden():判断当前路径是否是隐藏文件
获取修改:
File getAbsoluteFile():获取文件的绝对路径,返回File对象
String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
String getName():获取文件或文件夹的名称
long length():返回文件的字节数
IO流分类:
流向
输入流 读取数据 FileReader Reader
输出流 写出数据 FileWriter Writer
数据类型
字节流
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer
字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储
而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件
要点
目录可以封装为File对象
一看到包含内容, 就要想到:
File[] listFiles()
对于目录可以递归操作 对于文件则使用流读写复制 用什么流? 系统中各种文件都有, 所以用字节流 复制流程: 先创建目录, 才能在目录中创建文件 创建了文件, 才能向文件中写入数据 创建目录或文件前, 可以先判断是否已经存在 boolean exists()
BufferedInputStream, BufferedOutputStream和以前学的BufferedReader, BufferedWriter使用方式基本一 样, 只不过没有读写一行字符串的方法, 因为这不是操作字符的, 而是操作字节的
10
IO(标准输入流, 转换流, 打印流, 对象操作 流, Properties集合, 编码 表)
标准输出流:
public static final InputStream in:标准输入流
public static final PrintStream out:标准输出流
转换流:
OutputStreamWriter将字节输出流转换为字符输出流
InputStreamReader:将字节输入流转换为字符输入流
打印流:
打印流是添加输出数据的功能,使它们能够方便地打印各种数据值表示形式.
字符打印流 PrintWriter
void print(String str): 输出任意类型的数据,
void println(String str): 输出任意类型的数据,自动写入换行操作
对象操作流:
用于从流中读取对象
ObjectInputStream 称为 反序列化流,利用输入流从文件中读取对象
ObjectOutputStream 称为 序列化流,利用输出流向文件中写入对象
特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。
Properties集合
特点:
1、Hashtable的子类,map集合中的方法都可以用。
2、该集合没有泛型。键值都是字符串。
3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的 设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。
4、有和流技术相结合的方法。
Void load(InputStream inStrem)
从输入流中读取属性列表(键和元素对)
Void load(Reader reader)
按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)
Void store(OutputStream out ,String comments)
适合使用(loadInputStream)方法加载到Properties表中的格式,
Void store(Writer writer, Sreing comments)
适合使用load(Reader)方法的格式,将此Properties表中的属
性列表(键和元素对)写入输出字符
编码表:
编码表的概述:
编码表:把计算机底层的二进制数据转换成我们能看到的字符
* ASCII
*
* GB2312 --- GBK
* Unicode 所有的字符都占2个字节
* UTF-8 长度可变的码表
*
* ANSI:本地编码表 gbk
* Java中的字符串默认使用的ANSI(gbk)
*
* 乱码:编码保持前后一致即可解决
Java中字符串的编码
常用构造方法:
构造方法(字节数组转字符串):
String():初始化一个新创建的 String 对象,使其表示一个空字符序列
String(byte[] bytes) 使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
成员方法(字符串转字节数组)
getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并 将结果存储到一个新的 byte 数组中
getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组
字符流中的编码
常见对象
InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader
OutputStreamWriter(OutputStream out, CharsetEncoder enc) 创 建使用给定字符集编码器的 OutputStreamWriter
11多线程
多线程的概数:
A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即 变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进 程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以 称之为多线程程序。
C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
线程的实现:
继承Thread类
构造方法:
Thread()
分配新的Thread对象
Thread(String name)
分配新的对象Thrad对象。将指定的name作为其线程名称
Void start()
使该线程开始执行:Java虚拟机调用该县城的run方法
Void run()
该线程要执行的操作:如循环100次打印变量的值
Static Void sleep(long millis)
在指定的毫秒数内让当前真该执行的线程休眠(暂停执行)
12网络
* Socket
* 套接字
* 用于描述IP地址和端口, 是一种网络编程机制, 通信的两端都会有Socket
* 网络通信3要素
* 传输协议
* IP地址
* 端口号
* 常见通信协议
* UDP
* 它是一种无连接的不可靠协议
* 数据传输大小限制为64K(一个包)
* 不需要建立连接即可传输
* 数据发送速度快, 发送方只发送数据, 不检查接收方是否真正接收到数据, 所以数据有丢包的情况
* 这种方式适合实时性要求强的场合, 比如网络电话, 网络游戏等环境, 这种协议延迟很小
* TCP
* 它是一种需要建立连接的可靠协议
* 没有数据传输大小的限制
* 在传输前需要先建立连接(三次握手)
* 它的重发机制保证了数据传输的准确性, 但因为需要接收方发回验证信息, 所以数据发送时间长, 数据流量大
* 这种方式适合准确性要求强的场合, 比如金融系统, 视频点播, 用户可以等待数据传输但是不能忍受错误
* `java.net.InetAddress`类: 用于表示IP地址对象, 可以获取主机名, IP地址等信息
* 静态方法
* `static InetAddress getLocalHost()`: 获取本机的InetAddress对象
* `static InetAddress getByName(String host)`: 根据主机名或IP的字符串获取主机的InetAddress对象
* `static InetAddress getLoopbackAddress()`: 获取回环地址的InetAddress对象
* 成员方法
* `String getHostAddress()`: 返回主机的IP地址
* `String getHostName()`: 返回主机名
* `String getCanonicalHostName()`: 获取此IP地址的完全限定域名
* UDP相关类
* `java.net.DatagramSocket`类: 基于UDP协议的Socket
* 构造方法
* `DatagramSocket DatagramSocket()`: 创建DatagramSocket对象, 随机分配端口号
* `DatagramSocket DatagramSocket(int port)`: 创建DatagramSocket对象, 指定端口号
* 成员方法
* `void send(DatagramPacket p)`: 发送数据包
* `void receive(DatagramPacket p)`: 接收数据, 数据保存在DatagramPacket对象中
* `void close()`: 关闭通信, 释放资源
* `java.net.DatagramPacket`类: UDP数据包
* 构造方法
* `DatagramPacket DatagramPackage(byte[] msg, int msgLength, InetAddress host, int port)`: 创建数据包对象, 指定数据, 目标主机对象, 端口
* `DatagramPacket(byte[] buf, int length)`: 创建数据包对象, 接收数据为length的数据, 存入byte数组中
* 成员方法
* `byte[] getData()`: 获取包中的数据, 以byte数组形式
* `int getLength()`: 获取数据包中数据的长度, 即byte数组的长度
* `int getPort()`: 获取发送方端口号
* `InetAddress getAddress()`: 获取数据包发送方的InetAddress对象
* TCP相关类
* `java.net.Socket`类: 基于TCP协议的Socket
* 构造方法
* `Socket Socket(InetAddress add, int port)`
* 成员方法
* `OutputStream getOutputStream()`: 获取输出流对象, 用于发送数据
* `InputStream getInputStream()`: 获取输出流, 即接收数据
* `void close()`: 释放资源
* `java.net.ServerSocket`: TCP服务端
* 构造方法
* `ServerSocket ServerSocket(int port)`
* 成员方法
* `Socket accept()`: 监听数据, 会阻塞. 收到数据后返回Socket对象
* `void close()`: 关闭Socket
* UDP收发数据步骤
* 发送端
1. 为发送端创建Socket对象(DatagramSocket):
* `DatagramSocket udp = new DatagramSocket();`
2. 创建数据并打包:
* `DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port);`
3. 发送数据:
* `DatagramSocket`对象的`void send(DatagramPackage p)`
4. 释放资源:
* `DatagramSocket`对象的`void close()`
* 接收端
1. 创建接收端Socket对象:
* `DatagramSocket DatagramSocket(int port)`
2. 接收数据
* 创建包对象: `DatagramPacket datagramPackage(byte[] buf, int length)`
* 接收包: `DatagramSocket`对象的`void receive(DatagramPacket p)`, 该方法会阻塞等待接收数据
3. 解析数据
* 获取发送端信息
* `DatagramPacket`对象的`InetAddress getAddress()`: 获取客户端
* `DatagramPacket`对象的`byte[] getData()`: 获取数据
* `DatagramPacket`对象的`int getLength()`: 获取数据长度
4. 输出数据
5. 释放资源:
* `DatagramSocket`对象的`void close()`
* TCP收发数据步骤
* 客户端
1. 创建客户端Socket对象(建立连接):
* `Socket Socket(InetAddress add, int port)`
2. 获取输出流对象:
* `Socket`对象的`OutputStream getOutputStream()`
3. 发送数据:
* `OutputStream`对象的`void write(byte[] b)`
4. 释放资源:
* `OutputStream`对象的`close()`
* `Socket`对象的`close()`
* 服务端
1. 创建服务端ServerSocket对象:
* `ServerSocket ServerSocket(int port)`
2. 监听数据:
* `ServerSocket`对象的`Socket accept()`, 获取客户端Socket对象
* 监听时是阻塞的
3. 获取输入流对象:
* `Socket`对象的`InputStream getInputStream()`
4. 获取数据:
* `InputStream`对象的`int read(byte[] buf)`
5. 输出数据:
* 将获取的字节数组转换为String打印输出
6. 释放资源:
* `Socket`对象的`void close()`方法
* `ServerSocket`对象的`void close()`方法
13反射
* 反射
* 概念: 在程序运行时, 获取任何一个类的所有属性和方法(包括私有的). 调用任意一个对象的所有属性和方法(包括私有的)
* 前提:
* 获得字节码对象
* 获取字节码对象的3种方法
1. `对象.getClass()`
2. `类名.class`
3. `Class.forName(String fullClassName)`
* 反射能干的事
* 获取一个类的字节码对象, 通过该字节码对象:
* 获取一个类的构造方法(public或全部权限的)
* 创建一个类的对象
* 获取一个类的成员属性(public或全部权限的)
* 获取属性值
* 设置属性值
* 获取一个类的成员方法(public或全部权限的)
* 调用成员方法
* 反射使用的相关类和方法
* `java.lang.Class`类: 类的字节码对象
* 获取构造方法
* `Constructor<?>[] getConstructors()`: 以数组形式返回该类中所有public的构造方法. 如果没有public的, 则数组长度为0
* `Constructor<?>[] getDeclaredConstructors()`: 以数组形式返回该类中所有权限的构造方法, 包括private的. 如果该类是接口, 基本类型, 数组, void, 则数组长度为0
* `Constructor<T> getConstructor(Class<?>... parameterTypes)`: 根据参数列表返回指定的public的构造方法. 参数列表填写参数的字节码对象
* `Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)`: 根据参数列表返回指定的所有权限的构造方法, 包括private的. 参数列表填写参数的字节码对象
* 获取成员属性
* `Field[] getFields()`: 获取所有public的成员变量
* `Field[] getDeclaredFields()`: 获取所有权限的成员变量, 包括private的
* `Field getField(String fieldName)`: 通过指定的成员变量名获取指定的public的成员变量
* `Field getDeclaredField(String fieldName)`: 通过指定的成员变量名获取指定的所有权限的成员变量, 包括private的
* 获取成员方法
* `Method[] getMethods()`: 返回所有public的方法数组
* `Method[] getDeclaredMethods()`: 返回所有权限的方法数组
* `Method getMethod(String name, Class<?>... parameterTypes)`: 获取public的方法, 传入方法名和方法形参字节码对象
* `Method getDeclaredMethod(String name, Class<?>... parameterTypes)`: 获取所有权限的指定方法, 传入方法名和方法形参字节码对象
* 创建对象
* `T newInstance()`: 使用该类的无参构造创建一个对象
* `java.lang.reflect.Constructor`类: 构造方法对象
* `T newInstance()`: 通过无参构造方法对象创建一个类的对象
* `T newInstance(Object... initargs)`: 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表
* `void setAccessible(boolean canAccess)`: 设置为true时禁用Java的访问安全检查, 可以访问所有权限的构造方法
* `java.lang.reflect.Field`类: 成员变量对象
* `Object get(Object obj)`: 获取指定对象的属性值
* `void set(Object obj, Object value)`: 将指定对象的属性值设置为指定的值
* `void setAccessible(boolean canAccess)`: 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员属性
* `java.lang.reflect.Method`类: 成员方法对象
* `Object invoke(Object obj, Object... args)`: 调用指定对象的成员方法
* `void setAccessible(boolean canAccess)`: 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员方法
* JavaBean
* 就是一个类
* 作用: 用于封装和存储数据
* 规范
* 类必须是public修饰的
* 成员变量必须是private的
* 必须有public的set/get方法
* 至少提供一个无参构造方法
* 实现Serializable接口
* Jar包
* Java ARchive, 后缀名为`.jar`, 是一个压缩文件, 里面包含编译后的class文件和说明信息
* 作用: jar包中是写好的代码编译出来的class文件, 有了这些类文件, 就可以调用其中的方法
* 导入jar包的步骤
* **项目根目录下**创建名为`lib`的目录
* 复制jar文件, 粘贴到项目根目录下的`lib`目录下
* 选中项目中的jar包, 右键, 选择`Build Path`, 点击`Add to Build Path`. 此时项目中的`Referenced Libraries`中会出现jar包名称的奶瓶, 说明已经添加成功
* 导入的jar包整个项目都能使用
* BeanUtils
* Apache组织提供的第三方类库`Commons`中的一个组件
* 作用:
* 利用反射技术给一个类的对象的成员属性赋值或获取值, 用于快速封装数据到JavaBean
* BeanUtils类常用的3个方法
* `static void setProperty(Object bean, String name, Object value)`: 给JavaBean对象的成员属性赋值, 传入对象, 成员属性名, 属性值
* `static String getProperty(Object bean, String name)`: 获取JavaBean成员属性的属性值, 传入对象, 成员属性名, 返回属性值的字符串形式
* `static void populate(Object bean, Map properties)`: 给JavaBean对象的成员属性赋值, 传入对象, Map的key是属性名, value是属性值
Wed阶段第一天
1.Font标签用来设置字体,有三个属性,color,size,face,其中size的取值范围是1-7,face用来设置字体类型.
2.超链接的target属性有两个值比较常用1)_self,在自身窗口打开2)_blank在新标签打开.
3.Html中”.”/代表当前目录,”../”代表上一级目录.
4.设置背景颜色用bgcolor;设置背景图片用background.
5.Input里的value属性是定义默认值,当修改后提提交的会是修改后的值.
6.文本框和密码框里的value值是默认值,当输入后会被替换,提交的时候提交的是输入的东西.单选或者复选框提交的是标签中的value值.
7.Form中的action属性中写的是提交的路径,method属性的值是
8.get方式和post方式的区别:1)get方式在地址栏能看到,post方式不能看到2)get方式提交的数据有大小限制,post没有大小限制,要上传文件时一般选post方式.3)get的数据在请求头中,post的数据在请
体中.提交方式不仅[b仅是get和post,还有其方式.
9.图片本身有一个属性,把图片放到表格里面时要设置图片属性中的长和高,否则表格不能约束图片大小.(放到div中同理)
10.Div只有一个属性---align. |
|