版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
反射
反射是Java被视为动态语言的一个关键性质。反射机制允许程序在运行时通过反射的方法取得任何一个已知类名的类的信息,包括属性,方法,构造器等,并可以通过反射修改属性和调用方法。
通过反射获取类的三种方式:
- Class.forName(包名+类名);会加载类
- 类名.class 不会加载类
- 对象.getClass();
通过反射创建对象的两种方式:
- Class对象的newInstance()方法; 默认调用无参构造器
- 若没有无参构造器,则先getConstructor(Class…args);,con.newInstance(Object…args);
通过反射获得及修改对象的属性值:
- Class对象getField(String 属性名)方法
- f.get(Object obj) 获取具体对象的属性值
- f.set(Object obj,value) 更改属性
通过反射调用方法
- Class对象getMethod(String 方法名,Class…args);
- m.invoke(Object 对象名,Object…args);
序列化
是一种用来处理对象流的机制。对象流就是对对象内容进行流化,流化之后可以进行读写操作,在网络间传输。序列化是为了解决在对象流进行读写操作是引发的问题。
序列化实现:将需要被序列化的类实现Serializable接口,该接口没有实现方法,只是为了标注该类对象可被序列化,然后使用一个输出流对象来构造一个对象流对象,之后使用ObjectOutputStream对象的writeObject(Object obj)方法将对象写出,要恢复的话使用输入流,readObject()方法得到对象后先判断类型是否一致,如果一致再强转。
如果该类对象属性中有需要隐藏的数据,则用transient修饰,用其修饰的属性将不会被序列化。