day 16
一.节点流
节点流:
字节数组流--节点流 输入流:ByteArrayInputStream 没有新增方法---使用和InputStream一样
输出流:ByteArrayOutputStream: 有有新增方法---不能够多态使用
byte[] toByteArray() 字节数组流转为字节数组
字节数组流--节点流
输入流:ByteArrayInputStream
没有新增方法---使用和InputStream一样
输出流:ByteArrayOutputStream
有有新增方法---不能够多态使用
二.处理流
处理流:
基本数据类型流--数据类型+数据
输入流:DataInputStream ---readXXX()
输出流:DataOutputStream ---writeXXX()
有新增方法,无法多态调用
写出的写出的顺序要与读入的顺序一致
EOFException 文件存在,但是内容没有读到,只能够读取到写出的源文件中,否则就算输内容相同的其他文件会抛异常
基本数据类型流----字节数组流
引用数据类型流|对象流 数据类型+数据
序列化输出流 ObjectOutputStream --- writeObject()
反序列化输入流 ObjectInputStream --- readObject()
注意:
先序列化后反序列化 反序列化的顺序要和序列化相同
不是所有的类都能序列化 NotSerializableException 实现Serializable接口才可以序列化
不是所有的属性都需要序列化 transient默认值
三.枚举
枚举类
1.所有的枚举类都隐式的继承了java.lang.enum抽象类
2.枚举也是类,枚举中的的所有成员都是类型的对象|实例 ,成员默认是public static final
四:反射
获取到该类的Class对象,我们就可以进行一切操作
反射是发生在运行期的
在类加载的时候,在内存中就会存在一个这个类的Class对象,对象中存在这个类的所有信息(方法,属性,构造器...)
在创建的对象的时候,得到的是这个Class对象的一个镜像|复制体
如果拿到了类型Class类的实例,就可以进行一切操作
1. 如何获取Class对象|源头:
1.类名.class
2.对象.getClass()
3.Class.forName("包名+类名"); ----这个方法最好
2.获取构造器
4个方法
Contrustor getContrustor(Class...); 获取公共的指定的构造器
Contrustor[] getContrustors(); 获取公共的所有的构造器
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取指定的某个构造器
Constructor[] getDeclaredConstructors() 获取所有的构造器(包括私有)
3.获取方法
Method getMethod(方法名,Class<?>... parameterTypes); 获取公共的指定的方法
Method[] getMethods(); 获取公共的所有的方法
Method<T> getDeclaredMethod(方法名,Class<?>... parameterTypes) 获取指定的某个方法
Method[] getDeclaredMethods() 获取所有的方法(包括私有)
方法对象.invoke(类型的对象,参数);
注意:如果本类中正常使用
如果外类中使用私有的,开放权限 setAccessible(false) -->true->放开 false->关闭
4.获取属性|字段
Field getField(字段名字); 获取公共的指定的字段
Field[] getFields(); 获取公共的所有的字段
Field<T> getDeclaredField(字段名字) 获取指定的某个字段
Field[] getDeclaredFields() 获取所有的字段(包括私有)
字段对象.set(对象,字段值);
字段对象.get(对象);
注意:如果本类中正常使用
如果外类中使用私有的,开放权限 setAccessible(false) -->true->放开 false->关闭
5:创建类型对象根据Class对象
Class对象.newInstance()--调用空构造
获取构造器
构造器对象.newInstance(Class<?>... parameterTypes);
6:获取父类的|父接口的的Class对象
子类的Class对象.getSuperclass()--单个
子类的Class对象.getInterfaces()--数组
7.修饰符
Class对象|方法对象|构造器对象|字段对象.getModifiers(); 得到修饰符代表数字的和