15.3反射的应用------ 取得类的结构(血干JAVA系类)

在这里插入图片描述

【例 15.6] Person.java
package file;

import java.lang.reflect.Constructor;
interface China
{
	public static final String NATIONAL = "China";
	public static final String AUTHOR = "李华";
	public void sayChina();
	public String sayHello(String name,int age);
}

class Person implements China
{
	private int age;
	private String name;
	public Person()
	{
		
	}
	public Person(String name)
	{
		this.setName(name);
	}
	public Person(String name,int age)
	{
		this.setAge(age);
		this.setName(name);
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return this.age;
	}
	public String getName() {
		return this.name;
	}
	public void sayChina()
	{
		System.out.println("作者:"+ AUTHOR +",国籍:" + NATIONAL);
	}
	public String sayHello() 
	{
		return "你好,"+this.name+"!我的年龄是"+this.age;
	}
}


15.3.1取得所实现的全部接口

在这里插入图片描述

【例15.7]取得Person类实现的全部接口
Class<?> inter[] = c.getInterfaces();
inter[i].getName()
public class demo {

	public static void main(String[] args) 
	{
		Class<?> c = null;
		try 
		{
			c = Class.forName("file.Person");//实例化Class
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		Class<?> inter[] = c.getInterfaces();
		for(int i=0;i<inter.length;i++)
		{
			System.out.println("实现的全部接口:"+inter[i].getName());
		}
		
	}
}

在这里插入图片描述

15.3.2取得父类

在这里插入图片描述

【例15.8]取得Person的父类
Class<?> parentClass = c.getSuperclass();
System.out.println(parentClass.getName());
public class demo {

	public static void main(String[] args) 
	{
		Class<?> c = null;
		try 
		{
			c = Class.forName("file.Person");//实例化Class
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		Class<?> parentClass = c.getSuperclass();
		System.out.println(parentClass.getName());
		
	}
}

15.3.3取得全部构造方法

在这里插入图片描述

【例15.9】取得Person类中的全部构造方法

public class demo {

	public static void main(String[] args) 
	{
		Class<?> c = null;
		try 
		{
			c = Class.forName("file.Person");//实例化Class
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		Constructor<?> cons[] = c.getConstructors();
		for(int i=0;i<cons.length;i++)
		{
			System.out.println("构造方法:"+cons[i]);
		}
		
	}
}

在这里插入图片描述

在这里插入图片描述

【例15.10】取得一个类的全部构造方法
public class demo {

	public static void main(String[] args) 
	{
		Class<?> c = null;
		try 
		{
			c = Class.forName("file.Person");//实例化Class
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		Constructor<?> cons[] = c.getConstructors();
		for(int i=0;i<cons.length;i++)
		{
			System.out.print("构造方法:"+ cons[i].getModifiers()+" "+cons[i].getName());
			System.out.print("(");
			Class<?> params[] = cons[i].getParameterTypes();//参数类型 
			for(int j=0;j<params.length;j++)
			{
				//参数类型的名称
				System.out.print(params[j].getName()+" args"+i);
				if(j<params.length-1)
				{
					System.out.print(",");
				}
			}
			System.out.println(")");
		}
		
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【例15.11】使用Modifier还原修饰符
int mo = cons[i].getModifiers();
Modifier.toString(mo)
public class demo {

	public static void main(String[] args) 
	{
		Class<?> c = null;
		try 
		{
			c = Class.forName("file.Person");//实例化Class
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		
		Constructor<?> cons[] = c.getConstructors();
		for(int i=0;i<cons.length;i++)
		{
			int mo = cons[i].getModifiers();
			System.out.print("构造方法:"+ Modifier.toString(mo)+" "+cons[i].getName());
			System.out.print("(");
			Class<?> params[] = cons[i].getParameterTypes();//参数类型 
			for(int j=0;j<params.length;j++)
			{
				//参数类型的名称
				System.out.print(params[j].getName()+" args"+i);
				if(j<params.length-1)
				{
					System.out.print(",");
				}
			}
			System.out.println(")");
		}
		
	}
}

15.3.4取得全部方法

在这里插入图片描述

在这里插入图片描述

【例15.12】取得一个类的全部方法定义
//		修饰符:			int mo = m[i].getModifiers();
//						String str = Modifier.toString(mo);
//		返回类型: 			Class<?> returnType = m[i].getReturnType();
//		方法名称:			m[i].getName()
//		参数类型: 			Class<?> params[] = m[i].getParameterTypes();
//		异常:			Class<?> exception[] = m[i].getExceptionTypes();
public class demo {

	public static void main(String[] args) 
	{
		Class<?> c = null;
		try 
		{
			c = Class.forName("file.Person");//实例化Class
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		
		Method m[] = c.getMethods();
//		修饰符:			int mo = m[i].getModifiers();
//						String str = Modifier.toString(mo);
//		返回类型: 			Class<?> returnType = m[i].getReturnType();
//		方法名称:			m[i].getName()
//		参数类型: 			Class<?> params[] = m[i].getParameterTypes();
//		异常:			Class<?> exception[] = m[i].getExceptionTypes();
		
		for(int i=0;i<m.length;i++)
		{
//			修饰符:public final native
			int mo = m[i].getModifiers();
			String str = Modifier.toString(mo);
			System.out.print(str+" ");
//			返回类型:void 
			Class<?> returnType = m[i].getReturnType();
			System.out.print(returnType.getName()+" ");
//			方法名称:java.lang.Object.wait
			System.out.print(m[i].getName());
//			参数类型:long 
			System.out.print("(");
			Class<?> params[] = m[i].getParameterTypes();
			for(int j=0;j<params.length;j++)
			{
				System.out.print(params[j].getName() + " " + "args" + j);
				if(j<params.length-1) 
				{
					System.out.print(",");
				}
			}
//			异常:throws java.lang.InterruptedException			
			Class<?> exception[] = m[i].getExceptionTypes();
			if(exception.length>0)System.out.print(") throws ");
			else System.out.print(")");
			
			for(int j=0;j<exception.length;j++)
			{
				System.out.print(exception[j].getName());
				if(j<exception.length-1)System.out.print(",");
			}
			System.out.println();
		}	
	}
}

在这里插入图片描述
在这里插入图片描述

15.3.5取得全部属性

在这里插入图片描述
在这里插入图片描述

			//返回类型
			Class<?> type =  f[i].getType();
			//修饰符
			int mo = f[i].getModifiers();
			String str = Modifier.toString(mo);
			

			//		父类&&接口
			Field f[] = c.getFields();	
			//			本类
			Field f[] = c.getDeclaredFields();	
public class demo {

	public static void main(String[] args) throws Exception
	{
		Class<?> c = null;
		try 
		{
			c = Class.forName("file.Person");//实例化Class
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		}
		
//		##########################################################
		{
//		父类&&接口
		Field f[] = c.getFields();
		for(int i=0;i<f.length;i++)
		{
			//返回类型
			Class<?> type =  f[i].getType();
			//修饰符
			int mo = f[i].getModifiers();
			String str = Modifier.toString(mo);
			
			System.out.println("父类&接口:"+str+" "+type.getName()+" "+f[i].getName());
		}
		}
	
//		##########################################################		
		System.out.println("-----------------------------");
		{
			//			本类
			Field f[] = c.getDeclaredFields();
			for(int i=0;i<f.length;i++)
			{
				//				修饰符
				int mo = f[i].getModifiers();
				String str = Modifier.toString(mo);
				//				类型
				Class<?> type =  f[i].getType();
				
				System.out.println("本类:"+ str +" "+type.getName()+" "+f[i].getName());
			}
		}
	}
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿斯卡码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值