愤怒的大鸟 发表于 2015-1-18 11:36:21

发布一篇java下溯外型与运转期范例标识

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

<br>
为办理这个成绩,必需有一种举措可以包管下溯外型准确举行。只要如许,我们才不会贸然外型成一种毛病的范例,然后收回一条对象不成能收到的动静。如许做长短常不平安的。
在某些言语中(如C++),为了举行包管“范例平安”的下溯外型,必需接纳特别的操纵。但在Java中,一切外型城市主动失掉反省和核实!以是即便我们只是举行一次一般的括弧外型,进进运转期今后,仍旧会毫无包涵地对这个外型举行反省,包管它切实其实是我们但愿的那品种型。假如不是,就会失掉一个ClassCastException(类外型背例)。在运转时代对范例举行反省的举动叫作“运转期范例标识”(RTTI)。上面这个例子向人人演示了RTTI的举动:

//:RTTI.java
//Downcasting&Run-TimeType
//Identification(RTTI)
importjava.util.*;

classUseful{
publicvoidf(){}
publicvoidg(){}
}

classMoreUsefulextendsUseful{
publicvoidf(){}
publicvoidg(){}
publicvoidu(){}
publicvoidv(){}
publicvoidw(){}
}

publicclassRTTI{
publicstaticvoidmain(String[]args){
Useful[]x={
newUseful(),
newMoreUseful()
};
x.f();
x.g();
//Compile-time:methodnotfoundinUseful:
//!x.u();
((MoreUseful)x).u();//Downcast/RTTI
((MoreUseful)x).u();//Exceptionthrown
}
}///:~和在表示图中一样,MoreUseful(更有效的)对Useful(有效的)的接口举行了扩大。但因为它是承继来的,以是也能上溯外型到一个Useful。我们可看到这会在对数组x(位于main()中)举行初始化的时分产生。因为数组中的两个对象都属于Useful类,以是可将f()和g()办法同时发给它们两个。并且假设试图挪用u()(它只存在于MoreUseful),就会收到一条编译期堕落提醒。
若想会见一个MoreUseful对象的扩大接口,可试着举行下溯外型。假如它是准确的范例,这一举动就会乐成。不然,就会失掉一个ClassCastException。我们不用为这个背例编写任何特别的代码,由于它指出的是一个大概在程序中任何中央产生的一个编程毛病。
RTTI的意义远不单单反应在外型处置上。比方,在试图下溯外型之前,可经由过程一种办法懂得本人处置的是甚么范例。全部第11章都在报告Java运转期范例标识的各个方面。
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。

不帅 发表于 2015-1-21 10:50:36

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

海妖 发表于 2015-1-30 15:58:23

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

因胸联盟 发表于 2015-2-6 13:56:19

是一种使用者不需花费很多时间学习的语言

分手快乐 发表于 2015-2-16 09:20:15

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

莫相离 发表于 2015-2-16 20:53:47

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

老尸 发表于 2015-2-28 19:41:28

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

飘灵儿 发表于 2015-3-6 18:06:51

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

简单生活 发表于 2015-3-11 09:09:19

Java是一种计算机编程语言,拥有跨平台、面向对java

乐观 发表于 2015-3-18 02:11:19

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

再见西城 发表于 2015-3-25 07:27:17

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

谁可相欹 发表于 2015-4-8 00:20:01

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

冷月葬花魂 发表于 2015-4-21 06:30:47

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

爱飞 发表于 2015-4-26 22:12:17

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

透明 发表于 2015-4-29 20:37:14

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

仓酷云 发表于 2015-5-5 05:49:38

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

变相怪杰 发表于 2015-5-6 14:18:20

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

若天明 发表于 2015-6-11 08:39:01

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

山那边是海 发表于 2015-6-17 11:08:17

Java是一种计算机编程语言,拥有跨平台、面向对java

柔情似水 发表于 2015-6-18 21:43:55

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
页: [1]
查看完整版本: 发布一篇java下溯外型与运转期范例标识