package com.cntaiping.tpi.claimplat.serviceapi.Test1.demo04;
public class Student {
//成员变量
private String name;
public int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student(String name) {
super();
this.name = name;
}
public Student(int age) {
super();
this.age = age;
}
public Student() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
}
package com.cntaiping.tpi.claimplat.serviceapi.Test1.demo04;
import java.lang.reflect.Constructor;//别导错包
public class StudentTest1 {
public static void main(String[] args) throws Exception {
//获取字节码对象
Class aClass =Student.class;
Student newInstance = (Student)aClass.newInstance();//newInstance:创建该类型的一个实例
Constructor c1 = aClass.getDeclaredConstructor(String.class);//getConstructor(Class<?>... parameterTypes)只返回制定参数类型访问权限是public的构造器
//getDeclaredConstructor(Class<?>... parameterTypes)返回制定参数类型的所有构造器,私有和公有的都可以
Constructor c2 = aClass.getDeclaredConstructor(int.class);//
Constructor c3 = aClass.getDeclaredConstructor();//无参
Constructor c4 = aClass.getDeclaredConstructor(String.class,int.class);//顺序不能反
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
Student s1 = (Student)c1.newInstance("张三");//newInstance:创建该类型的一个实例
Student s2 = (Student)c2.newInstance(18);
Student s3 = (Student)c3.newInstance();
Student s4 = (Student)c4.newInstance("李四",28);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
//getFields:获取public修饰的所有属性,返回一个Field数组(包括父类的)
//getDeclaredFields:获取所有属性,返回一个Field数组
//getField:传入一个参数(属性名),获取单个属性,返回一个Field对象,只能获取public修饰的
//getDeclaredField:传入一个参数(属性名),获取单个属性,返回一个Field对象
//getMethods:获取所有的public修饰的方法,包括父类的,返回Method
//getDeclaredMethods:获取所有的返回,不包括父类,返回Method数组
//getMethod:传入一个参数(方法名),返回一个Method对象,只能获取到public修饰的
//getDeclared:传入一个参数(方法名),返回一个Method对象
//newInstance:创建该类型的一个实例
}
}
package com.cntaiping.tpi.claimplat.serviceapi.Test1.demo04;
import java.lang.reflect.Field;
public class StudenTest2 {
public static void main(String[] args) throws Exception {
//获取字节码对象
Class c = Student.class;
//创建Student对象
Student newInstance = (Student)c.newInstance();//创建一个实例
//获取成员变量
Field namefield = c.getDeclaredField("name");//getDeclaredField仅能获取类本身的属性成员(包括私有、共有、保护)
Field agefield = c.getField("age");//getField只能获取public的字段,包括父类的
namefield.setAccessible(true);//暴力反射
namefield.set(newInstance,"张三");
agefield.set(newInstance, 18);
System.out.println(newInstance);
}
}