★ 获取类的方法
找出一个类中定义了些什么方法,这是一个非常有价值也非常基础的反射用法。
代码演示:
package cn.hncu.reflect.two;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import org.junit.Test;
/**
*
*@author <a"283505495@qq.com">lxd</a>
*@version 1.0 2017-4-19 下午5:11:01
*@fileName ReflectDecompose.java
*/
public class ReflectDecompose{
private static final String clsName = "cn.hncu.reflect.two.UserModel";
@Test
public void demo1() throws Exception{
Class clazz = Class.forName(clsName);
Method ms[] = clazz.getMethods();
for(Method m:ms){
System.out.println(m.toGenericString());
System.out.println("name:"+ m.getName());
System.out.println("DeclaringClass:"+ m.getDeclaringClass());
Class paramTypes[] = m.getParameterTypes();
for(int i=0;i<paramTypes.length;i++){
Class c = paramTypes[i];
System.out.println("param"+i+":"+c);
}
Class exceps[]= m.getExceptionTypes();
for(int i=0;i<exceps.length;i++){
Class c = exceps[i];
System.out.println("excep"+i+":"+c);
}
System.out.println("returnType:"+ m.getReturnType());
int modifier = m.getModifiers();
System.out.println("修饰符:"+ Modifier.toString(modifier));
System.out.println("-----------");
}
}
★ 获取类的构造器
找出一个类中定义的构造方法,构造器没有返回类型。
代码演示:
@Test
public void demo2() throws Exception{
Class clazz = Class.forName(clsName);
Constructor cons[] = clazz.getConstructors();
for(Constructor con:cons){
System.out.println(con.toGenericString());
System.out.println("name:"+ con.getName());
System.out.println("DeclaringClass:"+ con.getDeclaringClass());
Class paramTypes[] = con.getParameterTypes();
for(int i=0;i<paramTypes.length;i++){
Class c = paramTypes[i];
System.out.println("param"+i+":"+c);
}
Class exceps[]= con.getExceptionTypes();
for(int i=0;i<exceps.length;i++){
Class c = exceps[i];
System.out.println("excep"+i+":"+c);
}
int modifier = con.getModifiers();
System.out.println("修饰符:"+ Modifier.toString(modifier));
System.out.println("-----------");
}
}
★ 获取类的属性字段
找出一个类中定义了哪些属性字段。
代码演示:
// 获取类中所有属性(字段或变量)的信息
@Test
public void demo3() throws Exception{
Class clazz = Class.forName(clsName)
//Field flds[] = clazz.getDeclaredFields()
Field flds[] = clazz.getFields()
for(Field fld:flds){
System.out.println(fld.toGenericString())
System.out.println("name:"+ fld.getName())
System.out.println("DeclaringClass:"+ fld.getDeclaringClass())
System.out.println("Type:"+ fld.getType() )
//修饰符(private static final)
int modifier = fld.getModifiers()
System.out.println("修饰符:"+ Modifier.toString(modifier))
System.out.println("-----------")
}
}
}
用到的类:
AA类:
class AA {
public int a=5;
protected double x=1;
public void aa(int a, double b, String s) {
}
}
UserModel类:
package cn.hncu.reflect.two;
import java.io.IOException;
import java.io.Serializable;
import cn.hncu.reflect.one.Person;
public class UserModel extends AA implements Serializable{
private static final long serialVersionUID = 1L;
private String uuid;
public static String name;
protected int type;
private String pwd;
public static final double PI=3.14;
public UserModel(){
}
private UserModel(String uuid, String name, int type, String pwd) {
this.uuid = uuid;
this.name = name;
this.type = type;
this.pwd = pwd;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
UserModel other = (UserModel) obj;
if (uuid == null) {
if (other.uuid != null)
return false;
} else if (!uuid.equals(other.uuid))
return false;
return true;
}
@Override
public String toString() {
return uuid + ", " + name + ", " + type;
}
Person aa(){
return null;
}
private int bb(Person p, int n) throws NumberFormatException,IOException {
return 0;
}
protected static final void cc(double d){
}
}