使用反射机制调用构造函数
来源:互联网 发布:手机压缩文件解压软件 编辑:程序博客网 时间:2024/05/16 11:33
先来观察一个类,如下:
package com.andy.entity;public class Cat { private int age;//定义猫的年龄 private double weight;//定义猫的体重 public Cat(int age,double weight) { this.age=age; this.weight=weight; } public Cat() { System.out.println("-----这是无参构造函数-----------"); } @Override public String toString() { return "猫的年龄是"+age+" 体重是"+weight; }}
这是一个普通的java类,需要注意的是该类具有无参构造函数,那么怎么通过反射来获取该类的实例呢?
代码如下:
package com.andy.temp;
public class Temp {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class<?>class1=Class.forName("com.andy.entity.Cat"); try { System.out.println(class1);//输出“class com.andy.temp.Cat” Object cat=class1.newInstance(); System.out.println(cat);//调用toString方法 } catch (Exception e) { e.printStackTrace(); }}
}
该程序执行后会输出以下信息:
class com.andy.entity.Cat
—–这是无参构造函数———–
猫的年龄是0 体重是0.0
之所以实例的属性值都是默认值,是因为我们这里调用的是默认构造函数。如果需要调用有参构造函数,那么就需要通过反射机制API获取有参构造函数。
在Class类中,提供了两个和获取构造函数相关的函数,
一是public Constructor<?>[] getConstructors()
该函数用来获得所有的构造函数。
二是public Constructor<T> getConstructor(Class<?>... parameterTypes)
该函数根据参数调用相应的构造函数。
此时保持Cat类不变,将Temp类修改如下:
package com.andy.temp;import java.lang.reflect.Constructor;public class Temp { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { Class<?>class1=Class.forName("com.andy.entity.Cat"); try { Constructor<?> constructor=class1.getConstructor(int.class,double.class); Object cat=constructor.newInstance(2,2.6);//相当于正常情况下的new,会调用构造函数 System.out.println(class1);//输出“class com.andy.temp.Cat” System.out.println(cat);//调用toString方法 } catch (Exception e) { e.printStackTrace(); } }}
输出结果如下:
class com.andy.entity.Cat
猫的年龄是2 体重是2.6
建议:在编写类时,要保留无参构造函数
0 0
- 使用反射机制调用构造函数
- 如何使用Java的反射机制以及调用构造方法?
- java反射之使用Constructor调用私有构造函数
- 反射机制构造实例调用方法
- java 反射机制调用函数
- 利用Java反射机制,调用一个类的构造函数和一般函数
- 使用反射机制调用buid中的函数接口
- 反射机制--调用构造函数和成员方法、制作帮助文档
- 【构造函数】----构造函数调用构造函数,使用this
- C#静态构造函数调用机制
- 抵御反射机制调用单例类私有构造器
- 抵御反射机制调用单例类私有构造器
- 反射:使用反射调用构造器创建对象
- C#使用反射访问私有构造函数
- 私有化构造函数后,使用反射初始化
- java使用反射机制调用方法
- Java反射机制之获得构造函数的方法
- Java 反射机制 获取Class中的构造函数
- 数据库
- 工作流引擎Activiti学习第三天(三)--- 基础知识学习
- 十一种通用滤波算法
- LeedCode 之 Remove Duplicates from Sorted List
- python 列表推导式
- 使用反射机制调用构造函数
- 面向对象娱乐版Tab栏切换
- Qt5下利用freeglut实现最基本OpenGL程序(图文解释)
- 基于Google的NotePad改写的记事本应用
- Java Web简单的注册登陆界面(mysql+servlet+jsp)
- 【好东西】ACM在线模版-f-zyj
- hdu5608 function
- activiti工作流数据库表详细介绍(23张表)
- Iterator (迭代器)