java反射系列六之调用属性与方法

调用指定属性

package reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class TestFiled {
    public static void main(String[] args) throws Exception {
        TestFiled t = new TestFiled();
        t.test3();
    }
    //调用运行时类中的指定的属性
    public void test3() throws Exception {
        Class clazz = Person.class;
        //1.获取指定的属性
        //getField(String fieldName):获取运行时类中声明为public的指定属性名为name的属性
        Field name = clazz.getField("name");
        //2.创建运行时类的对象
        Person p =(Person) clazz.newInstance();
        System.out.println(p);
        //3.将运行时类的指定的属性赋值
        name.set(p, "巫妖果子");
        System.out.println(p);

        System.out.println();
        //getDeclaredField(String fieldName):获取运行时类中声明为private的指定属性名为age
        Field age = clazz.getDeclaredField("age");
        //设置此声明private属性可被操作
        age.setAccessible(true);
        age.set(p, 20);
        System.out.println(p);
    }
}

调用指定方法

package reflect;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestMethod {
    public static void main(String[] args) throws Exception {
        TestMethod t = new TestMethod();
        t.test2();
    }
    //调用运行时类的指定方法
    public void test2() throws Exception {
        Class clazz = Person.class;
        //getMethod(String methodName,class...params):获取运行时类中声明为public的指定方法
        Method m = clazz.getMethod("show");
        //实例化运行时类clazz的对象
        Person p = (Person)clazz.newInstance();
        //调用方法
        Object returnValue = m.invoke(p);
        //打印返回类型
        System.out.println(returnValue);

        Method m1 = clazz.getMethod("toString");
        Object returnValue1 = m1.invoke(p);
        System.out.println(returnValue1);

        //静态方法的调用
        Method m3 = clazz.getMethod("info");
        //类名.调用
        m3.invoke(Person.class);

        //getDeclaredMethod(String methodName,Class..params):获取运行时类声明的方法
        Method m4 = clazz.getDeclaredMethod("display",String.class,Integer.class);
        m4.setAccessible(true);
        Object retuenValue2 = m4.invoke(p, "Chinese",10);
        System.out.println(retuenValue2);
    }
}

调用构造器

package reflect;

import java.lang.reflect.Constructor;

public class TestConstructor {
    public static void main(String[] args) throws Exception {
        TestConstructor T = new TestConstructor();
        T.test2();
    }
    //调用指定的构造器
    public void test2() throws Exception {
        String className = "reflect.Person";
        Class clazz = Class.forName(className);

        Constructor cons = clazz.getDeclaredConstructor(String.class,int.class);
        cons.setAccessible(true);
        Person p = (Person)cons.newInstance("巫妖果子",20);
        System.out.println(p);

    }
}

原文地址:https://www.cnblogs.com/zjm1999/p/10344466.html

时间: 2024-11-05 18:41:22

java反射系列六之调用属性与方法的相关文章

java 反射机制获取类名、属性、方法、构造器和反射动态使用

被反射的类: @Table("tb_student") public class Student { @Fields(columnName="id",type="int",length=10) private int id; @Fields(columnName="studentName",type="varchar",length=10) private String studentName; @Fiel

Java反射支持通过invoke调用得到的方法

我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作.那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息.所以,反射的第一步就是得到Class对象.在JDK中提供了两种方式得到Class对象. 我们能收发数据的一个重要原因是redis服务器的实现是单线程的,为此,twemproxy的实现也是单线程的. 倘若user中的name.age属性变化,如何知道它们变化了呢? 今儿 http://www.cnblogs.com/egb3

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法.   转载https://my.oschina.net/u/1407116/blog/209383 摘要 java.lang.reflect.Field使用 Field. 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的! 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name);      返回一个 Fiel

Java反射获取对象VO的属性值(通过Getter方法)

有时候,需要动态获取对象的属性值. 比如,给你一个List,要你遍历这个List的对象的属性,而这个List里的对象并不固定.比如,这次User,下次可能是Company. e.g. 这次我需要做一个Excel导出的工具类,导出的批量数据是以List类型传入的,List里的对象自然每次都不同,这取决于需要导出什么信息. 为了使用方便,将对象的属性名与属性值存于Map当中,使用时就可以直接遍历Map了. 此次的思路是通过反射和Getter方法取得值,然后记录在一个Map当中. Kick start

波哥学JAVA,定义类 创建对象 实例化对象 属性 类调用属性或者方法

定义类 声明对象  创建对象 实例化对象 属性 对象调用属性或者方法 举例,下面定义类了一个类并声明属性,写了一个方法: 创建对象 实例化对象 属性 类调用属性或者方法

JAVA程序 写供别人调用的接口方法的时候 异常应该怎么处理?

要看出现的是哪种异常了.如果是使用某些定义好的函数,并且函数本身会产生异常处理方法一般两种:1.自己用try{}catch(){}语句捕获异常并处理.2.在定义接口的后面写上throw Exception.把异常抛出让使用接口的人处理异常.两种方法都可以.但如果是RuntimeException异常,那就是自己程序某些地方写错了,那你就必须找到并修改程序.JAVA程序 写供别人调用的接口方法的时候 异常应该怎么处理?,布布扣,bubuko.com

java的接口、类、属性、方法各有哪些修饰符

参考博客:http://blog.csdn.net/cao_tao199612/article/details/7458245 1. 接口的修饰符只有:public 2. 类的修饰符分为:可访问控制符和非访问控制符两种. 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract :最终类修饰符 final 1.公共类修饰符 public : Java 语言中类 的可访问控制符只有一个: public 即公共的.每个 Java 程序的主类都必须是 public 类

android native HAL程序 java程序 linux kernel打印调用栈的方法

android native HAL程序 java程序 linux kernel打印调用栈的方法 关于android java打出调用栈的方法 1)方法一:refs:frameworks/base/services/java/com/android/server/ActivityManagerService.javastartProcessLocked(){Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "amProcessStart&quo

java 通过反射调用属性,方法,构造器

package reflection2; import static org.junit.Assert.assertArrayEquals; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.junit.jupiter