JAVA反射机制获取私有方法参数

JAVA的反射机制
作者:邱名涛
撰写时间:2019年5月2日
关键技术:Java+MyEclipse

在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,
对于任意 一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),
这种动态 获取的信息以及动态调用对象的方法的功能就称为java语言的反射机制。
通俗点讲, 通过反射,该类对我们来说是完全透明的,想要获取任何东西都可以。

1、先准备一个测试的类(获取私有属性)

package com.gx.reflectdemo;

public class Person {
	private String name;
	private int age;

	private Person() {

	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	private void test() {
		System.out.println("private void test");
	}

	public String say(String txt) {
		return age + "岁的" + name + "说:\"" + txt + "\"";
	}
}

2、创建反射机制(通过链接,获取类)

package com.gx.reflectdemo;

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

public class ReflectDemo {
public static void main(String[] args) throws ClassNotFoundException {
	//加载类
	Class<?> class1= ReflectDemo.class.getClassLoader().loadClass("com.gx.reflectdemo.Person");//(已知类)?=代表一切
    Class<?> class2=Class.forName("com.gx.reflectdemo.Person");//(已知类)通过链接,获取类
    Class<?> class3=Person.class;//(已知类)直接获取类名
    Class<?> class4=new Person("",1).getClass();//要实例才可以拿到类信息(在已知对象的情况下才能去拿 )
 
    //通过反射机制获取构造器
    System.out.println("--------取构造器-------");
  // class2.getConstructors();只能拿到,你能访问的构造器
    //class2.getDeclaredConstructors();可以拿到全部的构造器
    //constructor[]返回一个包含某些 Constructor 对 象的数组,这些对象反映此 Class 对象所表示的类的所有公 共构造方法
  Constructor<?>[] constructors= class2.getDeclaredConstructors();//把所有构造器装进数组
    for (Constructor<?> constructor : constructors) {//遍历数组内容
		//修饰符、名称、形参列表类型
	StringBuilder builder=new StringBuilder();
	//修饰符
	builder.append("\t"+Modifier.toString(constructor.getModifiers()));//append拼接
	//名称
	builder.append(" "+constructor.getName());
	//形参列表类型
	builder.append("(");
	Class<?>[] rarameterTypes=constructor.getParameterTypes();
	for (Class<?> rarameterType : rarameterTypes) {
		builder.append(rarameterType.getSimpleName()+", ");
	}
	builder.append(")");
	System.out.println(builder.toString());
    }
    //通过反射机制获取方法
    //getMethods:你能够访问的//getDeclareMethods:获取全部
    Method[] methods=class2.getDeclaredMethods();
    for (Method method : methods) {
		StringBuilder builder=new StringBuilder();
		//修饰符
		builder.append("/t"+Modifier.toString(method.getModifiers()));
	}
}
}

–获取方法私有的String和int参数:
在这里插入图片描述
–输出通过反射机制获取的参数
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值