java中的反射机制

JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

java的反射机制就是增加程序的灵活性,避免将程序写死到代码里。

以下介绍3种方式获得class文件的对象。(ps:我是自己写了一个Person类)

方式1:通过对象获取class文件的对象

public static void function_1(){
	Person person=new Person();
	Class clazz=person.getClass();
	System.out.println(clazz);	
}

 

方式2:通过类名直接获取class文件的对象

public static void function_2(){
	Class person=Person.class;
	System.out.println(person);		
}

 

方式3:通过静态方法获取 Class文件的对象

public static void function_3() throws Exception{
	Class person=Class.forName("demo4.Person");
	System.out.println(person);
}

下面再来介绍一下利用java的反射机制获取类中的多有公共构造方法

public static void function_3() throws Exception{
        //获取class文件的对象
	Class person=Class.forName("demo4.Person");
        //获取Person类中的所有公共构造方法
	Constructor[] cons=person.getConstructors();
        //利用增强for循环对获得的方法进行遍历并且输出
	for(Constructor con:cons){
		System.out.println(con);
	}
	System.out.println("============");
        //获取的是Person类中的指定构造方法
	Constructor c=person.getConstructor(String.class,int.class);
	Object obj=c.newInstance("小明",10);
	System.out.println(obj);	
}

 

java中的反射机制有很大的用处,它还带有很多的方法,我在这里就不一一赘述了。 其中我还想继续描述的就是反射擦除。以集合为例。在ArrayList<String>中,我们首先存储的是String类的变量,但是如果我们想存储Integer类型的变量,直接使用add()方法是不行的,这时我们必须使用反射擦除。

//反射擦除
public static void function_6() throws Exception{
	List<String> list=new ArrayList<String>();
	list.add("小明");
	list.add("小红");
	System.out.println(list);
	System.out.println("===========");
	Class clazz=list.getClass();
        //获取ArrayList中的方法add()
	Method method=clazz.getMethod("add", Object.class);
        //运行List.add()
	method.invoke(list, 2);
	System.out.println(list);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值