Name、SuperClass、Constructor、Field、Method
来源:互联网 发布:php is numeric 漏洞 编辑:程序博客网 时间:2024/05/17 10:52
Name
SuperClass
Constructor
Field
Method
获取
getName
getSimpleName
getSuperClass
getConstructor
getDeclaredConstructor+setAccessible
getConstructors
getField
getDeclaredFields+setAccessible
getFields
使用
(Class) newInstance
set
set*
get
get*
invoke
getX和getXs都只能获取public的构造函数、成员变量、成员函数。
如果需要使用protected/private的,需要使用getDeclaredX+setAccessible()禁用安全检查。
此外,对于静态元素,使用的时候第一个参数object传null即可。
Java Code
package com.bjsxt.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.bjsxt.test.bean.User;
public class Test {
public static void main(String[] args) {
String path="com.bjsxt.test.bean.User";
try {
Class<?> clazz = Class.forName(path);
System.out.println(clazz.getName());
System.out.println(clazz.getSimpleName());
clazz.getSuperclass();
//获取所有public的构造函数
Constructor<?>[] constructors = clazz.getConstructors();
for (Constructor<?> constructor2 : constructors) {
System.out.println(constructor2);
}
Constructor<?> constructor = clazz.getDeclaredConstructor(int.class, int.class, String.class );
User user=(User)constructor.newInstance(1, 18, "shadowfaxghh");
System.out.println(user.getUname());
//也可以直接使用class.newInstance(),此时会调用默认的无参构造方法,因为此时为private,故会报java.lang.IllegalAccessException
// User user2=(User)clazz.newInstance();
Field declaredField = clazz.getDeclaredField("uname");
declaredField.setAccessible(true);
declaredField.set(user, "abcde");
System.out.println(declaredField.get(user));
Method declaredMethod = clazz.getDeclaredMethod("setUname", String.class);
declaredMethod.invoke(user, "xxx");
declaredMethod.setAccessible(true);
System.out.println(user.getUname());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
- Name、SuperClass、Constructor、Field、Method
- class&constructor&method&field
- Java_反射_Class类(Method,Field,Constructor)
- Java_反射_Class类(Method,Field,Constructor)
- 黑马程序员------反射技术Constructor,Field,Method
- class中的field,property,method,constructor
- Java反射机制--Class,Field,Method,Constructor
- 反射与Constructor、Method、Field类的使用
- 黑马程序员-Class类, Constructor类,Field类, Method类的小总结
- java中级-14-反射-反射概念及Field、Method、Constructor的应用
- 黑马程序员——反射——Class、Constructor、Field、Method及简单框架原理
- Java深入(高新技术)(四):反射、Class、Constructor、Method、Field、数组的反射、JavaBean
- 浅谈Java中的反射机制以及Class、Constructor、Field、Method简单框架原理
- superclass.constructor.call的用法
- (10) 反射(基石class类、Constructor类、Field类、Method类、数组的反射、HashCode的分析)
- Constructor argument name
- must override a superclass method
- base.superclass.constructor.call(this,config)
- HPU 1276: QAQ and steel ball discs
- PE框架——使用工厂类生成序列号seq
- C#代码分析器(C#游戏代码注入)
- Java初始化总结【6、涉及到继承时 初始化顺序!!!!!】
- PE框架——template,command,chain
- Name、SuperClass、Constructor、Field、Method
- 面试总结
- .Net程序员学用Oracle系列(19):我知道的导出和导入
- PE框架——发送报文流程
- 2017年3月5日 周考3 解题报告
- 中游学院Swift语言视频教程swift培训视频
- xcode8.2 免证书手机调试详解
- PE框架简介
- Leetcode 533 Lonely Pixel II