目录结构
ReflectionTest.java
package com.guo.base;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class ReflectionTest {
private Class<User> userClass;
{
userClass = getClass(1);
System.out.println(
Modifier.toString(userClass.getModifiers()) + " class " + userClass.getSimpleName() + "{\n" + "");
}
public static void main(String[] args) {
ReflectionTest test = new ReflectionTest();
test.fields();
test.constructors();
test.methods();
System.out.println("}");
}
@SuppressWarnings("unchecked")
private Class<User> getClass(int key) {
switch (key) {
case 1:
return User.class;
case 2:
try {
return (Class<User>) Class.forName("com.guo.base.User");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
case 3:
User user = new User("zhangsan", "123456");
return (Class<User>) user.getClass();
default:
return null;
}
}
public void fields() {
Field[] fields = getFields(Member.DECLARED);
for (Field field : fields) {
printField(field);
}
System.out.println();
}
private void printField(Field field) {
System.out.print(" " + Modifier.toString(field.getModifiers())); // 修饰符
int index = field.getType().toString().lastIndexOf(".") + 1;
System.out.print(" " + field.getType().toString().substring(index));
System.out.println(" " + field.getName() + ";");
}
//userClass.getSuperClass();
private Field[] getFields(int declared) {
switch (declared) {
case Member.DECLARED: // private和public修饰,不包括父类
return userClass.getDeclaredFields();
case Member.PUBLIC: // only public修饰,包括父类
return userClass.getFields();
default:
return null;
}
}
public void constructors() {
Constructor<?>[] constructors = getConstructors(Member.DECLARED);
for (Constructor<?> constructor : constructors) {
printContructor(constructor);
}
}
private Constructor<?>[] getConstructors(int declared) {
switch (declared) {
case Member.DECLARED:
return userClass.getDeclaredConstructors();
case Member.PUBLIC:
return userClass.getConstructors();
default:
return null;
}
}
private void printContructor(Constructor<?> constructor) {
System.out.print(" " + Modifier.toString(constructor.getModifiers()));
System.out.print(" " + constructor.getName());
printParameters(constructor.getParameterTypes());
printExceptionTypes(constructor.getExceptionTypes());
System.out.println();
}
public void methods() {
Method[] methods = userClass.getMethods();
for (Method method : methods) {
printMethod(method);
}
}
private void printMethod(Method method) {
System.out.print(" " + Modifier.toString(method.getModifiers()));
System.out.print(" " + method.getReturnType().getSimpleName());
System.out.print(" " + method.getName());
printParameters(method.getParameterTypes());
printExceptionTypes(method.getExceptionTypes());
System.out.println();
}
// 打印参数列表
private void printParameters(Class<?>[] classes) {
if (classes == null || classes.length == 0) {
System.out.print("() ");
return;
}
System.out.print("(");
for (int i = 0; i < classes.length; i++) {
if (i < classes.length - 1) {
System.out.print(classes[i].getSimpleName() + " args" + i + ", ");
} else {
System.out.print(classes[i].getSimpleName() + " args" + i);
}
}
System.out.print(") ");
}
// 打印throws异常
private void printExceptionTypes(Class<?>[] exceptionTypes) {
if (exceptionTypes == null || exceptionTypes.length == 0) {
System.out.println("{ \n\t...\n }");
return;
}
System.out.print("throws ");
for (Class<?> class1 : exceptionTypes) {
System.out.print(class1.getSimpleName() + " ");
}
System.out.println("{ \n\t...\n }");
}
}
User.java
package com.guo.base;
public class User {
private String username;
private String password;
@SuppressWarnings("unused")
private User() {
super();
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((password == null) ? 0 : password.hashCode());
result = prime * result + ((username == null) ? 0 : username.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;
User other = (User) obj;
if (password == null) {
if (other.password != null)
return false;
} else if (!password.equals(other.password))
return false;
if (username == null) {
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
控制台输出结果