关于java的反射,调用私有方法(有参数私有方法),私有属性

来源:互联网 发布:mac os x lion系统 编辑:程序博客网 时间:2024/05/22 03:17

第一步,创建一个实体类,里面有私有属性和私有方法

package com.wbs.fanshe.domain;public class Person {private int age = 19;private String name  ;public String getName(){return name;}private String setName(String name){this.name= name;return "老罗的锤子手机很好用";}private String setNameAndAge(String name ,int age){this.name = name;this.age = age;return "老罗写的书《我的奋斗》很好看很搞笑";}}


第二步,获得私有属性的值,调用私有方法(有参数私有方法)

package com.wbs.fanshe.test;import java.lang.reflect.Field;import java.lang.reflect.Method;import com.wbs.fanshe.domain.Person;public class testPerson {public static void main(String[] args) {Person person = new Person();try {Class clazz = Class.forName("com.wbs.fanshe.domain.Person");Person obj = (Person) clazz.newInstance();//1.获取私有属性值//注意:是getDeclaredField,不是getFieldField privateStringField = clazz.getDeclaredField("age");  //允许访问私有字段privateStringField.setAccessible(true);//获得私有字段值  int fieldValue = (int) (privateStringField).get(obj);System.out.println("Person私有属性:"+fieldValue);//2.调用私有方法(有参数且只有一个参数)Method methodOne = clazz.getDeclaredMethod("setName",String.class);//允许访问私有方法methodOne.setAccessible(true);  //调用私有方法获得返回值String stringOne = (String) methodOne.invoke(obj,"黄小明");System.out.println("调用私有方法(一个参数)的返回值:"+stringOne);//3.调用私有方法(有参数且有多个参数)Method methodTwo = clazz.getDeclaredMethod("setNameAndAge",String.class,int.class);//允许访问私有方法methodTwo.setAccessible(true);  //调用私有方法获得返回值String stringTwo = (String) methodTwo.invoke(obj,"乔布斯",25);System.out.println("调用私有方法(多个参数)的返回值::"+stringTwo);} catch (Exception e) {e.printStackTrace();}}}


下载代码_java反射

原创粉丝点击