反射和new创建对象的区别
反射
作用
A:获取元数据
获取类的类名字,包名,修饰符。
获取类的所有构造函数,方法,字段等。
B:操作类的成员
通过反射调用类的构造方法创建对象。
可以调用对象的方法、访问和修改对象的字段。
C: 动态代理
通过反射机制可以创建动态代理类,动态改变类的行为。
反射创建对象过程
//获取 Class 对象:
Class<?> clazz = Class.forName("com.example.MyClass");
//获取构造函数并创建对象:
Constructor<?> constructor = clazz.getConstructor();
Object obj = constructor.newInstance();
反射创建对象的开销
**类加载时间:**通过反射加载类,需要进行类加载的检测和初始化,可能比直接使用new慢。
**方法调用时间:**通过反射调用方法时,需要进行权限检查和方法查找。
new
MyClass obj = new MyClass();
**编译期确定:**使用new关键字创建对象是在编译期就确定下来了,直接生成字节码,所以效率很高。
总结
new会比反射快10-100倍左右,这个速度也可能因为机器性能而定。因为反射需要对类进行类加载的检测和初始化,还有方法调用所需要的时间。