码迷,mamicode.com
首页 > 其他好文 > 详细

反射的常用方法

时间:2019-07-07 14:44:30      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:turn   ===   import   成员   struct   包名   field   getc   ring   

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

/**
 * 获取Class对象的方式: 1、Class.forName("类全名"); //加上包名的类名 
 * 2、类名.class
 * 3、new出一个对象后直接用getClass()方法来获取
 * 
 * 注意: 1、同一个字节码文件(*.class)在同一个程序当中只会被加载一次,不论用哪一种方式都得到的Class对象都是同一个。
 *          2、每一个类对应一个字节码文件(*.class)
 * 
 * 
 * Class对象的获取功能 1、获取成员变量们 Field[] getFields() : 获取所有的public成员变量
 * Field getField() : 获取特定的public成员变量(只能是公有)
 * 
 * Field[] getDeclaredFields(): 获取所有的成员变量,不考虑权限修饰符,但在使用非公有变量的时候要用setAccessible(ture)来忽略权限修饰符 
 * Field getDeclaredField()  : 获取特定的public成员变量
 * 
 * 2、获取构造方法们 Constructor<T> getConstructor(类<?>...parameterTypes) 
* Constructor<?>[] getConstructors() * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) * Constructor<?>[] getDeclaredConstructors() * * 3、获取成员方法们 Method[] getMethods() Method getMethod(String name, 类<?>...parameterTypes) * * Method[] getDeclaredMethods() Method getDeclaredMethod(String name, 类<?>...parameterTypes) * 4、获取类名 getName()
*/ public class Day1 { public String name; public String game; private int number; public static void main(String[] args) throws Exception { // 1、Class.forName("类全名"); //加上包名的类名 Class<?> class1 = Class.forName("com.hzu.se21090706.reflect.Day1"); // 2、类名.class Class<?> class2 = Day1.class; // 3、new出一个对象后直接用getClass()方法来获取 Day1 day1 = new Day1(); Class<?> class3 = day1.getClass(); // 注意: 1、同一个字节码文件(*.class)在同一个程序当中只会被加载一次,不论用哪一种方式都得到的Class对象都是同一个。 // 2、每一个类对应一个字节码文件(*.class) System.out.println(class1 == class2); System.out.println(class1 == class3); // 两个结果都是true //Field[] getFields() : 获取所有的public成员变量 Field[] fields = class1.getFields(); for (Field field: fields) { System.out.println(field); } //Field getField() : 获取特定的public成员变量 Field field = class1.getField("name"); System.out.println(field); // Field[] getDeclaredFields(): 获取所有的成员变量, // 不考虑权限修饰符,但在使用非公有变量的时候要用setAccessible(ture)来忽略权限修饰符 System.out.println("========================="); Field[] fields2 = class1.getDeclaredFields(); for (Field field2 : fields2) { System.out.println(field2); } System.out.println("====================="); Method[] methods = class1.getMethods(); for (Method method : methods) { System.out.println(method); } } @Override public String toString() { return "Day1 []"; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } }

 

反射的常用方法

标签:turn   ===   import   成员   struct   包名   field   getc   ring   

原文地址:https://www.cnblogs.com/li1234567980/p/11146062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!