博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
newInstance() 的参数版本与无参数版本
阅读量:4648 次
发布时间:2019-06-09

本文共 1269 字,大约阅读时间需要 4 分钟。

通过反射创建新的类示例,有两种方式: 

Class.newInstance() 
Constructor.newInstance() 
以下对两种调用方式给以比较说明: 
Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数; 
Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。 
Class.newInstance() 要求被调用的构造函数是可见的,也即必须是public类型的
Constructor.newInstance() 在特定的情况下,可以调用私有的构造函数,需要通过setAccessible(true)实现。

下面是两种方式:

package com.reflect;import java.lang.reflect.Constructor;class TestB{    public  TestB()    {        System.out.println("Test A");    }    //设置构造方法私有    private TestB(int a,String b)    {        System.out.println("Test parames");    }}public class Test {        public static void main(String []args) throws Exception    {        Test b=new Test();        Class c=Class.forName("com.reflect.TestB");        //无参数        TestB b1=(TestB) c.newInstance();        //有参数需要使用Constructor类对象        //这种方式和下面这种方式都行,注意这里的参数类型是 new Class[]        //Constructor ct=c.getDeclaredConstructor(int.class,String.class);        Constructor ct=c.getDeclaredConstructor(new Class[]{
int.class,String.class}); ct.setAccessible(true); //这种方式和下面这种方式都可以:注意这里的参数类型是 new Object[] //TestB b2=(TestB) ct.newInstance(1,"2"); TestB b2=(TestB) ct.newInstance(new Object[] {1,"2"}); }}

运行结果:

Test ATest parames

 

转载于:https://www.cnblogs.com/alsf/p/8727660.html

你可能感兴趣的文章
WEB消息推送-comet4j
查看>>
安卓开发 数据存储
查看>>
贪心思维 专题记录 2017-7-21
查看>>
欧几里得与扩展欧几里得总结
查看>>
js的Prototype属性 解释及常用方法
查看>>
JavaScript 计时事件
查看>>
【Django】基于Django架构网站代码的目录结构
查看>>
(二)stm32之中断配置
查看>>
vim快捷键使用记录
查看>>
莫比乌斯函数
查看>>
iOS开发总结(A0)- Localization
查看>>
vue-router 跳转原理
查看>>
strncpy函数使用
查看>>
(一)SOA学习-相关缩写
查看>>
8.8模拟赛
查看>>
The easy way to implement a Red-Black tree
查看>>
Linux修改root用户登录密码
查看>>
排序(C语言实现)
查看>>
IOC容器特性注入第四篇:容器初始化
查看>>
[Err] 1231 - Variable 'sql_mode' can't be set to the value of 'NULL
查看>>