分享

JAVA反射调用无参构造、有参构造、普通方法、私有方法,成员变量操作

 好汉勃士 2021-09-10

JAVA反射调用无参构造、有参构造、普通方法、成员操作

Person类

package demo; public class Person { private String id; private String name; public Person(){ System.out.println('我是无参构造'); } private Person(String id){ System.out.println('我是有参私有构造,传入的值为:'+id); } public Person(String id,String name){ System.out.println('我是有参公有构造,传入的值为:'+id+','+name); } public void create(String name){ System.out.println('我是create方法,参数为:'+name); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 测试方法
package demo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Hello {
public static void main(String[] args) throws Exception {
//String fieldName = 'name' ;  //要操作的成员
Class <?> cls = Class.forName('demo.Person') ;
Object obj = cls.newInstance(); //调用无参构造



//调用类成员
Field fieldName = cls.getDeclaredField('name') ;
fieldName.setAccessible(true);  //允许访问私有
fieldName.set(obj, '张三') ;
System.out.println(fieldName.get(obj));

//调用公有有参构造
Constructor<?> csr = cls.getConstructor(String.class ,String.class) ;  //调用有参构造
Object obj1 = csr.newInstance('123','张三丰') ;

//调用有参构造,私有的有参构造 需要用 getDeclaredConstructor方法
Constructor<?> csr1 = cls.getDeclaredConstructor(String.class) ;  //调用私有构造
csr1.setAccessible(true);
Object obj2 = csr1.newInstance('123321') ;

// 第一个参数是方法名称,第二个参数是参数的类型,如果有多个参数,依次填写
Method mth = cls.getMethod('create', String.class);
// 调用方法
mth.invoke(obj, '创造');

//调用普通方法
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多