package com.shujia.day21;
import java.lang.reflect.Constructor;
import java.util.Arrays;
/*
类中的三大成员:
成员变量:Field
构造方法:Constructor
成员方法:Method
获取构造方法,通过类的字节码文件对象进行获取
public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取一个类中某一个公共的构造方法
getConstructors 获取类中所有公共的构造方法
getDeclaredConstructors 获取类中所有的构造方法,包括私有的
创建对象 通过获取的构造方法进行创建对象
newInstance()
con.newInstance(“zhangsan", 20);
反射获取构造方法并创建对象
调用私有的构造方法赋值需要先进行暴力访问 c3.setAccessible(true);
*/
public class StructureDemo1 {
public static void main(String[] args) throws Exception{
//如何通过反射获取一个类中的构造方法,并创建对象
//获取类的Class对象
Class<?> studentClass = Class.forName("com.shujia.day21.Student");
//public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取一个类中某一个公共的构造方法
//获取一个类中无参的公共的构造方法
Constructor<?> c1 = studentClass.getConstructor(); // 无参的构造方法
System.out.println(c1);
//获取一个有一个参数是String类型的构造方法
Constructor<?> c2 = studentClass.getConstructor(String.class);
System.out.println(c2);
// Constructor<?> c3 = studentClass.getConstructor(String.class, int.class);
// System.out.println(c3);
//如何获取私有的构造方法
Constructor<?> c3 = studentClass.getDeclaredConstructor(String.class, int.class);
System.out.println(c3);
System.out.println("------------------------------------------------");
//getConstructors() 获取类中所有公共的构造方法
Constructor<?>[] cs = studentClass.getConstructors();
System.out.println(Arrays.toString(cs));
System.out.println("------------------------------------------------");
//获取类中所有的构造方法,包括私有的
Constructor<?>[] cs2 = studentClass.getDeclaredConstructors();
System.out.println(Arrays.toString(cs2));
System.out.println("------------------------------------------------");
//如何通过获取的构造方法进行创建对象
//newInstance(Object ... initargs)
Object o = c1.newInstance();
System.out.println(o);
System.out.println("------------------------------------------------");
Object o2 = c2.newInstance("魏一民");
System.out.println(o2);
System.out.println("------------------------------------------------");
c3.setAccessible(true); // 暴力访问
Object o3 = c3.newInstance("魏一民", 18);
System.out.println(o3);
}
}
标签:字节,构造方法,System,创建对象,获取,Constructor,println,out
From: https://www.cnblogs.com/qiwei-bigdata/p/18377108