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参数:
JAVA反射机制获取私有方法参数_第1张图片
–输出通过反射机制获取的参数
JAVA反射机制获取私有方法参数_第2张图片

你可能感兴趣的:(课堂笔记)