一、newInstance和new
用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制。在使用newInstance()方法的时候,必须保证这个类已经加载并且已经连接了,而这可以通过Class的静态方法forName()来完成的。newInstance()在工厂模式里面用到。
Class.newInstance()的使用:
Class.forName("A").newInstance();
或者
A.class.newInstance();
区别:
(1)调用构造方法不同
new关键字能调用任何构造方法。
newInstance()只能调用无参构造方法。
(2)效率不一样
new关键字是强类型的,效率相对较高。
newInstance()是弱类型的,效率相对较低。
二、Class.newInstance()和Constructor.newInstance()
相同点:Class.newInstance()和Constructor.newInstance()都是通过反射来获取类的对象的。
不同点:
(1)调用构造函数不同
Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数;
Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。
(2)调用构造函数是否私有不同
Class.newInstance() 要求被调用的构造函数是可见的,也即必须是public类型的;
Constructor.newInstance() 在特定的情况下,可以调用私有的构造函数。 即设置:
Class clazzA=Class.forName("A");
/*以下调用无参的、私有构造函数*/
Constructor constructorA=c.getDeclaredConstructor();
constructorA.setAccessible(true); //调用私有构造关键是设置这句代码
(3)对异常的处理不同
Class.newInstance()对于捕获或者未捕获的异常均由构造器抛出;
Constructor.newInstance()通常会把抛出的异常封装成InvocationTargetException抛出;
三、getDeclaredMethods和getMethods的区别
getDeclaredMethods:可以拿到反射类中的公共方法、私有方法、保护方法、默认方法,但是不能获得其父类中的方法
getMethods:可以拿到反射类及其父类中的所有公共方法。
四、private修饰符、无修饰符、protected修饰符、public修饰符的区别
- private: 只能通过同一个类或结构中的代码访问类型或成员。
- 无修饰符: 被子类和同package的类访问
- protected: 类或成员只能由同一个类中的代码访问,或者在从该类派生的类中访问。
- public: 全都可以访问
来源:CSDN
作者:行走在青春路上的小蜜蜂
链接:https://blog.csdn.net/u010257931/article/details/104578556