反射-基础篇(关于类的方法合集)

1.1反射的核心API

1、基础类、平台类:java.lang.Class
    (1)获得类的三种方法:
        1、类名字.class  => Class c = Student.class
        2、对象.getClass()=> Class cls = stu.getClass()
        3、Class.forName("java.lang.String")
     (2)获得类的名字===> 类.getName()
         Class cls = String.class.getName()
2、属性类:Field

3、方法类:Method

4、构造方法类:Constructor

1.2关于类的方法合集

注意:以下的所有的例子都以这个Student类为例

public class Student{
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    

}
1、stu.getName()//获取类的名字
2、stu.newInstance()//就是new对象实例,相当于new+无参构造方法==》 
                    Student stu = cls.newInstance()
3、获得属性(一个和一堆)
    (1)stu.getField(String)
    (2)stu.getDeclaredField(String)
    (3)stu.getFields():获得本类和父类的所有公共属性
    (4)stu.getDeclaredFields():获得本类的所有属性
注意:获得属性也可以拿取属性的修饰符、类型和名字
    例:
    Class cls = Student.class;
    Fields[] fs = cls.getDeclaredFields();
    for(Field f:fs){
        //属性的名字
        String fname = f.getName();
        //属性的类型
        Class fType = f.getType();
        String fTypeName = fType.getName();
        //修饰符(获得的属性为int,需要转一下)
        int m = f.getModifiers();
        String mod = Modifier.toString(m);
    }
4、获得方法(和属性的获得大同小异)   
    (1)stu.getMethod(1,2)//1:方法名 2:class类的可变参数
    (2)getDeclaredMethod(1,2)//1:方法名 2:class类的可变参数
           例如:=》Method m = cls.getDeclaresMethod("setUsername",String.class)
                   //破封装,当方法是私有的时需要破封装,下面的方法执行才会起作用   
                   m.setAccessible(true);
                   //方法的执行,相当于stu.setUsername("etoak");
                   m.invoke(stu,"etoak");
    (3)getMethods()
    (4)getDeclaredMethods()
注意:因为属性没有参数,但是方法有参数,这是唯一的不同点
例:
    Class cls = String.class;
    Methods[] mt = cls.getDeclareMethods();
    for(Method m:mt){
        //获得方法的名字
        String mName = m.getName();
        //获得方法的修饰符
        String mModifier =  Mo difier.toString(m.getModifier());
        //获得方法的返回类型
        String mTypeName = m.getType().getName();
        //获得方法的参数(这里是不一样的地方)
        Class[] params = m.getParameterTypes();
        for(Class p:params){
            //getSimpleName()是获取简写的名字
            String pName = p.getSimpleName();
        }
    }

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

新建文件夹-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值