美文网首页
1、反射

1、反射

作者: wqjcarnation | 来源:发表于2023-06-28 09:58 被阅读0次

    https://www.sczyh30.com/posts/Java/java-reflection-1/
    三、反射的基本运用
    上面我们提到了反射可以用于判断任意对象所属的类,获得 Class 对象,构造任意一个对象以及调用一个对象。这里我们介绍一下基本反射功能的使用和实现(反射相关的类一般都在 java.lang.relfect 包里)。

    1、获得 Class 对象
    方法有三种:

    (1) 使用 Class 类的 forName 静态方法:

    public static Class<?> forName(String className)

    2、通过反射来生成对象主要有两种方式。
    
    使用Class对象的newInstance()方法来创建Class对象对应类的实例。
    Class<?> c = String.class;
    Object str = c.newInstance();
    4、获取方法
    获取某个Class对象的方法集合,主要有以下几个方法:
    
    getDeclaredMethods 方法返回类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
    
    public Method[] getDeclaredMethods() throws SecurityException
    getMethods 方法返回某个类的所有公用(public)方法,包括其继承类的公用方法。
    
    public Method[] getMethods() throws SecurityException
    getMethod 方法返回一个特定的方法,其中第一个参数为方法名称,后面的参数为方法的参数对应Class的对象。
    
    public Method getMethod(String name, Class<?>... parameterTypes)
    
    7、调用方法
    当我们从类中获取了一个方法后,我们就可以用 invoke() 方法来调用这个方法。invoke 方法的原型为:
    
    
    public Object invoke(Object obj, Object... args)
            throws IllegalAccessException, IllegalArgumentException,
               InvocationTargetException
    
    下面是一个实例:
    
    
    public class test1 {
        public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
            Class<?> klass = methodClass.class;
            //创建methodClass的实例
            Object obj = klass.newInstance();
            //获取methodClass类的add方法
            Method method = klass.getMethod("add",int.class,int.class);
            //调用method对应的方法 => add(1,4)
            Object result = method.invoke(obj,1,4);
            System.out.println(result);
        }
    }
    class methodClass {
        public final int fuck = 3;
        public int add(int a,int b) {
            return a+b;
        }
        public int sub(int a,int b) {
            return a+b;
        }
    }

    相关文章

      网友评论

          本文标题:1、反射

          本文链接:https://www.haomeiwen.com/subject/ngdoydtx.html