Java反射-1

在Java中万事万物皆对象,所以类也是一种对象。

获取类对象的三种方式:

class Foo{
     public void print(){
           System.out.println("Foo");
     }
}

public static void mian(String[] args){
    Foo foo1 = new Foo();
    //第一种获取方式
    Class c1 = Foo.class;

    //第二种获取方式
    Class c2 = foo1.getClass();

    //第三种获取方式
    Class c3 = null;
    try {
        c3 = Class.forName("com.imooc.reflect.Foo");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //可以通过类的类类型创建类的对象实例
    try {
        Foo foo = (Foo)c1.newInstance();//需要有无参数的构造方法
        foo.print();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

获取类的成员方法

public static void printClassMethodMessage(Object obj){
    Class c = obj.getClass();
    System.out.println("类的名称:" + c.getName());
    Method[] methods = c.getMethods();
    for (int i = 0; i < methods.length; i++){
        Class returnType = methods[i].getReturnType();
        System.out.print(returnType.getName() + " ");
        System.out.print(methods[i].getName() + "(");
        Class[] paramsType = methods[i].getParameterTypes();
        for (Class temp : paramsType) {
            System.out.print(temp.getName() + ",");
        }
        System.out.println(")");
    }
}

获取类的成员变量

public static void printFieldMessage(Object obj){
        Class c = obj.getClass();
        Field[] fields = c.getFields();
        for (Field field : fields) {
            Class fieldType = field.getType();
            String fieldName  = field.getName();
            System.out.println(fieldType.getName() + " " + fieldName);
        }
    }

获取类的构造函数

public static void printConMessage(Object obj){
        Class c = obj.getClass();
        //Constructor[] cs = c.getConstructors();
        Constructor[] cs = c.getDeclaredConstructors();
        for (Constructor constructor : cs) {
            System.out.print(constructor.getName()+"(");
            //获取构造函数的参数列表--->得到的是参数列表的类类型
            Class[] paramTypes = constructor.getParameterTypes();
            for (Class class1 : paramTypes) {
                System.out.print(class1.getName()+",");
            }
            System.out.println(")");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值