通过反射创建对象的方式

摘要:
PublicclassMyTest2{publicstaticvoidmain(String[]args)throwsException{//获取Class对象Classdemo=Class.forName(“Demo”);//1。使用newInstance创建对象Objectobject=demo。newInstance();
public class MyTest2 {
    public static void main(String[] args) throws Exception {
        //获取Class对象
        Class demo = Class.forName("Demo");

        //1、使用newInstance创建对象
        Object object = demo.newInstance();
        System.out.println(object.toString());

        //2、getDeclaredConstructor().newInstance()
        Object object1 = demo.getDeclaredConstructor().newInstance();
        System.out.println(object1.toString());
    }
}
class Demo{
    public Demo() {
        System.out.println("Demo的无参构造方法执行~");
    }
}

Demo的无参构造方法执行~
Demo@5cad8086
Demo的无参构造方法执行~
Demo@6e0be858

总结:

/**
 * 相同点: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抛出;
 */

免责声明:文章转载自《通过反射创建对象的方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【巷子】---fetch---基本使用无法使用前导 .. 在顶级目录上退出(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深入分析Java反射(一)-核心类库和方法

前提 Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行Debug。 本文主要介绍反射的基本概念以及核心类Class、Constructor、Method、Field、Parameter的常用方法。 本文极长,请准...

C++11多线程编程系列-相关库函数使用

1、C++11 新标准中引入了多个头文件来支持多线程编程,分别是<atomic>,<thread>,<mutex>,<condition_variable>和<future>。 <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另...

转 Java输入输出流详解(非常详尽)

转  http://blog.csdn.net/zsw12013/article/details/6534619 通过数据流、序列化和文件系统提供系统输入和输出。 Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。 在Java类...

关于c语言内存分配,malloc,free,和段错误,内存泄露

1.   C语言的函数malloc和free  (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数        void * malloc(size_t size) 动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。        void  free(void *ptr) 释放动态申请...

ios时间处理

1.获取时间的年,月,日,时,分,秒   1 //"expireDatetime": "2015-07-28 17:29:48.0" <==> 转换 2 NSString *dateStr = [model.expireDatetime substringToIndex:model.expireDatetime.leng...

ASP.NET Core 如何使用Mvc相关技术建立Controller、Tag Helper (下)

上篇文章介绍了通过定义两个接口和服务类,分别实现这两个接口,并且进行了一个服务的注册。 今天就来建立Controller 接下来就是在控制器中通过构造函数的方式注入接口(见代码块6行) 代码块2行的意思是在构造函数中注入之后,赋值给一个本地只读的变量。 从代码块11行往后就是建立acttion了,一个是做部门查询用的Index方法,一个是做新增部门用的A...