一、反射机制去调用方法(重点)
反射机制。让代码具有通用性,可变化的内容都是写到配置文件里面去,将来修改配置文件之后,创建的对象不一样,调用的方法也不同。但是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());
}
}
}
}
如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,你的鼓励将是我创作的最大动力!!