反射机制看自省(探寻类自身的信息--属性/方法/构造方法)

[size=medium]反射机制看自省(探寻类自身的信息--属性/方法/构造方法)[/size]
public class TestReflection_1 {

public static void main(String[] args) throws Exception {
//反射中最常见的方式, 获得类对象
Class class1 = Class.forName("com.reflection.Student");

//class1.getName();//返回实体的名称
//class1.getSimpleName//只获得类的名称
//class1.getName()//获得这个类所在的包名+类名, 比如cn.com.michael.User
//class1.getSuperClass
//class1.getInterfaces 获得这个所实现的所有接口,返回一个类对象数组
//class1.getFields()//获取此类以及此类的父类的所有属性,但不包括此类的私有属性
//class1.getDeclaredFields()//获取此类的所有属性,包括私有属性,但获取不到父类的属性

//首先,属性
System.out.println("/**-------------属性-----------------*/");
Field[] fs1 = class1.getFields();//获取不到本类的私有属性
Field[] fs2 = class1.getDeclaredFields();
System.out.println("class " + class1.getSimpleName() +"{");
for(Field f:fs2){
System.out.println("\t"+ f.getType().getSimpleName() + " " +f.getName() + ";");
}

//其次,方法
System.out.println("/**-------------方法-----------------*/");
Method[] methods1 = class1.getMethods();
Method[] methods2 = class1.getDeclaredMethods();
for(Method method:methods2){
System.out.print("\t" + method.getReturnType().getSimpleName() + " " + method.getName() + "(");
Class[] ps = method.getParameterTypes();
for(Class cls:ps){
System.out.print(cls.getSimpleName() + ",");
}
System.out.println("){}");
}


//最后,构造方法
System.out.println("/**-------------构造方法-----------------*/");
Constructor[] cons = class1.getConstructors();
for(Constructor c:cons){
System.out.print("\t" + class1.getSimpleName() +"(");
Class[] ps = c.getParameterTypes();
for(Class cls:ps){
System.out.print(cls.getSimpleName() + ",");
}
System.out.println("){}");
}
System.out.println("}");
}
}

class Student{
private String name;
private int age;
public String hobby;
public Student(){

}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public void study(){
System.out.println("Student " + name +" studies");
}
public String study(String course, int time){
System.out.println("Student " + name +" studies " + course +" times" );
if(time >=3)return "Good";
return "Bad";
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值