在学了面向对象的语言Java之后,肯定会接触到对象的封装,类、属性、方法的修饰符public和private以及default,那接下来如果认识了java的反射机制,会更加深对类的封装的认识。
三种方式得到Class对象:
1.调用对象的getClass方法,返回该对象的Class对象
2.Class.forName(“类的名字”);
3.Class c=类名.class
首先,让我们来看看一个带有java反射操作的类 xingpd.java:
/**
* @author xpd3581
* @date 2017-3-17
* @version 1.0
*/
package com.xingpd.code;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;
/*** xingpd 2017-3-17 ***/
public class xingpd {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
String className = sc.next();
/** 根据类的全路径进行类加载,返回该类的Class对象 **/
Class cla = Class.forName(className);
/** 得到该类的内部类集合 **/
Class[] cls = cla.getDeclaredClasses();
/** 打印内部类信息 **/
System.out.println(" **** These are InnerClasses info: ****");
/** 遍历该类方法的集合 **/
for (Class cl : cls) {
/** 打印类名 **/
System.out.println(cl.getName());
for (Field f : cl.getDeclaredFields()) {
/** 打印属性修饰符 **/
System.out.print(Modifier.toString(f.getModifiers()) + " ");
/** 打印属性类型 **/
System.out.print(f.getType().getName() + " ");
/** 打印属性名称 **/
System.out.println(f.getName());
}
for (Method m : cl.getDeclaredMethods()) {
/** 打印方法修饰符 **/
System.out.print(Modifier.toString(m.getModifiers()) + " ");
/** 打印方法返回类型 **/
System.out.print(m.getReturnType().getName() + " ");
/** 打印方法名称 **/
System.out.println(m.getName());//
}
}
System.out.println(" **** These are methods info: ****");
/** 利用得到的Class对象的自审,返回方法对象集合 **/
Method[] method = cla.getDeclaredMethods();
/** 遍历该类方法的集合 **/
for (Method me : method) {
/** 打印方法信息 **/
System.out.println(me.toString());
}
System.out.println(" **** These are fields info: **** ");
/** 利用得到的Class对象的自审,返回属性对象集合 **/
Field[] field = cla.getDeclaredFields();
/** 遍历该类属性的集合 **/
for (Field f : field) {
/** 打印属性信息 **/
System.out.println(f.toString());
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class MyUser {
private String name = "guanyu";
private int age = 25;
public final 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;
}
public MyUser(String name, int age) {
super();
this.name = name;
this.age = age;
}
public MyUser() {
super();
}
public void test(String str, int i) throws Exception {
}
}
此类运行以后,效果如下:
绿色字体是运行以后手动输入的类名。