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();
    }

【运行结果】

时间: 2024-08-18 19:36:24

01_反射_02_反射类的构造方法的相关文章

反射之获取类,方法等

1 反射之获取类      获取类有三种方法 public interface Person { public void sayHi(); }   public class Student  implements Person{ private String id; private String name; private int age; public int sex=1; //省去构造方法和get set方法 } Class c1 = Student.class; Class c2=Clas

JAVA反射之CLass类的练习

1 package zhang; 2 /** 3 * JAVA反射之CLass类的练习 4 * 5 * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? 6 * 类的类型是CLass 7 * 8 * */ 9 class Test{ 10 void print(){ 11 System.out.println("Hello world!"); 12 } 13 }//Test是一个类. 14 public class ClassDemo { 15 public static vo

反射之获取类,方法(0)

1 反射之获取类      获取类有三种方法 public interface Person { public void sayHi(); }   public class Student  implements Person{ private String id; private String name; private int age; public int sex=1; //省去构造方法和get set方法 } Class c1 = Student.class; Class c2=Clas

反射应用--取得类的结构

1,目标: 通过反射取得类的全部接口, 取得类所继承的父类 取得类全部构造方法 通过反射取得类的全部方法 通过反射取得一个类的全部属性. 具体类型 反射的深入-取得类的结构 要想通过反射取得类的结构,需要使用接口:java.lang.reflect包中的以下类: 1,Constructor:表示类的构造方法 2,Field:表示类中属性. 3,Method:表示类中的方法. 这三个类都是AccessibleObject的子类. 实践: 一,设置一个类: package 类集; interface

java反射之遍历类中所有内部类及属性方法

package com.zr.entity; /** * 仅用于测试类,从实际项目中抽出来的 * @author zr * */ public class Constant { /** * 参数校验枚举类 * @author zr * */ public static enum ResultObjectType { //成功 SUCC(0), //失败,异常 ERROR(1), //参数错误 PARAMERROR(2), //数据为空 NODATA(9); private Integer val

java反射(四)--反射与简单java类

一.传统简单java类 简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简单java类的开发,那么也会面临非常麻烦的困难: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename; 7 }

C#反射调用程序集类中方法

建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> /// public static int Add(int x, int y) { r

通过反射把一个类的属性的值赋值给另一个类

两个类我就不创建了,具体实现方法如下: /// <summary> /// 通过反射把一个类的属性的值赋值给另一个类 /// </summary> /// <typeparam name="D"></typeparam> /// <typeparam name="S"></typeparam> /// <param name="s"></param>

【java】java反射初探 ——“当类也照起镜子”

反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强大的API“反射“类的结构. 打个比方,反射机制就像是一面镜子,而类就像是一个在照着镜子的人. 镜子(反射机制)照出(反射)了人的全貌(类的全方位的信息,例如方法,成员变量和构造器等的相关信息) 为什么要照镜子? 因为不照镜子看不清楚自己的全貌,“镜子”就是为了解决这个问题出现的(为我们提供全面分析类的能力) 好吧