zoukankan      html  css  js  c++  java
  • 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();
        }

    【运行结果】

  • 相关阅读:
    Map Wiki -- proposed by Shuo Ren
    Smart Disk -- proposed by Liyuan Liu
    ubuntu 16.04下如何打造 sublime python编程环境
    manjaro linux没有ll等命令的解决办法
    python学习-命名规则
    python-unitetest-unittest 的几种执行方式
    python-pytest学习(一)- 简介和环境准备
    Python+request+unittest学习(一)- 读取文本出现 锘 * 系列乱码错误(UTF-8 BOM问题)的原因及解决方法
    Python+Selenium框架版(十)- unittest执行方法之discover()方法
    Python+Selenium框架版(九)- unittest执行法之makeSuit()
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5767098.html
Copyright © 2011-2022 走看看