15-5 反射 ---- 获取运行时类的完整结构(1)概述

15-5 反射 ---- 获取运行时类的完整结构(1)概述

使用反射可以取得:
1.实现的全部接口:public Class<?>[] getInterfaces()
确定此对象所表示的类或接口实现的接口。

2.所继承的父类:public Class<? Super T> getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的Class。

3.全部的构造器
(1)public Constructor< T >[] getConstructors():返回此 Class 对象所表示的类的所有public构造方法。
(2)public Constructor< T >[] getDeclaredConstructors():返回此 Class 对象表示的类声明的所有构造方法。

(3)Constructor类中:
①取得修饰符: public int getModifiers();
②取得方法名称: public String getName();
③取得参数的类型:public Class<?>[] getParameterTypes();

4.全部的方法
(1)public Method[] getDeclaredMethods():返回此Class对象所表示的类或接口的全部方法
(2)public Method[] getMethods() :返回此Class对象所表示的类或接口的public的方法
(3)Method类中:
①public Class<?> getReturnType()取得全部的返回值
②public Class<?>[] getParameterTypes()取得全部的参数
③public int getModifiers()取得修饰符
④public Class<?>[] getExceptionTypes()取得异常信息

5.全部的Field
(1)public Field[] getFields() :返回此Class对象所表示的类或接口的public的Field。
(2)public Field[] getDeclaredFields() :返回此Class对象所表示的类或接口的全部Field。
(3)Field方法中:
①public int getModifiers() 以整数形式返回此Field的修饰符
②public Class<?> getType() 得到Field的属性类型
③public String getName() 返回Field的名称。

6.Annotation相关
(1)get Annotation(Class< T > annotationClass)
(2)getDeclaredAnnotations()

7.泛型相关
获取父类泛型类型:Type getGenericSuperclass()
泛型类型:ParameterizedType
获取实际的泛型类型参数数组:getActualTypeArguments()

8.类所在的包 Package getPackage()

小 结:

1.在实际的操作中,取得类的信息的操作代码,并不会经常开发。
2.一定要熟悉java.lang.reflect包的作用,反射机制。
3.如何取得属性、方法、构造器的名称,修饰符等。


以下代码的应用见15-5 反射 ---- 获取运行时类的完整结构(2)

父类Creature:

package java2;

import java.io.Serializable;

public class Creature<T> implements Serializable {
    private char gender;
    public double weight;

    private void breath(){
        System.out.println("生物呼吸");
    }

    public void eat(){
        System.out.println("生物吃东西");
    }

}

注解@Interface MyAnnotation:

package java2;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value() default "hello";

}

接口MyInterface:

package java2;

public interface MyInterface {
    void info();
}

Person类:

package java2;


@MyAnnotation(value="hi")
public class Person extends Creature<String> implements Comparable<String>,MyInterface{

    private String name;
    int age;
    public int id;

    public Person(){}

    @MyAnnotation(value="abc")
    private Person(String name){
        this.name = name;
    }

    Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    @MyAnnotation
    private String show(String nation){
        System.out.println("我的国籍是:" + nation);
        return nation;
    }

    public String display(String interests,int age) throws NullPointerException,ClassCastException{
        return interests + age;
    }


    @Override
    public void info() {
        System.out.println("我是一个人");
    }

    @Override
    public int compareTo(String o) {
        return 0;
    }

    private static void showDesc(){
        System.out.println("我是一个可爱的人");
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值