反射

1、获取实现该类的所有接口及父类

@Test
public void test1(){
Class clazz=Person.class;
System.out.println(clazz.getSuperclass().getSimpleName());
//实现的接口
Class clazzInterface[]=clazz.getInterfaces();
for (Class c : clazzInterface) {
System.out.println(c.getSimpleName());
}
}

2、获取该类所有的构造方法,并执行

@Test
public void test2(){
Class clazz=Person.class;
Constructor constructor[]=clazz.getDeclaredConstructors();
for (Constructor c : constructor) {
System.out.println(c.getModifiers());
Class clazzType[]=c.getParameterTypes();
for (Class cc : clazzType) {
System.out.println(" "+cc.getSimpleName());
}
}
//调用构造方法(使用构造方法进行实例化对象)
try {
//clazz.newInstance();//调用无参构造
//调用有参构造
Constructor constru=clazz.getDeclaredConstructor(Integer.class,String.class,String.class);
constru.newInstance(1,"张三","男");
} catch (Exception e) {
e.printStackTrace();

}

3、根据类对象 获取 类的所有的方法

@Test
public void test3(){
//获取所有的方法
Class clazz=Person.class;
Method methods[]=clazz.getDeclaredMethods();
System.out.println(methods.length);
for (Method method : methods) {
//获取每个方法的名字
System.out.println(method.getName());

//每个方法的返回值类型
System.out.println("  "+method.getReturnType().getName());

//每个方法的修饰符
System.out.println("  "+method.getModifiers());

//获取每个方法的参数列表
Class[] classType=method.getParameterTypes();
for (Class c : classType) {
System.out.println("   "+c.getSimpleName());
}
}
}

4、根据类对象 获取 类的属性

@Test
public void test4(){
//之前
Person person=new Person();
//person.setPid(1);
Person person2=new Person();
//person2.setPid(100);
Class clazz=Person.class;
Field[] fields=clazz.getFields();//只能获取public修饰的属性
Field[] fields2=clazz.getDeclaredFields();//获取所有的属性(包括私有)
for (Field field : fields2) {
//获取所有属性的属性名
System.out.println(field.getName());
}

System.out.println(fields2.length);
}

5、 根据类对象 获取 类名(全限定名  包名)
@Test
public void test5(){
Class clazz=Person.class;
//获取全限定名
System.out.println(clazz.getName());
//获取类名(不包括包名)
System.out.println(clazz.getSimpleName());
//获取包名
System.out.println(clazz.getPackage().getName());
}

6、获取类对象
@Test
public void test6() {
try {
// 1.实体类.class
// Class clazz=Person.class;
// 2.对象.getClass
// Person person=new Person();
// Class clazz=person.getClass();
// 3.Class.forName()
//Class clazz = Class.forName("com.zking.entity.Person");
//4.通过类加载的loadClass
// ClassLoader classLoader=Person.class.getClassLoader();
// Class clazz =classLoader.loadClass("com.zking.entity.Person");
//5.通过子类.class.getSuperClass()
// Class clazz =Son.class.getSuperclass();
// System.out.println(clazz);

// [6].获取包装类的类对象
Class clazz=Integer.class;
System.out.println(clazz);

} catch (Exception e) {
e.printStackTrace();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值