1、

package reflectionZ;

import java.lang.reflect.Constructor;
import java.lang.reflect.Type; public class Tzz02
{
public static void main(String[] args) throws Exception
{
// getConstructors() / getConstructor(...) Class<?> clazz1 = Class.forName("reflectionZ.Cat"); // 1、使用的是 默认的 构造函数
Object obj01 = clazz1.newInstance(); // 2、通过Class对象来得到构造函数
Constructor<?> c1 = clazz1.getConstructor(Class.forName("java.lang.String"), int.class);
Object obj0201 = c1.newInstance("小猫", 6); // 强转 Constructor<?> c2 = clazz1.getConstructor(String[].class);
String[] foods = {"鱼", "老鼠"};
Object obj0202 = (Cat)c2.newInstance((Object)foods); // 对象数组foods会被打散 if (obj01.getClass() == clazz1)
System.out.println("obj01.getClass() == clazz1");
else
System.out.println("obj01.getClass() != clazz1");
if (obj0201.getClass() == clazz1)
System.out.println("obj01.getClass() == clazz1");
else
System.out.println("obj01.getClass() != clazz1");
if (obj0202.getClass() == clazz1)
System.out.println("obj01.getClass() == clazz1");
else
System.out.println("obj01.getClass() != clazz1"); // *** *** ***
System.out.println(); int iIdx = 0;
Constructor<?>[] constructors = clazz1.getConstructors();
for (Constructor<?> constructor :constructors)
{
Type[] types = constructor.getGenericParameterTypes();
if (types.length == 0)
System.out.println("["+iIdx+"] ==> 无参构造函数");
else
{
System.out.println("["+iIdx+"] ==> "+types.length+"个参数的 构造函数,参数的类型分别为:");
for (Type type : types)
{
System.out.println(type);
}
}
System.out.println(); iIdx ++;
}
}
} class Cat
{
public Cat()
{}
public Cat(String _strName, int _iAge)
{
System.out.println("Cat --> _strName : "+_strName+" , _iAge : "+_iAge);
}
public Cat(String[] _foods)
{
if (_foods == null)
System.out.println("Cat --> _foods is null .");
else
{
for (int i=0; i<_foods.length; i++)
System.out.println("Cat --> _foods["+i+"] : "+_foods[i]);
}
}
}

2、

控制台输出:

Cat --> _strName : 小猫 , _iAge : 6
Cat --> _foods[0] : 鱼
Cat --> _foods[1] : 老鼠
obj01.getClass() == clazz1
obj01.getClass() == clazz1
obj01.getClass() == clazz1 [0] ==> 无参构造函数 [1] ==> 2个参数的 构造函数,参数的类型分别为:
class java.lang.String
int [2] ==> 1个参数的 构造函数,参数的类型分别为:
class [Ljava.lang.String;

3、

ZC_02_获取Constructor的更多相关文章

  1. Class对象、反射机制、获取Constructor构造方法

    1.Class对象的三种创建方法(Class首字母大写) public class Demo { public static void main(String[] args){ Object obj= ...

  2. sencha toucha获取 constructor中的数据

    config:{ tmp:null }, constructor : function(conf) { this.config.tmp=conf; } 添加配置属性,然后直接用 this.config ...

  3. java.lang.reflect.Constructor

    java.lang.reflect.Constructor 一.Constructor类是什么 Constructor是一个类,位于java.lang.reflect包下. 在Java反射中 Cons ...

  4. Java 反射 (Class、ClassLoader、Constructor、Method、Field)

    反射是Java中一个非常重要.非常强大的机制.曾看到一句话“反射是框架的灵魂”,初学时不懂,等到学完框架之后才慢慢理解其意. 什么是反射?我们先通过几个类和示例来初步体会一下反射. 一.ClassLo ...

  5. 反射的基本使用以及原理(Class获取方式)

    1.什么是反射技术? 动态获取指定类以及类中的内容(成员),并运行其内容. 应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象.这时可以根据配置文件的类全名去找对应的字节码文件,并加载进 ...

  6. 反射之深入理解Constructor原理

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  7. 欢迎使用CSDN-markdown编辑器

    私有变量和函数 在函数内部定义的变量和函数,如果不对外提供接口,外部是无法访问到的,也就是该函数的私有的变量和函数. function Box(){ var color = "blue&qu ...

  8. java反射 之 反射基础

    一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  9. [Java] Java反射

    首先推荐三个十分有趣的网站: http://www.programcreek.com/simple-java/ http://tutorials.jenkov.com/ http://www.meet ...

随机推荐

  1. Java——BeanUtils基本用法

    为了操作JavaBean的属性,sun公司自己写了一套内省的api(在Java.beans.*)中,但是我们发现操作起来还是比较复杂的,所以apache公司就自己写了一套api替代了它,大大方便了开发 ...

  2. HTML Colors

    https://www.w3schools.com/html/html_colors.asp <!DOCTYPE html> <html> <body> #169f ...

  3. MYSQ无法启动

    http://bbs.51cto.com/thread-433491-1.html http://www.linuxdiyf.com/viewarticle.php?id=97065 http://b ...

  4. 外观模式(Facade) Adapter及Proxy 设计模式之间的关系 flume

    小结: 1. 外观模式/门面模式 Facade  往是多个类或其它程序单元,通过重新组合各类及程序单元,对外提供统一的接口/界面. Proxy(代理)注重在为Client-Subject提供一个访问的 ...

  5. <2014 05 09> 程序员:从C++转到Java需注意的地方

    最近想玩玩Android的APP开发,从C++角度来学习Java.Java可以说是一个优化精简版的C++,去除了底层C的很多特性.找了这篇文章. --------------------------- ...

  6. 转!!Java虚拟机堆的内存分配和回收

    Java内存分配和回收,主要就是指java堆的内存分配和回收.java堆一般分为2个大的区域,一块是新生代,一块是老年代.在新生代中又划分了3块区域,一块eden区域,两块surviver区域.一般称 ...

  7. Python(数据库安装与基本语句)

    一.数据库相关概念 1.两种硬件扩展方式 a.垂直扩展:针对一台计算机 b.水平扩展:多台普通计算机 2.数据库相关概念 数据库服务器(本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端) ...

  8. Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)

    Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配 ...

  9. JVM虚拟机—JVM内存

    JVM在运行时将数据划分为了5个区域来存储,这5个区域图示如下: 其中方法区和堆对是所有线程共享的内存区域:而java栈.本地方法栈和程序员计数器是运行时线程私有的内存区域. 首先我们熟悉一下一个 J ...

  10. CentOS7编译安装MariaDB

    一.环境信息: 操作系统版本:CentOS Linux release 7.3.1611 (Core) 内核版本:3.10.0-514.el7.x86_64 MariaDB版本:mariadb-10. ...