仓酷云

标题: 发布一篇java下溯外型与运转期范例标识 [打印本页]

作者: 愤怒的大鸟    时间: 2015-1-18 11:36
标题: 发布一篇java下溯外型与运转期范例标识
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.
因为我们在上溯外型(在承继布局中向上挪动)时代丧失了详细的范例信息,以是为了猎取详细的范例信息——亦即在分级布局中向下挪动——我们必需利用“下溯外型”手艺。但是,我们晓得一个上溯外型一定是平安的;基本类不成能再具有一个比衍生类更年夜的接口。因而,我们经由过程基本类接口发送的每条动静都一定可以吸收到。但在举行下溯外型的时分,我们(举个例子来讲)其实不真的晓得一个多少外形实践是一个圆,它完整多是一个三角形、方形大概其他外形。
发布一篇java下溯外型与运转期范例标识
登录/注册后可看大图

<br>
为办理这个成绩,必需有一种举措可以包管下溯外型准确举行。只要如许,我们才不会贸然外型成一种毛病的范例,然后收回一条对象不成能收到的动静。如许做长短常不平安的。
在某些言语中(如C++),为了举行包管“范例平安”的下溯外型,必需接纳特别的操纵。但在Java中,一切外型城市主动失掉反省和核实!以是即便我们只是举行一次一般的括弧外型,进进运转期今后,仍旧会毫无包涵地对这个外型举行反省,包管它切实其实是我们但愿的那品种型。假如不是,就会失掉一个ClassCastException(类外型背例)。在运转时代对范例举行反省的举动叫作“运转期范例标识”(RTTI)。上面这个例子向人人演示了RTTI的举动:
  1. //:RTTI.java
  2. //Downcasting&Run-TimeType
  3. //Identification(RTTI)
  4. importjava.util.*;
  5. classUseful{
  6. publicvoidf(){}
  7. publicvoidg(){}
  8. }
  9. classMoreUsefulextendsUseful{
  10. publicvoidf(){}
  11. publicvoidg(){}
  12. publicvoidu(){}
  13. publicvoidv(){}
  14. publicvoidw(){}
  15. }
  16. publicclassRTTI{
  17. publicstaticvoidmain(String[]args){
  18. Useful[]x={
  19. newUseful(),
  20. newMoreUseful()
  21. };
  22. x[0].f();
  23. x[1].g();
  24. //Compile-time:methodnotfoundinUseful:
  25. //!x[1].u();
  26. ((MoreUseful)x[1]).u();//Downcast/RTTI
  27. ((MoreUseful)x[0]).u();//Exceptionthrown
  28. }
  29. }///:~
复制代码
和在表示图中一样,MoreUseful(更有效的)对Useful(有效的)的接口举行了扩大。但因为它是承继来的,以是也能上溯外型到一个Useful。我们可看到这会在对数组x(位于main()中)举行初始化的时分产生。因为数组中的两个对象都属于Useful类,以是可将f()和g()办法同时发给它们两个。并且假设试图挪用u()(它只存在于MoreUseful),就会收到一条编译期堕落提醒。
若想会见一个MoreUseful对象的扩大接口,可试着举行下溯外型。假如它是准确的范例,这一举动就会乐成。不然,就会失掉一个ClassCastException。我们不用为这个背例编写任何特别的代码,由于它指出的是一个大概在程序中任何中央产生的一个编程毛病。
RTTI的意义远不单单反应在外型处置上。比方,在试图下溯外型之前,可经由过程一种办法懂得本人处置的是甚么范例。全部第11章都在报告Java运转期范例标识的各个方面。
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。
作者: 不帅    时间: 2015-1-21 10:50
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 海妖    时间: 2015-1-30 15:58
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者: 因胸联盟    时间: 2015-2-6 13:56
是一种使用者不需花费很多时间学习的语言
作者: 分手快乐    时间: 2015-2-16 09:20
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 莫相离    时间: 2015-2-16 20:53
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 老尸    时间: 2015-2-28 19:41
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 飘灵儿    时间: 2015-3-6 18:06
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者: 简单生活    时间: 2015-3-11 09:09
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: 乐观    时间: 2015-3-18 02:11
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 再见西城    时间: 2015-3-25 07:27
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 谁可相欹    时间: 2015-4-8 00:20
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 冷月葬花魂    时间: 2015-4-21 06:30
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 爱飞    时间: 2015-4-26 22:12
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 透明    时间: 2015-4-29 20:37
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 仓酷云    时间: 2015-5-5 05:49
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 变相怪杰    时间: 2015-5-6 14:18
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 若天明    时间: 2015-6-11 08:39
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 山那边是海    时间: 2015-6-17 11:08
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: 柔情似水    时间: 2015-6-18 21:43
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2