Java 基础之反射(一)

反射是框架的灵魂

1.  反射:将java类的各种成分映射成一个个的java对象
    获取内存对象,某一个new出来的引用class对象应该有一个类来描述这些类

    新生代,老年代,永久代。


2.创建Test类

public class Test {

	public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

		/*
		 *   了解反射
		 */
		//三种方式可以获取class对象
		//1、通过class类的静态方法 :forName(推荐使用)
		Class clazz = Class.forName("com.cdu.dj.entity.User");

		//2、创建对象,然后获取class对象
		//User user = new User();
		//Class clazz1 = user.getClass();

		//3、通过名.class获取class对象
		Class clazz2 = User.class;

		//4、通过clazz.getName()可以获取包名
		System.out.println(clazz.getPackage());
		
		//5、通过clazz.getSimpleName()获取到类名(不含包名)
		System.out.println(clazz.getSimpleName());
		
		//6、获取父类的包名
		Class superclass = clazz.getSuperclass();
		System.out.println(clazz.getName());//获取class User对象
		System.out.println(superclass.getName());//获取class User父类对象
	
		/*
		 *     使用反射
		 */
		System.out.println("-----");
		//1. 获取某个类的全部方法
		User user = new User(1,"罗纳尔多","11234","男");
		Method [] methods = clazz.getDeclaredMethods();
		for (int i = 0; i < methods.length; i++) {
			//使用setAccessible()方法取消java权限控制检查
			methods[i].setAccessible(true);
			//获取方法的返回值类型
			Class returnType = methods[i].getReturnType();
			//获取方法的参数列表
			Class [] para = methods[i].getParameterTypes();
			System.out.print(methods[i].getName()+"方法,");
			System.out.println("返回值类型 :"+returnType.getName());
			for (int j = 0; j < para.length; j++) {
				System.out.println("参数为 :"+para[j]);
			}
			if("setName".equals(methods[i].getName())){
				System.out.println("-----");
				methods[i].invoke(user, "迷你罗");
				//如果方法是静态方法,那么user位置写成null
				//静态方法不依赖任何对象
				//使用下面的静态方法时将判断setName改变getName
				//Object object = methods[i].invoke(user,null);
			}
		}
		System.out.println(user);
	}

}

2.User类

public class User extends Human{
	private int id;
	private String name;
	private String password;
	private String sex;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public User(int id, String name, String password, String sex) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		this.sex = sex;
	}
	public User( String name, String password, String sex,int id) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		this.sex = sex;
	}
	public User(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public User() {
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password + ", sex=" + sex + "]";
	}
	
}

3.创建Human类

public class Human {
}

猜你喜欢

转载自blog.csdn.net/qq_41813207/article/details/80196051