`

Java反射介绍之二 ------解剖构造器

阅读更多
    一个类有多个组成部分,例如:成员变量,方法,构造方法等。反射就是加载类,并解剖出类的各个组成部分。下面就详细介绍构造器器解剖的方法。
    案例如下:首先创建一个普通的Java类Student类,该类位于cn.csdn.reflect包中并编译产生相应的class文件.下面就是该类中各种构造器解剖的方式如下:

   //第一:怎么知道 Student类中有哪些构造器呢?方法如下:
	@Test
	public void test3()throws Exception{
		//1、加载类 ("cn.csdn.reflect.Student"为包名和类名)
		Class cls = Class.forName("cn.csdn.reflect.Student");
		//2、获取加载类中的所有的构造器
		Constructor csr[] = cls.getConstructors();
		//3、遍历构造器csr
		for(Constructor c:csr){
			//打印出构造器参数的类型及构造器名称
			 System.out.println(c.toGenericString());
			
	}


// 解析:public Student()构造器
	@Test
	public void test1() throws Exception{
		// 1、加载类   ("cn.csdn.reflect.Student"为包名和类名)
		Class cls = Class.forName("cn.csdn.reflect.Student");
		// 2、通过无参数的构造器解析
		Constructor constructor = cls.getConstructor(null);
		// 3、创建类的实例
		Student entity = (Student) constructor.newInstance(null);
        //4、调用对象的方法
		entity.study();
	}
	
	//解析:public Student(String name,int age);构造器
	@Test
	public void test2()throws Exception{
		//1、加载类 ("cn.csdn.reflect.Student"为包名和类名)
		Class cls = Class.forName("cn.csdn.reflect.Student");
		//2、通过带有参数的构造器解析
		Constructor constructor = cls.getConstructor(String.class,int.class);
		//3、创建类实例
		Student entity = (Student)constructor.newInstance("redarmy",90);
		//4、调用方法
		entity.study();
		System.out.println(entity.getName());
	}
	
	
     //解析:public cn.csdn.reflect.Student(java.lang.String[])构造器
	@Test
	public void test4()throws Exception{
		//1、加载类
		Class cls = Class.forName("cn.csdn.reflect.Student");
		//2、根据构造器参数类型获取相应的构造器对象    
		Constructor csr = cls.getConstructor(String[].class);
		
		String str[]={"111","123"};
		//3、创建实体对象
		Student entity = (Student)csr.newInstance((Object)str);
/*如果以上不明白请参考:Java反射中java.lang.IllegalArgumentException: wrong number of arguments的解析*/
[url]http://redarmychen.iteye.com/blog/924134
[/url]
		//4、调用方法
		entity.study();
	}

//解析 private Student(List list)构造器
	@Test
	public void test5()throws Exception{
		//1、加载类
		Class cls = Class.forName("cn.csdn.reflect.Student");
		//2、根据构造器参数类型获取相应的构造器对象    
		Constructor csr = cls.getDeclaredConstructor(List.class);
                 //采用此法获取private修饰的构造器
		csr.setAccessible(true);//强制解析private修饰的构造器
		//3、创建实体对象
		Student entity = (Student)csr.newInstance(new ArrayList());
		//4、调用方法
		entity.study();
	}


  以上内容归redarmy_chen原创,版权归redarmy_chen所有不得随意转载  如有问题请发送邮件到redarmy.chen@gmail.com 



分享到:
评论
1 楼 Far_ranqing 2011-03-25  
哈哈哈 !!!

相关推荐

    Java基础[08-反射].ppt

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

    山东大学--局部解剖--重点.pdf

    山东大学--局部解剖--重点

    C语言深度解剖-C语言深度解剖

    C语言深度解剖-C语言深度解剖-C语言深度解剖

    C语言深度解剖 --C语言提高书籍

    C语言深度解剖 C语言深度解剖 --C语言提高书籍

    C语言深度解剖---极富含金量的国内C语言书籍

    C语言深度解剖---极富含金量的国内C语言书籍

    Java – 什么是java反射?

     Java反射机制是在运行状态中的  对于任意一个类,都能够知道这个类的所有属性和方法(动态获取的信息);  对于任意一个对象,都能调用它的任意一个方法和属性(动态调用对象的方法)  这种动态获取的信息以及...

    解剖-顺口溜--整合版(非常全).docx

    解剖-顺口溜--整合版(非常全).docx

    javaredis源码-anatomy-lettuce:庖丁解架构之RedisJava客户端Lettuce架构解剖和源码精读相关代码

    《庖丁解架构之RedisJava客户端Lettuce架构解剖与源码精读》 在IT行业中,Redis作为一款高性能的内存数据结构存储系统,被广泛应用于缓存、消息队列等多个场景。而Java作为企业级开发的主要语言,自然需要与Redis...

    福建医科大学-断层解剖真题与复习材料.pdf

    - 影像断面展示:介绍了不同部位断层影像学上的展示方式,如经胼胝体压部、经小脑齿状突等,强调了对影像学知识的理解和掌握。 - 影像名解与问答:通过具体的影像学名词解释和问答,加强了对断层解剖知识的应用和...

    机械构造解剖图鉴

    机械构造解剖图鉴 家庭小器件的构造详解!超实用

    川大华西--神经解剖学---神经系统发生.pptx

    神经系统是生物体中最为复杂的结构之一,它负责接收、处理和传递信息,以及控制和调节机体各种功能。从胚胎发育到成体的整个过程中,神经系统的形成和发展遵循着一套精密的发育程序,成为生物学和医学领域研究的重点...

    20170408-解剖FMEDA.pdf

    通过上述介绍可以看出,FMEDA作为一种重要的功能安全分析方法,在电动汽车等行业中发挥着至关重要的作用。通过系统地分析失效模式及其影响,并采取有效的诊断措施,可以显著提高产品的安全性和可靠性。

    C语言深度解剖.pdf

    ### C语言深度解剖知识点解析 #### 一、引言:C语言的重要性及现状分析 在当前快速发展的信息技术领域中,编程语言作为实现各种软件应用的基础工具,扮演着至关重要的角色。C语言作为一门历史悠久且功能强大的编程...

    行业文档-设计装置-解剖教研台.zip

    解剖教研台作为一款专为教学设计的设备,它集成了现代科技与生物学教育的精髓,旨在提升学生对解剖学的理解和实践能力。本文档主要关注的是解剖教研台的设计理念、功能特性以及在实际教学中的应用。 解剖教研台的...

    人体断层解剖学-纵隔断层解剖.ppt

    心脏是人体最重要的器官之一,是研究人体断层解剖学的核心部分。心脏的形态可以分为尖、底、面、缘、沟、迹等几个部分。右心房包含界沟、界嵴、固有心房、腔静脉窦等结构。右心室包含室上嵴、流入道、流出道等结构。...

    C语言深度解剖-131页.pdf

    根据提供的文件信息,以下是对《C语言深度解剖-131页.pdf》的知识点总结: 1. 书籍定位与目的:该书的定位是深入解析C语言,旨在挑战国内外现有的C语言相关书籍,是一本适合有一定C语言基础的学习者的进阶读物。...

Global site tag (gtag.js) - Google Analytics