java反射如何获取私有方法_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反射如何获取私有方法_JAVA反射机制获取私有方法参数_第1张图片

--输出通过反射机制获取的参数

你可能感兴趣的:(java反射如何获取私有方法)