创建对象时,new和Class.newInstance() 以及Constructor.newInstance()区别,以及getDeclaredMethods和getMethods的区别

一、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: 全都可以访问
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值