仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 417|回复: 9
打印 上一主题 下一主题

[学习教程] 来看Java中的反射机制

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:01:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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类:
  1. packageyui;
  2. /**
  3. *Abaseclasshavingsomeattributesandmethods
  4. *@authorOctobershiner
  5. *@since2012317
  6. *
  7. **/
  8. publicclassRole{
  9. privateStringname;
  10. privateStringtype;
  11. //Constructors
  12. publicRole(){
  13. System.out.println("ConstructorRole()isinvoking");
  14. }
  15. //公有机关器
  16. privateRole(Stringname){
  17. this.name=name;
  18. System.out.println("ConstructorRole(Stringname)isinvoking.");
  19. }
  20. //getandsetmethod
  21. publicStringgetName(){
  22. returnname;
  23. }
  24. publicvoidsetName(Stringname){
  25. this.name=name;
  26. }
  27. publicStringgetType(){
  28. returntype;
  29. }
  30. publicvoidsetType(Stringtype){
  31. this.type=type;
  32. }
  33. //overridethetoStringmethodtoshowtheclass
  34. @Override
  35. publicStringtoString(){
  36. return"Thisisarolecalled"+this.name;
  37. }
  38. }
复制代码
在没有对象实例的时分,次要有两种举措。
  1. //取得类范例的两种体例
  2. Classcls1=Role.class;
  3. Classcls2=Class.forName("yui.Role");
复制代码
注重第二种体例中,forName中的参数必定是完全的类名(包名+类名),而且这个办法必要捕捉非常。现在失掉cls1就能够创立一个Role类的实例了,使用Class的newInstance办法相称于挪用类的默许的机关器
  1. Objecto=cls1.newInstance();//创立一个实例
  2. //Objecto1=newRole();//与下面的办法等价
复制代码
如许就创立了一个对象,弱点是我们只能使用默许机关函数,由于Class的newInstance是不承受参数的,前面会讲到可承受参数的newInstance,第二,假如类的机关函数是private的,好比Class,我们仍然不克不及实例化其对象。
<p>
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难
简单生活 该用户已被删除
10#
发表于 2015-3-21 12:19:12 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
莫相离 该用户已被删除
9#
发表于 2015-3-14 17:05:53 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
admin 该用户已被删除
8#
发表于 2015-3-7 09:23:39 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
精灵巫婆 该用户已被删除
7#
发表于 2015-2-23 15:51:18 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-7 23:38:01 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
山那边是海 该用户已被删除
5#
 楼主| 发表于 2015-2-2 15:37:21 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-1-31 08:19:36 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
兰色精灵 该用户已被删除
板凳
发表于 2015-1-29 07:10:09 | 只看该作者
是一种突破用户端机器环境和CPU
若天明 该用户已被删除
沙发
发表于 2015-1-20 12:47:38 来自手机 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表