Java反射机制——调用方法、获取父类和父接口

一、反射机制去调用方法(重点)

反射机制。让代码具有通用性,可变化的内容都是写到配置文件里面去,将来修改配置文件之后,创建的对象不一样,调用的方法也不同。但是Java源代码不需要做任何的改动。这就是反射机制的魅力。。

测试:

import java.lang.reflect.Method;
public class test03 {
    /*重点:必须掌握,通过反射机制怎么调用一个对象的方法?*/
    public static void main(String args[]) throws Exception {
        //获取一个类
        Class studentServiceClass = Class.forName("src.refect.StudentService");
        //创建对象
        Object obj = studentServiceClass.newInstance();
        //获取Method(区分一个方法用”方法名和形参“区分)
        Method loginmethod = studentServiceClass.getDeclaredMethod("login",String.class,String.class);
        //调用方法(该方法是反射机制中最重要的方法,必须记住)
        //调用方法的四要素:
        /*
        * invoke:调用的意思
        * loginmethod:方法
        * obj:对象
        * returnValue:返回值*/
        //调用obj对象的loginmethod方法传递”“"root","123"这个参数:
        Object returnValue = loginmethod.invoke(obj,"root","123");
        System.out.println(returnValue);//true
    }
}

上面代码所获取的类如下所示:

package src.refect;
public class StudentService {
    public Boolean login(String name,String password){
        if ("root".equals(name)&&"123".equals(password)){
            return true;
        }
        return false;
    }
}

二、利用反射机制获取父类和父接口(重点)

一个类,怎么获取这个类的父类,已经实现了哪些接口?

测试:

public class test03 {
    /*重点:必须掌握,通过反射机制怎么获取父类和父接口?*/
    public static void main(String args[]) throws Exception {
        //获取一个类
        Class stringClass = Class.forName("java.lang.String");
        //获取父类
        Class superClass = stringClass.getSuperclass();
        System.out.println(superClass.getSimpleName());//输出:Object
        //获取父接口【获取String类实现的所有接口(一个类可以实现多个接口)】
        Class[] interfaces = stringClass.getInterfaces();
        for (Class i:interfaces){
            System.out.println(i.getName());
            /*  运行结果:
                java.io.Serializable
                java.lang.Comparable
                java.lang.CharSequence*/
        }
    }
}

参考内容:

如下所示String类是继承Object类,其实现的接口有java.io.Serializable, Comparable<String>, CharSequence三个父接口

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {}

三、反射Method(了解一下)

类StudentService;

package src.refect;
public class StudentService {
    public Boolean login(String name,String password){
        if ("root".equals(name)&&"123".equals(password)){
            return true;
        }
        return false;
    }
    public void logout(){
        System.out.println("退出登录系统!");
    }
}

反编译以上类中的方法:

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class test03 {
    /*反射Method*/
    public static void main(String args[]) throws Exception {
        //获取类
        Class StudentServiceClass = Class.forName("src.refect.StudentService");
        //获取所有的Method
        Method[] methods = StudentServiceClass.getDeclaredMethods();
        //System.out.println(methods.length);//2
        //遍历Method
        for (Method method : methods) {
            //获取修饰符列表
            System.out.println(Modifier.toString(method.getModifiers()));
            //获取返回值类型
            System.out.println(method.getReturnType().getSimpleName());
            //获取方法名
            System.out.println(method.getName());//login    logout
            //获取方法的修饰符列表参数类型
            Class[] parameterTypes = method.getParameterTypes();
            for (Class parameterType: parameterTypes ){
                System.out.println(parameterType.getSimpleName());
            }
        }
    }
}

如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,你的鼓励将是我创作的最大动力!! 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-今非昔比°

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

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

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

打赏作者

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

抵扣说明:

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

余额充值