• 01_反射_02_反射类的构造方法


    【工程截图】

    【Person.java】 //将要被反射的类

    package com.Higgin.reflect;
    import java.util.List;
    
    public class Person {
        private String name="NULL";
        private int age=0;
        
        public Person(){
            System.out.println("构造方法:Person()");
        }
        
        public Person(String name){
            System.out.println("构造方法:Person(String name)");
            this.name=name;
        }
        
        public Person(String name,int age){
            this.name=name;
            this.age=age;
            System.out.println("构造方法:Person(String name,int age)");
        }
        
        /**
         * 注意:是private 私有的!!!!!!!!
         */
        private Person(List list){
            System.out.println("构造方法:Person(List list)");
            System.out.println("list.get(0):"+list.get(0));
        }
    
        public void sayHello(){
            System.out.println(name+" say: hello world!");
            System.out.println("I'm "+age+" years old");
        }
    }

    【情况一】

    【Demo01.java】测试反射无参构造方法Person()

    /*
         * 反射Person类的 Person()构造方法,创建类的对象
         * @throws Exception
         */
        @Test
        public void test1() throws Exception{
            
            Class clazz=Class.forName("com.Higgin.reflect.Person");
            //反射构造方法:public Person()
            Constructor c=clazz.getConstructor(null); 
            
            Person p=(Person)c.newInstance(null);
            p.sayHello();
        }

    【运行结果】

    【情况二】

    【Demo01.java】测试反射有参构造方法Person(Strng name)

    /*
         * 反射构造方法:public Person(String name)
         */
        @Test
        public void test2() throws  Exception{
            Class clazz=new Person().getClass();  //注意,这里其实已经先创建了一个对象(因为new Person())
            //反射构造方法:public Person(String name)
            Constructor c=clazz.getConstructor(String.class);
            Person p=(Person) c.newInstance("Jack");
            p.sayHello();
        }

    【运行结果】

    【情况三】

    【Demo01.java】测试Person(String name,int age)的情况

    /*
         * 反射构造方法:public Person(String name,int age)
         */
        @Test
        public void test3() throws  Exception{
            Class clazz=Person.class;
            //反射构造方法:public Person(String name,int age)
            Constructor c=clazz.getConstructor(String.class,int.class);
            Person p=(Person) c.newInstance("Jack",18);
            p.sayHello();
        }

    【运行结果】

     【情况三】

    【Dem01.java】测试private Person(List list)的i情况,注意是私有的

    /*
         * 注意是私有的
         * 反射构造方法:private Person(List list)
         */
        @Test
        public void test4() throws  Exception{
            Class clazz=Person.class;
            //反射构造方法:private Person(List list)
            Constructor c=clazz.getDeclaredConstructor(List.class);
            c.setAccessible(true);    //暴力反射,没有这句会出错的!!!!!!!!
            List list=new ArrayList();
            list.add("6666666");
            Person p=(Person) c.newInstance(list);
            p.sayHello();
        }

    【运行结果】

    【创建对象的另外一种写法】等同于test1()的测试方法

        /**
         * 创建对象的另外一种方式
         * @throws Exception
         */
        @Test
        public void test5() throws  Exception{
            Class clazz=Class.forName("com.Higgin.reflect.Person");
            Person p=(Person)clazz.newInstance();  //本质就是反射类的无参构造方法反射对象
            p.sayHello();
        }

    【运行结果】

  • 相关阅读:
    该虚拟机似乎正在使用中,请获取所有权
    分配销售区域
    未对销售组织 XXX 分销渠道 00 语言 ZH 定义
    Bash 遍历目录
    plsql 不需配置*.ora就可以访问数据库
    arch linux
    拓端数据tecdat|R语言有限混合模型(FMM,finite mixture model)及其EM算法聚类分析间歇泉喷发时间
    拓端数据tecdat|使用R语言进行多项式回归、非线性回归模型曲线拟合
    拓端数据tecdat|R语言使用ARIMAX预测失业率经济时间序列数据
    拓端数据tecdat|R语言用ARIMA模型,ARIMAX模型预测冰淇淋消费时间序列数据
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5767098.html
Copyright © 2020-2023  润新知