利用反射创建对象必须要显式的声明构造方法吗?

可以不提供,只不过这样的话构造对象的时候一定要先拿到有参数的构造方法,然后赋予参数再构建对象。比如package cn.mldn.demo;

import java.lang.reflect.Constructor;

class Person{ // CTRL + K    private String name;    private int age;

public Person(String name, int age)    {        this.name = name;        this.age = age;    }

@Override    public String toString()    {        return "Person [name=" + name + ", age=" + age + "]";    }}

public class TestDemo{    public static void main(String[] args) throws Exception    {        Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象        // 取得指定参数类型的构造方法        Constructor<?> cons = cls.getConstructor(String.class, int.class);        Object obj = cons.newInstance("张三", 20); // 为构造方法传递参数        System.out.println(obj);    }}
时间: 2024-10-23 17:09:34

利用反射创建对象必须要显式的声明构造方法吗?的相关文章

利用反射机制,获取类的字段、方法、并实现简单调用

这篇文章是为之后要介绍Android的ICO框架做预备的,所以,如果想最近学习Android的ICO框架的同学,可以稍微看一下. 首先,简单介绍一下Java里面的反射. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 不知道这样的一段解释,你能否看懂.如果更简单的说,反射就是能够根据你给出类名实例化出一个实实在在的对象.所以,对象的实例

关于反射创建对象的演示

虽然网上有很多的做饭,但是对于新手的朋友们来说,并不是能够看得懂. 反射技术:可以对一个类进行解刨,首先要获取该类的字节码文件内容,并将内容都封装成了对象. 访问属性,方法,以及构造函数,然后在调用构造函数,创建对象. 调用空参数的构造函数用的是Class类中的newInstance方法. 调用带参数的构造函数用的是构造函数本身的newInstance方法. 在这里我只做了两种方法,利用反射创建对象,并调用方法,获取变量值. 对于我的这两种方式也有需要优化的地方,但是在这里我们只接受这两种方式.

条款27: 如果不想使用隐式生成的函数就要显式地禁止它

假设想写一个类模板Array,它所生成的类除了可以进行上下限检查外,其它行为和C++标准数组一样.设计中面临的一个问题是怎么禁止掉Array对象之间的赋值操作,因为对标准C++数组来说赋值是不合法的: double values1[10];double values2[10]; values1 = values2;                 // 错误! 对很多函数来说,这不是个问题.如果你不想使用某个函数,只用简单地不把它放进类中.然而,赋值运算符属于那种与众不同的成员函数,当你没有去写

C++中函数模板,显式具体化,显式实例化:

函数模板 形如: template<typename T>  //没有分号 void func(T &a,T &b); 称为函数模板,其中,template和typename为关键字,typename可以用class来替代.T(可以用其他的名称)表示一种泛型,既可以表示int型,也可以表示double或其他类型,将它想象成C++里面的数据类型的集合. 也就是说: void func(T &a,T &b)= void func(int &a,int &am

AOP系列(一)——ProxyFactoryObject 显式创建AOP代理

AOP概念 Aspect Oriented Programming,面向切面编程,可以通过预编译方式和运行期动态代理,实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 前提 了解Spring.NET IOC 熟悉代理模式 下面我们结合一个具体的例子来了解AOP. 基本情景 User类 /// <summary> /// 用户实体,具有姓名和年龄两个属性 /// </summary> public class User { public string Name { get

当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值

{"当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值"} 对于这个异常可以从两个角度来处理:A:数据库执行语句  B:直接修改NHibernate中持久化类映射配置文件id节点 A数据库执行语句: 问题描述:当在数据库表主键设计为 (Orderid  int identity primary key),相对这个主键IDENTITY_INSERT默认设置为OFF,就是不能够显示插入主键id的值,例子如下: insert int

数据类型回顾——数据类型转换(显式和隐式)—JS学习笔记2015-6-3(第47天)

对于JS这种语言来说,因为它是一种动态类型语言,变量是没有类型的,可以随时赋予任意值. 但是,数据本身和各种运算是有类型的,因此运算时变量需要转换类型. 大多数情况下,这种数据类型转换是自动的,但是有时也需要手动强制转换. 首先看下强制类型转换(显式) 之前提到的Namber.parseInt.parseFloat 都是强制类型转换: 这里在看阮一峰博客(http://javascript.ruanyifeng.com/grammar/conversion.html#toc1) Number方法

Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法

先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 2 的对应的属性赋值:属性即为 Map 的键,值即为 Map 的值. 使用 JDBC 驱动程序处理元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信

Windows提供了两种将DLL映像到进程地址空间的方法(隐式和显式)

调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同.Windows提供了两种将DLL映像到进程地址空间的方法: 1. 隐式的加载时链接 这种方法需要DLL工程经编译产生的LIB文件,此文件中包含了DLL允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了LIB文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的DLL文件的名字.当这个应用程序运行时,也就是它的可执行文件