目录
1.反射技术
运行时动态访问对象属性方法的技术。
2.Class对象
2.1 类的实例化
方式 | 举例 |
new关键字 | new Car(); |
clone(Object的方法) | c.clone(); |
序列化(Serialable)/反序列化 | ObjectInputStream/ObjectOutputStream |
反射Class对象 | clazz.newInstance(); |
2.1.1 反射创建对象的过程 & 代码
1.通过类加载得到class对象
2.class.newInstance() 创建对象--内部:调用默认的无参构造方法 (若编写有参构造方法,会导致无参构造被覆盖,无法创建对象,从而报错)
public class ClassDemo {
static class InnerClass{
public InnerClass(){
System.out.println("无参构造方法");
}
public void print() {
System.out.println("hi,静态内部类");
}
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
//1.创建对象
// new InnerClass();
//2.类加载 + 反射 创建对象
Class<InnerClass> clazz = InnerClass.class;
InnerClass a = clazz.newInstance();
a.print();
}
}
运行结果如下图所示:
2.2 Field类--描述类中的属性(数值域)
在不存在get()方法使用,可以获取属性信息并进行修改
- field.setAccessible(true); -->设置属性可以访问(默认private 不能被访问)