本帖最后由 小石姐姐 于 2018-4-26 14:20 编辑
日复一日,辛辛苦苦的总结 第九天课上笔记
File类的概述和常用功能
IO流
File类
File:文件和目录路径名的抽象表示形式,File 类的实例是不可变的
File类的构造函数
File(Stringpathname) :将一个字符串路径封装成File对象
File(Stringparent,String child):传入一个父级路径和子级路径
File(Fileparent,String child):传入一个File类型的父级路径和子级路径
构造方法:
File(Fileparent, String child) //将指定的路径名转换成一个File对象
File(String pathname) //根据指定的父路径和文件路径创建File对象
File(String parent, Stringchild) //根据指定的父路径对象和文件路径创建File对象
File类创建和删除功能
boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
booleanmkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
booleanmkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
booleandelete():删除文件或者删除单级文件夹
创建功能:
boolean createNewFile()
booleanmkdir()
booleanmkdirs()
删除功能
booleandelete()
绝对路径:固定不可改变的路径,以盘符开头
相对路径:相对某个参照物,不能以盘符开头
在eclipse中相对路径相对应当前项目的根目录
注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹
第十天课上笔记
第十天 IO流
标准流输入出流
publicstatic final InputStream in :字节输入流,用来读取键盘录入的数据
publicstaticfinal int x;
InputStreamis = Syste.in;
Scannersc = new Scanner(System.in);
publicstatic final PrintStream
第十一天课上笔记
第十一天 多线程的概述
多线程概述
进程:
Process,一个应用程序在内存中的执行区域
举例:
一个正在运行的程序, 可以有一个或多个进程.
例如: 查看资源管理器, QQ有1个进程, chrome浏览器有多个进程
每个进程都会占用一部分系统资源
如CPU, 内存, 磁盘, 网络等
线程:
Thread, 是一个进程中的一个执行路径.
举例:
一个进程中可以有一个或多个线程, 每个线程可以执行自己的代码
的执行依靠CPU调度分配
单核CPU: 靠CPU不断高速的随机的切换执行的线程, 达到看似同时进行的效果
多核CPU:
每个CPU可能完全执行一个线程, 或者多个CPU各自不断高速随机切换, 更高效
单线程和多线程特点
单线程: 同一时间只做一件事情, 安全性高, 效率低.
多线程: 同一时间做多件事, 安全性低, 效率高.
创建线程的第一种方式: 继承Thread类
java.lang.Thread 类: 实现了 Runnable 接口
注意:
线程何时启动?
线程对象调用start() 方法开始启动, 启动后在新的线程中执行run() 方法的代码
线程何时结束?
当 run() 方法中的代码执行完毕后, 线程就会自动结束并销毁.
如果 run() 方法中有死循环无法结束, 则该线程永远执行
不要调用 stop() 或 suspend() 方法来结束线程, 这两个方法不管用, 不安全, 而且已经过时
main()方法是单线程的
main() 方法
也是执行在一个线程中的, 该线程的名称为 main , 一般称为主线程, 主线程和其他线程没什么区别
所以main()方法是单线程的, 方法中的代码是一行一行向下执行的
注意:
这种方式仍然是通过多个 Thread 对象来启动多个线程
多个Thread对象使用同一个 Runnable 实现类对象, 就可以执行相同的任务
多线程的概念:
进程:进程指正在运行的程序. 确切的来说,档一个程序进入内存运行,即变成一个进程, 进程是处于运行过程中的程序,并且具有一定独立功能.
线程: 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一 个线程.一个进程中是可以有多个线程的,这个应用程序也可以死诚挚为多线程 程序.
多线程中的线程安全问题: 使用同步代码块解决共享资源的问题
同步:
表示多个线程在执行同步的代码时, 这些线程只能按顺序一个一个去执行
优缺点
同步安全性高, 效率低
不同步安全性低, 效率高
使用 synchronized 关键字:
同步代码块: 使用 synchronized 修饰的代码块
作用:
被同步代码块包裹的代码相当于在一个房间内, 锁对象相当于房间的锁
一个线程进入同步代码块, 会把门锁上, 同步代码块外面的线程看到同步代码块内部有线
程, 只能在外面等待
直到同步代码块内部的线程执行完毕从代码块中出来, 释放了锁, 外面等待的线程才能随
机进去一个
应用位置:
哪些代码属于共享操作, 需要避免安全问题, 就将这些代码放入同步代码块
术语: 线程进入同步代码块, 叫 获取锁
线程出同步代码块, 叫 释放锁
同步方法: 使用 synchronized 修饰的方法
锁对象
锁是一个任意类型的对象
Object对象可以, String对象可以, Student对象等也可以...
锁对象必须是被所有线程共享的, 也就是说多个线程都共用一个锁
如使用同一个Runnable对象中的成员变量
或使用某个类的静态变量
或使用某个类的字节码对象
同步必须配合锁对象来使用
第十二天 面向网络编程
Socket
套接字
用于描述IP地址和端口, 是一种网络编程机制, 通信的两端都会有Socket
网络通信3要素
传输协议
IP地址
端口号
常见通信协议
UDP: 它是一种无连接的不可靠协议
数据传输大小限制为64K(一个包)
TCP: 它是一种需要建立连接的可靠协议
没有数据传输大小的限制
java.net.InetAddress 类: 用于表示IP地址对象, 可以获取主机名, IP地址等信息
静态方法
staticInetAddress getLocalHost() : 获取本机的InetAddress对象
staticInetAddress getByName(String host) : 根据主机名或IP的字符串获取主机的 InetAddress
对象
staticInetAddress getLoopbackAddress() : 获取回环地址的InetAddress对象
成员方法
StringgetHostAddress() : 返回主机的IP地址
StringgetHostName() : 返回主机名
UDP相关类
java.net.DatagramSocket 类: 基于UDP协议的Socket
构造方法
br.close();
bw.close();
client.close();
DatagramSocket(): 创建DatagramSocket对象, 随机分配端口号
DatagramSocket(intport) : 创建DatagramSocket对象, 指定端口号
成员方法
voidsend(DatagramPacket p) : 发送数据包
voidreceive(DatagramPacket p) : 接收数据, 数据保存在DatagramPacket对象中
voidclose() : 关闭通信, 释放资源
java.net.DatagramPacket类: UDP数据包
构造方法
DatagramPackage(byte[] msg, intmsgLength, InetAddress host, int port) :
创建数据包对象, 指定数据, 目标主机对象, 端口
DatagramPacket(byte[] buf, int length) :
创建数据包对象, 接收数据为length的数据, 存入byte数组中
成员方法
byte[]getData() : 获取包中的数据, 以byte数组形式
intgetLength() : 获取数据包中数据的长度, 即byte数组的长度
intgetPort() : 获取发送方端口号
InetAddressgetAddress() : 获取数据包发送方的InetAddress对象
TCP相关类
java.net.Socket类: 基于TCP协议的Socket
构造方法
Socket(InetAddressadd, int port)
成员方法
OutputStreamgetOutputStream() : 获取输出流对象, 用于发送数据
InputStreamgetInputStream() : 获取输出流, 即接收数据
voidclose() : 释放资源
java.net.ServerSocket: TCP服务端
构造方法
ServerSocket(intport)
成员方法
Socketaccept() : 监听数据, 会阻塞. 收到数据后返回Socket对象
voidclose() : 关闭Socket
UDP收发数据步骤
发送端
1.为发送端创建Socket对象(DatagramSocket):
DatagramSocketudp = new DatagramSocket();
2.创建数据并打包:
DatagramPacketpacket = new DatagramPacket(buf, buf.length, address, port);
3.发送数据:
DatagramSocket对象的 void send(DatagramPackage p)
4.释放资源:
DatagramSocket对象的 void close()
接收端
1.创建接收端Socket对象:
DatagramSocketDatagramSocket(int port)
2.接收数据
创建包对象: DatagramPacket datagramPackage(byte[] buf,int length)
接收包: DatagramSocket 对象的 voidreceive(DatagramPacket p) , 该方法会阻塞等待接收
数据
3.解析数据
获取发送端信息
DatagramPacket对象的 InetAddress getAddress() : 获取客户端
DatagramPacket对象的 byte[] getData() : 获取数据
DatagramPacket对象的 int getLength() : 获取数据长度
4.输出数据
5.释放资源:
DatagramSocket 对象的 voidclose()
TCP收发数据步骤
客户端
1.创建客户端Socket对象(建立连接):
SocketSocket(InetAddress add, int port)
2.获取输出流对象:
Socket对象的 OutputStream getOutputStream()
3.发送数据:
OutputStream对象的 void write(byte[] b)
4.释放资源:
OutputStream对象的 close()
Socket对象的 close()
服务端
1.创建服务端ServerSocket对象:
ServerSocketServerSocket(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() 方法
第十三天课上笔记
反射
概念: 在程序运行时, 获取任何一个类的所有属性和方法(包括私有的). 调用任意一个对象的所有属性和方
法(包括私有的)
前提:
获得字节码对象
获取字节码对象的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
getConstructor(Class<?>...parameterTypes) : 根据参数列表返回指
定的public的构造方法. 参数列表填写参数的字节码对象
Constructor<T>getDeclaredConstructor(Class<?>... parameterTypes) : 根据参数列
表返回指定的所有权限的构造方法, 包括private的. 参数列表填写参数的字节码对象
获取成员属性
Field[]getFields() : 获取所有public的成员变量
Field[]getDeclaredFields() : 获取所有权限的成员变量, 包括private的
FieldgetField(String fieldName) : 通过指定的成员变量名获取指定的public的成员
变量
FieldgetDeclaredField(String fieldName) : 通过指定的成员变量名获取指定的所有
权限的成员变量, 包括private的
获取成员方法
Method[]getMethods() : 返回所有public的方法数组
Method[]getDeclaredMethods() : 返回所有权限的方法数组
MethodgetMethod(String name, Class<?>... parameterTypes) : 获取public的方法,
传入方法名和方法形参字节码对象
MethodgetDeclaredMethod(String name, Class<?>... parameterTypes) : 获取所有权
限的指定方法, 传入方法名和方法形参字节码对象
创建对象
TnewInstance() : 使用该类的无参构造创建一个对象
java.lang.reflect.Constructor 类: 构造方法对象
TnewInstance() : 通过无参构造方法对象创建一个类的对象
TnewInstance(Object... initargs) : 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表
voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问
所有权限的构造方法
java.lang.reflect.Field 类: 成员变量对象
Objectget(Object obj) : 获取指定对象的属性值
voidset(Object obj, Object value) : 将指定对象的属性值设置为指定的值
voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员属性
java.lang.reflect.Method 类: 成员方法对象
Objectinvoke(Object obj, Object... args) : 调用指定对象的成员方法
voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员方法
JavaBean
就是一个类
作用: 用于封装和存储数据
规范
类必须是public修饰的
成员变量必须是private的
必须有public的set/get方法
至少提供一个无参构造方法
实现Serializable接口(当对象需要通过IO流传输时)
Jar包
JavaARchive, 后缀名为 .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个方法
staticvoid setProperty(Object bean, String name, Object value) : 给JavaBean对象的成员属性赋值, 传入对象, 成员属性名, 属性值
staticString getProperty(Object bean, String name) : 获取JavaBean成员属性的属性值, 传入对象, 成员属性名, 返回属性值的字符串形式
staticvoid populate(Object bean, Map properties) : 给JavaBean对象的成员属性赋值, 传入对象, Map的key是属性名, value是属性值第九天课上笔记
File类的概述和常用功能
IO流
File类
File:文件和目录路径名的抽象表示形式,File 类的实例是不可变的
File类的构造函数
File(Stringpathname) :将一个字符串路径封装成File对象
File(Stringparent,String child):传入一个父级路径和子级路径
File(Fileparent,String child):传入一个File类型的父级路径和子级路径
构造方法:
File(Fileparent, String child) //将指定的路径名转换成一个File对象
File(String pathname) //根据指定的父路径和文件路径创建File对象
File(String parent, Stringchild) //根据指定的父路径对象和文件路径创建File对象
File类创建和删除功能
boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
booleanmkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
booleanmkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
booleandelete():删除文件或者删除单级文件夹
创建功能: boolean createNewFile() booleanmkdir()
booleanmkdirs()
删除功能 booleandelete()
绝对路径:固定不可改变的路径,以盘符开头 相对路径:相对某个参照物,不能以盘符开头
在eclipse中相对路径相对应当前项目的根目录
注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹
第十天课上笔记
第十天 IO流
标准流输入出流
publicstatic final InputStream in :字节输入流,用来读取键盘录入的数据
publicstaticfinal int x;
InputStreamis = Syste.in;
Scannersc = new Scanner(System.in);
publicstatic final PrintStream
第十一天课上笔记
第十一天 多线程的概述
多线程概述
进程:
Process,一个应用程序在内存中的执行区域
举例:
一个正在运行的程序, 可以有一个或多个进程.
例如: 查看资源管理器, QQ有1个进程, chrome浏览器有多个进程
每个进程都会占用一部分系统资源
如CPU, 内存, 磁盘, 网络等
线程:
Thread, 是一个进程中的一个执行路径.
举例:
一个进程中可以有一个或多个线程, 每个线程可以执行自己的代码
的执行依靠CPU调度分配
单核CPU: 靠CPU不断高速的随机的切换执行的线程, 达到看似同时进行的效果
多核CPU:
每个CPU可能完全执行一个线程, 或者多个CPU各自不断高速随机切换, 更高效
单线程和多线程特点
单线程: 同一时间只做一件事情, 安全性高, 效率低.
多线程: 同一时间做多件事, 安全性低, 效率高.
创建线程的第一种方式: 继承Thread类
java.lang.Thread 类: 实现了 Runnable 接口
注意:
线程何时启动?
线程对象调用start() 方法开始启动, 启动后在新的线程中执行run() 方法的代码
线程何时结束?
当 run() 方法中的代码执行完毕后, 线程就会自动结束并销毁.
如果 run() 方法中有死循环无法结束, 则该线程永远执行
不要调用 stop() 或 suspend() 方法来结束线程, 这两个方法不管用, 不安全, 而且已经过时
main()方法是单线程的
main() 方法
也是执行在一个线程中的, 该线程的名称为 main , 一般称为主线程, 主线程和其他线程没什么区别
所以main()方法是单线程的, 方法中的代码是一行一行向下执行的
注意:
这种方式仍然是通过多个 Thread 对象来启动多个线程
多个Thread对象使用同一个 Runnable 实现类对象, 就可以执行相同的任务
多线程的概念:
进程:进程指正在运行的程序. 确切的来说,档一个程序进入内存运行,即变成一个进程, 进程是处于运行过程中的程序,并且具有一定独立功能.
线程: 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一 个线程.一个进程中是可以有多个线程的,这个应用程序也可以死诚挚为多线程 程序.
多线程中的线程安全问题: 使用同步代码块解决共享资源的问题
同步:
表示多个线程在执行同步的代码时, 这些线程只能按顺序一个一个去执行
优缺点
同步安全性高, 效率低
不同步安全性低, 效率高
使用 synchronized 关键字:
同步代码块: 使用 synchronized 修饰的代码块
作用:
被同步代码块包裹的代码相当于在一个房间内, 锁对象相当于房间的锁
一个线程进入同步代码块, 会把门锁上, 同步代码块外面的线程看到同步代码块内部有线
程, 只能在外面等待
直到同步代码块内部的线程执行完毕从代码块中出来, 释放了锁, 外面等待的线程才能随
机进去一个
应用位置:
哪些代码属于共享操作, 需要避免安全问题, 就将这些代码放入同步代码块
术语: 线程进入同步代码块, 叫 获取锁
线程出同步代码块, 叫 释放锁
同步方法: 使用 synchronized 修饰的方法
锁对象
锁是一个任意类型的对象
Object对象可以, String对象可以, Student对象等也可以...
锁对象必须是被所有线程共享的, 也就是说多个线程都共用一个锁
如使用同一个Runnable对象中的成员变量
或使用某个类的静态变量
或使用某个类的字节码对象
同步必须配合锁对象来使用
第十二天 面向网络编程
Socket
套接字
用于描述IP地址和端口, 是一种网络编程机制, 通信的两端都会有Socket
网络通信3要素
传输协议
IP地址
端口号
常见通信协议
UDP: 它是一种无连接的不可靠协议
数据传输大小限制为64K(一个包)
TCP: 它是一种需要建立连接的可靠协议
没有数据传输大小的限制
java.net.InetAddress 类: 用于表示IP地址对象, 可以获取主机名, IP地址等信息
静态方法
staticInetAddress getLocalHost() : 获取本机的InetAddress对象
staticInetAddress getByName(String host) : 根据主机名或IP的字符串获取主机的 InetAddress
对象
staticInetAddress getLoopbackAddress() : 获取回环地址的InetAddress对象
成员方法
StringgetHostAddress() : 返回主机的IP地址
StringgetHostName() : 返回主机名
UDP相关类
java.net.DatagramSocket 类: 基于UDP协议的Socket
构造方法
br.close();
bw.close();
client.close();
DatagramSocket(): 创建DatagramSocket对象, 随机分配端口号
DatagramSocket(intport) : 创建DatagramSocket对象, 指定端口号
成员方法
voidsend(DatagramPacket p) : 发送数据包
voidreceive(DatagramPacket p) : 接收数据, 数据保存在DatagramPacket对象中
voidclose() : 关闭通信, 释放资源
java.net.DatagramPacket类: UDP数据包
构造方法
DatagramPackage(byte[] msg, intmsgLength, InetAddress host, int port) :
创建数据包对象, 指定数据, 目标主机对象, 端口
DatagramPacket(byte[] buf, int length) :
创建数据包对象, 接收数据为length的数据, 存入byte数组中
成员方法
byte[]getData() : 获取包中的数据, 以byte数组形式
intgetLength() : 获取数据包中数据的长度, 即byte数组的长度
intgetPort() : 获取发送方端口号
InetAddressgetAddress() : 获取数据包发送方的InetAddress对象
TCP相关类
java.net.Socket类: 基于TCP协议的Socket
构造方法
Socket(InetAddressadd, int port)
成员方法
OutputStreamgetOutputStream() : 获取输出流对象, 用于发送数据
InputStreamgetInputStream() : 获取输出流, 即接收数据
voidclose() : 释放资源
java.net.ServerSocket: TCP服务端
构造方法
ServerSocket(intport)
成员方法
Socketaccept() : 监听数据, 会阻塞. 收到数据后返回Socket对象
voidclose() : 关闭Socket
UDP收发数据步骤
发送端
1.为发送端创建Socket对象(DatagramSocket):
DatagramSocketudp = new DatagramSocket();
2.创建数据并打包:
DatagramPacketpacket = new DatagramPacket(buf, buf.length, address, port);
3.发送数据:
DatagramSocket对象的 void send(DatagramPackage p)
4.释放资源:
DatagramSocket对象的 void close()
接收端
1.创建接收端Socket对象:
DatagramSocketDatagramSocket(int port)
2.接收数据
创建包对象: DatagramPacket datagramPackage(byte[] buf,int length)
接收包: DatagramSocket 对象的 voidreceive(DatagramPacket p) , 该方法会阻塞等待接收
数据
3.解析数据
获取发送端信息
DatagramPacket对象的 InetAddress getAddress() : 获取客户端
DatagramPacket对象的 byte[] getData() : 获取数据
DatagramPacket对象的 int getLength() : 获取数据长度
4.输出数据
5.释放资源:
DatagramSocket 对象的 voidclose()
TCP收发数据步骤
客户端
1.创建客户端Socket对象(建立连接):
SocketSocket(InetAddress add, int port)
2.获取输出流对象:
Socket对象的 OutputStream getOutputStream()
3.发送数据:
OutputStream对象的 void write(byte[] b)
4.释放资源:
OutputStream对象的 close()
Socket对象的 close()
服务端
1.创建服务端ServerSocket对象:
ServerSocketServerSocket(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() 方法
第十三天课上笔记
反射
概念: 在程序运行时, 获取任何一个类的所有属性和方法(包括私有的). 调用任意一个对象的所有属性和方
法(包括私有的)
前提:
获得字节码对象
获取字节码对象的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
getConstructor(Class<?>...parameterTypes) : 根据参数列表返回指
定的public的构造方法. 参数列表填写参数的字节码对象
Constructor<T>getDeclaredConstructor(Class<?>... parameterTypes) : 根据参数列
表返回指定的所有权限的构造方法, 包括private的. 参数列表填写参数的字节码对象
获取成员属性
Field[]getFields() : 获取所有public的成员变量
Field[]getDeclaredFields() : 获取所有权限的成员变量, 包括private的
FieldgetField(String fieldName) : 通过指定的成员变量名获取指定的public的成员
变量
FieldgetDeclaredField(String fieldName) : 通过指定的成员变量名获取指定的所有
权限的成员变量, 包括private的
获取成员方法
Method[]getMethods() : 返回所有public的方法数组
Method[]getDeclaredMethods() : 返回所有权限的方法数组
MethodgetMethod(String name, Class<?>... parameterTypes) : 获取public的方法,
传入方法名和方法形参字节码对象
MethodgetDeclaredMethod(String name, Class<?>... parameterTypes) : 获取所有权
限的指定方法, 传入方法名和方法形参字节码对象
创建对象
TnewInstance() : 使用该类的无参构造创建一个对象
java.lang.reflect.Constructor 类: 构造方法对象
TnewInstance() : 通过无参构造方法对象创建一个类的对象
TnewInstance(Object... initargs) : 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表
voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问
所有权限的构造方法
java.lang.reflect.Field 类: 成员变量对象
Objectget(Object obj) : 获取指定对象的属性值
voidset(Object obj, Object value) : 将指定对象的属性值设置为指定的值
voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员属性
java.lang.reflect.Method 类: 成员方法对象
Objectinvoke(Object obj, Object... args) : 调用指定对象的成员方法
voidsetAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员方法
JavaBean
就是一个类
作用: 用于封装和存储数据
规范
类必须是public修饰的
成员变量必须是private的
必须有public的set/get方法
至少提供一个无参构造方法
实现Serializable接口(当对象需要通过IO流传输时)
Jar包
JavaARchive, 后缀名为 .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个方法
staticvoid setProperty(Object bean, String name, Object value) : 给JavaBean对象的成员属性赋值, 传入对象, 成员属性名, 属性值
staticString getProperty(Object bean, String name) : 获取JavaBean成员属性的属性值, 传入对象, 成员属性名, 返回属性值的字符串形式
staticvoid populate(Object bean, Map properties) : 给JavaBean对象的成员属性赋值, 传入对象, Map的key是属性名, value是属性值
|
|