zoukankan      html  css  js  c++  java
  • ZC_02_获取Constructor

    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、

  • 相关阅读:
    Javascript正则表达式详解转载
    转载Sqlserver2005 存储过程分页
    转载手把手教你用C#打包应用程序
    学习内容
    用C#实现将HTML文件转换为CHM文件(转)
    C# Windows服务添加安装程序
    sql 2008评估期已过有关如何升级,企业试用版到期,升级为企业版+sql2008破解
    iis不能启动是什么原因?错误提示:“提示服务器没有及时相应启动或控制请求”
    .NET 获取数据库中所有表名的方法
    如何获取Dynamics当前登录的用户的GUID,进而获取用户的信息
  • 原文地址:https://www.cnblogs.com/javaskill/p/5430177.html
Copyright © 2011-2022 走看看