来看Java中的反射机制
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流.反射,reflection,听其名就像照镜子一样,能够瞥见本人也能够瞥见他人的每部分。在java言语中这是一个很主要的特征。上面是来自sun公司官网关于反射的先容:
ReflectionisafeatureintheJavaprogramminglanguage.ItallowsanexecutingJavaprogramtoexamineor"introspect"uponitself,andmanipulateinternalpropertiesoftheprogram.Forexample,itspossibleforaJavaclasstoobtainthenamesofallitsmembersanddisplaythem.
TheabilitytoexamineandmanipulateaJavaclassfromwithinitselfmaynotsoundlikeverymuch,butinotherprogramminglanguagesthisfeaturesimplydoesntexist.Forexample,thereisnowayinaPascal,C,orC++programtoobtaininformationaboutthefunctionsdefinedwithinthatprogram.
OnetangibleuseofreflectionisinJavaBeans,wheresoftwarecomponentscanbemanipulatedvisuallyviaabuildertool.ThetoolusesreflectiontoobtainthepropertiesofJavacomponents(classes)astheyaredynamicallyloaded.
那末注释一下就是,反射是java言语的一个特征,它允程序在运转时(注重不是编译的时分)来举行自我反省而且对外部的成员举行操纵。比方它同意一个java的类猎取他一切的成员变量和办法而且显现出来。这个能特定我们不常看到,可是在其他的好比C大概C++言语中很不就存在这个特征。一个罕见的例子是在JavaBean中,一些组件能够经由过程一个机关器来操纵。这个机关器就是用的反射在静态加载的时分来猎取的java中类的属性的。
反射的前传:类范例ClassClass
java中有一个类很特别,就是Class类,良多伴侣在写程序的时分有效过好比Apple.class来检察范例信息,人人就能够把它了解为封装了类的信息,良多注释说Class类没有机关器,实际上是有的,只不外它的机关办法是private的(机关函数另有private的??有,如许是为了克制开辟者往本人创立Class类的实例)。
假如我们拿到一个类的范例信息,就能够使用反射猎取其各类成员和办法了。(注:Class从JDK1.5版本后就入手下手更多为泛型服务了)那末我们怎样拿到一个范例的信息呢?假定我们有一个Role类:
packageyui;
/**
*Abaseclasshavingsomeattributesandmethods
*@authorOctobershiner
*@since2012317
*
**/
publicclassRole{
privateStringname;
privateStringtype;
//Constructors
publicRole(){
System.out.println("ConstructorRole()isinvoking");
}
//公有机关器
privateRole(Stringname){
this.name=name;
System.out.println("ConstructorRole(Stringname)isinvoking.");
}
//getandsetmethod
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetType(){
returntype;
}
publicvoidsetType(Stringtype){
this.type=type;
}
//overridethetoStringmethodtoshowtheclass
@Override
publicStringtoString(){
return"Thisisarolecalled"+this.name;
}
}在没有对象实例的时分,次要有两种举措。
//取得类范例的两种体例
Classcls1=Role.class;
Classcls2=Class.forName("yui.Role");注重第二种体例中,forName中的参数必定是完全的类名(包名+类名),而且这个办法必要捕捉非常。现在失掉cls1就能够创立一个Role类的实例了,使用Class的newInstance办法相称于挪用类的默许的机关器
Objecto=cls1.newInstance();//创立一个实例
//Objecto1=newRole();//与下面的办法等价如许就创立了一个对象,弱点是我们只能使用默许机关函数,由于Class的newInstance是不承受参数的,前面会讲到可承受参数的newInstance,第二,假如类的机关函数是private的,好比Class,我们仍然不克不及实例化其对象。
<p>
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 是一种突破用户端机器环境和CPU 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
页:
[1]