反射&获取包&类&父类&接口名称&构造方法&成员变量&成员方法

接口

package com.hrf.reflect03;

public interface Dao {

}

Person类

package com.hrf.reflect03;

public class Person {

}

Emp类

package com.hrf.reflect03;

public class Emp extends Person implements Dao {

//	把这个类整个的反编译出来.
	public Emp() {
		// TODO Auto-generated constructor stub
	}

	private int id;
	private String username;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Emp(int id, String username) {
		super();
		this.id = id;
		this.username = username;
	}

	public Emp(int i) {

	}


	@Override
	public String toString() {
		return "Emp [id=" + id + ", username=" + username + "]";
	}
	public String show(int i,String b, double c) {
		return null;
	}

}

反射测试

package com.hrf.reflect03;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Parameter;

public class ReflectTest {

	public static void main(String[] args) throws Exception {
//		把Emp类整个的反编译出来
//		test01();
//		test02();
//		test03();
//		test04();
		test05();

	}
//	1.获取包类名
	public static void test01() throws Exception {
//		创建字符串对象,可以拼接
		StringBuffer sb = new StringBuffer();
//		获取反射类型
		Class<?> aClass = Class.forName("com.hrf.reflect03.Emp");
//		获取包
		String package1 = aClass.getPackage().toString();
		sb.append(package1);
//		输出
		System.out.println(sb);
	}
//	2.获取类,父类以及接口
	public static void test02() throws Exception {
//		创建字符串对象,可以拼接
		StringBuffer sb = new StringBuffer();
//		获取反射类型
		Class<?> aClass = Class.forName("com.hrf.reflect03.Emp");
//		获取类或者接口
		if (!aClass.isInterface()) {//如果不是接口就是类
//			修饰符
			sb.append(Modifier.toString(aClass.getModifiers())).append(" ");
//			添加关键字
			sb.append("class").append(" ");
//			类名称
//			sb.append(aClass.getName());//完整的类名称
			sb.append(aClass.getSimpleName()).append(" ");
//			判断是否有直接的父类
			String className = aClass.getSuperclass().getSimpleName();
			if (!"Object".equals(className)) {//如果是Object就不要
				sb.append("extends").append(" ").append(className);
			}
//			判断是否实现接口
			Class<?>[] interfaces = aClass.getInterfaces();
			if (interfaces.length > 0) {
				sb.append(" ").append("implements").append(" ");
//				遍历
				for (Class<?> ainterface : interfaces) {
					sb.append(ainterface.getSimpleName()).append(",");
				}
//				去掉最后一个逗号
				sb.deleteCharAt(sb.length() - 1);
//				String a = sb.toString().substring(0, sb.toString().lastIndexOf(","));//截取
			}
			sb.append("{}");
			
		}
		
//		输出
		System.out.println(sb);
	}
	
//	3.反射构造方法,构造方法可以重载
	public static void test03() throws Exception {
//		创建字符串对象,可以拼接
		StringBuffer sb = new StringBuffer();
//		获取反射类型
		Class<?> aClass = Class.forName("com.hrf.reflect03.Emp");
//		获取构造方法aClass.getConstructors();只能是共有的,私有的拿不到.
		Constructor<?>[] constructors = aClass.getDeclaredConstructors();//aClass.getConstructors();
//		判断
		if (constructors.length > 0) {
//			类名称
			String classSimpleName = aClass.getSimpleName();
//			遍历
			for (Constructor<?> constructor : constructors) {
//				修饰符
				sb.append(Modifier.toString(constructor.getModifiers())).append(" ")
				.append(classSimpleName).append("(");
//				类名称
//				添加方法的参数
				Parameter[] parameters = constructor.getParameters();
				if (parameters.length > 0) {
					for (Parameter param : parameters) {
//						如果有参数,获取参数的类型
//						sb.append(param.getType().getName()).append(",");
						sb.append(param.getType().getSimpleName()).append(" ");
//						获取参数名称
						sb.append(param.getName()).append(",");
					
					}
//					去掉最后一个逗号
					sb.deleteCharAt(sb.length() - 1);
					sb.append(")} \n");
				}else {
					sb.append("){} \n");
				}
			}
		}
//		输出
		System.out.println(sb);	
	}
//	4.反射成员变量
	public static void test04() throws Exception {
//		创建字符串对象,可以拼接
		StringBuffer sb = new StringBuffer();
//		获取反射类型
		Class<?> aClass = Class.forName("com.hrf.reflect03.Emp");
//		成员变量
//		Field[] fields = aClass.getFields();//只能获取public修饰的
		Field[] declaredFields = aClass.getDeclaredFields();
//		判断
		if (declaredFields.length > 0) {
//			遍历
			for (Field field : declaredFields) {
//				修饰符
				sb.append(Modifier.toString(field.getModifiers())).append(" ");
//				类型
				sb.append(field.getType().getSimpleName()).append(" ");
//				名称
				sb.append(field.getName()).append(";\n");
			}
		}
//		输出
		System.out.println(sb);	
	}
//	5.反射成员方法
	public static void test05() throws Exception {
//		创建字符串对象,可以拼接
		StringBuffer sb = new StringBuffer();
//		获取反射类型
		Class<?> aClass = Class.forName("com.hrf.reflect03.Emp");
//		获取方法
		Method[] methods = aClass.getMethods();
//		判断
		if (methods.length > 0) {
			for (Method method : methods) {
//				类型
				sb.append(Modifier.toString(method.getModifiers())).append(" ");
//				获取方法的类型
				sb.append(method.getReturnType().getSimpleName()).append(" ");
//				方法名称
				sb.append(method.getName()).append("(");
//				方法的参数
				Parameter[] parameters = method.getParameters();
//				判断
				if (parameters.length > 0) {
//					遍历
					for (Parameter param : parameters) {
//						类型+名称+逗号
						sb.append(param.getType().getSimpleName()).append(" ");
						sb.append(param.getName()).append(" ");
					}
//					去掉最后一个逗号
					sb.deleteCharAt(sb.length() - 1);
					sb.append("){}\n");
				} else {
					sb.append("){}\n");
				}
			}
		}
//		输出
		System.out.println(sb);	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值