关于newInstance()方法有参数和无参数

一、通过反射创建新的类实例的两种方式:

Class.newInstance()
Constructor.newInstance()

二、两种创建方式的比较:

Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数;
Constructor.newInstance() 可以根据传入的参数,调用任意构造函数。

Class.newInstance() 要求被调用的构造函数是可见的,即必须是public的;
Constructor.newInstance() 在特定的情况下,可以调用私有的构造函数,需要通过setAccessible(true)实现。

三、代码示例:
package com.evan.reflect;
 
class Boy
{
    public Boy()
    {
        System.out.println("My name is evan.");
    }
    //设置构造方法私有
    private Boy(int age, String hobby)
    {
        System.out.println("I'm "+age+"year old.");
        System.out.println("I like "+hobby+".");
    }
}
package com.evan.reflect;
 
import java.lang.reflect.Constructor;
 
 
public class Test {
    
    public static void main(String []args) throws Exception
    {
        Class clazz=Class.forName("com.evan.reflect.Boy");
        //调用无参数构造
        Boy boyFirst=(Boy) clazz.newInstance();
 
 
        //调用有参数构造需要使用Constructor类对象
        //这种方式和下面这种方式都可以,注意第二种的参数类型是 new Class[]
        Constructor constructor=clazz.getDeclaredConstructor(int.class,String.class);
        //Constructor constructor=clazz.getDeclaredConstructor(new Class[]{int.class,String.class});
 
        //设置私有构造可以访问
        constructor.setAccessible(true);
 
        //这种方式和下面这种方式都可以,注意这里的参数类型是 new Object[]
        Boy boySecond=(Boy) constructor.newInstance(18,"programming");
        //Boy boySecond=(Boy) constructor.newInstance(new Object[] {18,"programming"});
    }
}
运行结果
My name is evan.
I'm 18year old.
I like programming.
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 除了int等基本类型外,Java的其他类型全部都是class(包括interface)。例如: String Ob...
    Zal哥哥阅读 2,472评论 0 0
  • 本篇文章已授权微信公众号guolin_blog(郭霖)独家发布 转载请注明出处:https://www.jians...
    ming152阅读 11,773评论 4 78
  • 对于Java反射,平常工作中虽然经常用到,但一直以来都没有系统总结过,所以趁着目前有空总结一下,加深一下理解。 如...
    西华子阅读 5,132评论 0 10
  • ## 引言 ### java中创建对象有几种方式? #### 1.使用new关键字 #### 2.使用clone方...
    芋头888阅读 3,728评论 1 0
  • 类加载机制 1 什么是反射 Java反射机制是在运行状态中对于任意一个类,都能知道这个类的所以属性和方法;对于任何...
    凯玲之恋阅读 14,691评论 3 28

友情链接更多精彩内容