java反射创建对象实例

xiaoxiao2021-02-28  98



package com.bean;

import java.util.List;

public class PersonBean {     public String name = "yzc";

    public PersonBean() {         System.out.println("无参构造方法");     }

    public PersonBean(String name) {         System.out.println("有参参数为name构造方法");     }

    public PersonBean(String name, int age) {         System.out.println("有参参数为name+age构造方法" + name);     }

    private PersonBean(List list) {         System.out.println("有参参数为name构造方法");     }

    public String getName() {         return name;     }

    public void setName(String name) {         this.name = name;     }

}

package com.test;

import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List;

import com.bean.PersonBean;

public class ClassPersion {     //反射就是加载类 解刨出类的各个组成部分     public static void main(String[] args) throws Exception {         getPerson();         getPerson1();         getPerson2();         test4();         getPerson5();     }

    public static void getPerson() throws Exception {         //反射的第一步  加载类         Class<?> clazz = Class.forName("com.bean.PersonBean");         //获取类里面的无参构造函数         Constructor<?> c = clazz.getConstructor(null);         //new 对象         PersonBean person = (PersonBean) c.newInstance(null);

    }

    public static void getPerson1() throws Exception {         //反射的第一步  加载类         Class<?> clazz = Class.forName("com.bean.PersonBean");         //获取类里面的String构造函数         Constructor<?> c = clazz.getConstructor(String.class);         //new 对象         PersonBean person = (PersonBean) c.newInstance("aa");         System.out.println("1" + person.name);         //打印结果 yzc     }

    public static void getPerson2() throws Exception {         //反射的第一步  加载类         Class<?> clazz = Class.forName("com.bean.PersonBean");         //获取类里面的String构造函数         Constructor<?> c = clazz.getConstructor(String.class, int.class);         //new 对象         PersonBean person = (PersonBean) c.newInstance("aa", 11);         System.out.println("2" + person.name);         //打印结果 yzc     }

    //调用私有的构造函数     public static void test4() throws Exception {         Class clazz = Class.forName("com.bean.PersonBean");         //注意测试的这个构造函数是private的          //Constructor c = clazz.getConstructor(List.class);private的构造方法不能这样写,抛出NoSuchMethodException          Constructor c = clazz.getDeclaredConstructor(List.class);         //不管你的构造函数是什么访问权限,我强制给你打开这个访问权限          c.setAccessible(true);//暴力反射  注释这一行的话就不行,抛异常          PersonBean p = (PersonBean) c.newInstance(new ArrayList());         System.out.println(p.name);     }

    //调用无参构造函数     public static void getPerson5() throws Exception {         //反射的第一步  加载类         Class<?> clazz = Class.forName("com.bean.PersonBean");

        PersonBean person = (PersonBean) clazz.newInstance();         System.out.println("5" + person.name);         //打印结果 yzc     }

}

所有打印结果:

无参构造方法 有参参数为name构造方法 1yzc 有参参数为name+age构造方法aa 2yzc 有参参数为name构造方法 yzc 无参构造方法 5yzc

转载请注明原文地址: https://www.6miu.com/read-55383.html

最新回复(0)