转载:
Java是一种杰出的产业开发语言,这是因为它带来了伟大的统一和对事实上以前并不存在的重要标准的关注。但是和所有语言一样,Java将来也会褪色。依据我做的超越Java的研究,一个重复出现的主题是有越来越多的人相信Java已不再足够的有效率。以下一组技术可以使你更有效率。他们不是对所有的工程都适合,但当被应用于适合的工程时,他们是优秀的工具。
1、动态语言
动态语言可以比像C++或Java这样的静态语言更加有效率。他们可以让你用更少的语言表达更多的意思。这里,我会关注现在新出现最流行的动态语言Ruby。用Ruby的"Hello, World"和Java的作一个比较:
<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>puts "Hello, world."
|
这显然既简单又明了。你不需要写一些其他的代码去做这件事。下面是用Java语言的描述:
<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!")
}
}
|
在Java中,类型是静态的。这就代表了编译器要检查所有的类型;你必须建立和编译一个完整的程序。在Ruby中,类型是动态的,所以你不需要去声明他们,你可以马上编写和运行他们。下面是用两种语言描述的Fibonacci 序列:
<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>First, Ruby:x1, x2 = 0, 1
//110.times do puts x2 x1,
x2 = x2, x1+x2
//4end
|
注意到在第一、四行同时声明两个变量,让你可以简洁地表达两种不同的声明形式。另外,注意到10是一个对象,它支持方法,如:times。再另外,在do和end之间是一个代码块。Ruby代码块可以让你把代码块传入方法。。这种技术导致了难以置信的效率和简洁的代码。接下来,看一看用Java实现的代码:
<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>class Fib
{
public static void main (String args[])
{
int x1 = 0;
int x2 = 1;
int total = 1;
for (int i=0; i<10; i++)
{
System.out.println(total);
total = x1+x2;
x1 = x2;
x2 = total;
}
}
}
|
你需要去声明所有的变量,以及详细地写出来你用for循环实现的迭代。每个变量都是独立的,所以你必须有一个临时变量用于存放total。
相比,动态语言更为简洁。按照一个普通的规则,如果你可以写更少的代码而不牺牲可读性,这些代码将导致更高的效率。(但是你不可以牺牲可读性来达到这一步,我们可以以Perl举例作为结尾。)
更为重要的是,动态语言在Java开发者想要去解决的重要问题上表现得更好,如: 元编程。 Hibernate 使用元编程技术使对象持久化。
Spring使用元编程来为Java对象增加服务,而免除你为他们构建额外支持的烦恼。在Rails框架上,当红的Ruby利用了自己能力来构建某种已存的
最有效率的应用开发框架。
令人惊讶的是,许多Java开发者采用了Ruby。Ant和Tomcat的发明者James Duncan Davidson正在Rails上使用Ruby,以及Java的畅销书作者之一,JSP专家组的
成员David Geary正在写一本关于Rails上的Rub的书y。许多在Java社区里有着聪明思想的人都转向使用像Ruby一样的动态语言。这是因为这种新出现的语言能更好的解决最有兴趣的问题。动态语言将不会完全取代Java,但是他们会适合于解决小的,轻量级的问题。
2、Continuation 服务
Web编程绝对是个的灾难。在Java诞生十年后,我们仍旧不能构建一个使返回按钮正确的框架。Web应用是无国界的,所以Web应用会发展得更好。但是很难去构建无国界的应用,而我们现有的框架不能给与我们足够的帮助。
你使用大多数Java的Web框架时,从根本上说,你构建了许多不相关的使用servlets或JSP技术的应用。然后通过手工保存对象来把他们集成起来,这些对象就是你需要的,用来暂时存储对象的会话。
Continuation是语言的构造器,它可以使你快速存储某个线程的状态,过后执行这个线程。基于Continuation的web框架总体上是通过模拟一个监控状态的应用来使web开发变得更为容易。当你的应用需要从用户那取得数据时,这种框架使用continuation来自动保存应用程序的状态。如果用户按下返回按钮或者通过浏览器的历史纪录回到以前的页面,应用程序可以重新读取一个continuation。
基于continuation最好的框架是用动态语言来开发的。到目前为止,最健壮的框架是Seaside。他是基于一种Smalltalk的Squeak语言的框架。Seaside支持很好的调试功能,你可以实时检查、调试以及在浏览器里改动你的代码。Borges、Iowa和Wee都是基于Ruby且支持continuation的框架。
Java不支持continuations,但是一些在特殊限制下构造的Java框架支持模拟continuations。这些框架具有用其他语言编写的continuations框架的某些特征。
流行的框架是用了一些高级的技术,如:字节码增强、反射以及特殊类的装载器。这些技术用Java部分地实现了continuations。
Cocoon 2在Rhino JavaScript 虚拟机中增加了continuations,用来模拟监控状态的应用。
Spring Webflow使用了状态机来提供对返回按钮良好的支持,以及其他一些continuation服务的特征。
Lakeshore使用了悬挂的线程来模拟continuations。这种方法不像其他方法一样有可扩展性,同时还缺乏对返回按钮完整的支持,但是这些预计在将来
都会具有。
每个月都会有新的框架出现。我认为在未来的三年内,我们都会使用支持基于continuations的方法的web开发框架,这种框架是由一种语言或者其他语言编写的。
3、惯例超越配置
Java开发者经常探索用于改进配置的方法。新的框架越来越多的使用Java 5批注来进行配置。其他的框架是用一种不同的方法。Rails中的Ruby常用惯例来推断需要在其他框架进行配置的联系。
例如:在结束的时候,一个叫BlogController且有一个show方法的Rails控制器,会自动在blog_controller目录里提交一个叫show.rhtml的视图。Rails还使用命名惯例来绑定数据库表里持久化的类。默认情况下,Perosn类会与用英语的复数people与表进行匹配。
新的框架将会支持惯例,而不是配置。
4、元编程
就像前面提到的一样,在Rails编程框架上的Ruby里,存在着许多hype的。我认为这种hype是正确的。在Rails上的Ruby让你比起java,可以在一个更抽象的层次上编写你的程序。有了Rails上的Ruby,你可以创建域对象,这种对象可以发现相关联的数据库表的内容。例如:你可以写这样简单的模型对象:
<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>class Person < ActiveRecord::Baseend
|
这种类表面看起来相当的受限制。但是一旦你执行它,Rails就会展现它的神奇。这种实现了持久化Rails的活动纪录框架与相关的数据库关联,以及为了表定义扫描系统表,还发现数据库里列项。然后,活动记录为数据库中的每一列增加一个属性,为数据库中id列名在类中增加一个独一无二的标示符。你可以用下面的类去编写代码:
<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>person=Person.newperson.name='Bruce
Tate'person.email=
'bruce.tate@j2life.nospam.com'person.save
|
数据库的列名和行为都会在运行时后加入Person类。你可以很容易的扩展Person类:
<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>class Person < ActiveRecord::Base
has_many :carsend
|
通过Ruby中一个belongs_to的简单方法和:department标示符,我实现了所有我想做的。活动记录隐式调用了Ruby的元编程来添加了所有的方法和变量,这些方法和变量用来管理一个任何一个部门之间的一对多关系。Rails用户使用域语言来管理像继承这样的关系,另外可以用Ruby语言在一个更抽象的层次上工作。Rails无缝扩展了Ruby语言。
Rails会不会是下一代伟大的框架?有可能。要做一个选择的话,Rails应该会是在使用Ruby或是其他动态编程语言的元编程框架潮流中的第一个。或者,你可能看到Rails会作为某些松散对齐技术的中枢,它是以元编程作为基础的。在任何情况下,你都会更有效率。
总结
在《超越Java》这本书中,我表达了Java还不会淘汰意思,但是在最近的十年,我们目睹了在Java领域之外引人注目的创新。这四种技术会在不远的将来起到重要的作用。请密切关注他们。
分享到:
相关推荐
每一种技术都有其特定的场景和优势,选择合适的技术组合对于项目的成功至关重要。 综上所述,JAVA的常用技术覆盖了从框架到工具的各个方面,它们共同构成了一个强大且灵活的开发平台。对于JAVA开发者而言,熟练掌握...
通过学习《Java技术手册第五版》,无论是初学者还是经验丰富的开发者,都能提升对Java语言的理解,增强编程技能,并能更好地应对实际项目中的挑战。在阅读过程中,结合实践编写代码,将理论知识转化为实践经验,是...
Java移动通信技术是现代通信行业中不可或缺的一部分,尤其在智能手机和平板电脑等移动设备上发挥着重要作用。...这篇毕业设计论文将有助于读者深入理解Java在这一领域的应用实践和技术挑战,为相关项目开发提供指导。
本文将围绕“CPlus_to_Java_Converter”这一工具,探讨如何将C++代码转换为Java代码,并分析这一过程中涉及的关键技术和挑战。 首先,我们要明确C++到Java的转换并非简单的语法替换,因为两者的语言特性差异显著。...
- **新技术融合**:随着技术的发展,例如Kotlin对Java的补充,以及Qt等新框架的出现,未来可能会有更多融合方式。 - **低代码/无代码平台**:集成开发环境和平台的进步,可能会简化Java与Delphi的结合,降低开发...
虽然JIT技术有所改善,但在某些场景下,Java 的性能可能无法满足对速度有苛刻要求的应用。 2. **内存占用较大**:Java 对象在内存中的表示较为复杂,每个对象都需要额外的内存开销。同时,垃圾回收机制虽然有助于...
本文主要探讨了几种不同的Java编译技术,包括解释器、即时编译器(JIT)、动态编译和本地编译,以及转换器在其中的作用。 首先,解释器是一种将Java源代码直接转化为机器可执行代码的工具。这种方式的优点在于快速...
这本书旨在帮助Java程序员深入理解技术原理,提升面试表现,为他们在职场竞争中赢得优势。 在Java编程语言部分,你可以学习到基础语法、面向对象特性,如封装、继承和多态,以及异常处理、集合框架等核心内容。深入...
在IT行业中,Java是一种广泛应用的编程语言,尤其在开发跨平台的应用程序方面具有显著优势。在本项目中,“用Java技术开发的camera”,我们聚焦于使用Java来构建相机功能,这是一个涉及图形用户界面(GUI)设计、...
对于初学者来说,Java 的学习过程可能会充满挑战,但通过持续的努力和实践,可以逐渐掌握并精通。 首先,Java 的学习需要投入时间和精力。Java 作为一种严谨的计算机语言,语法规范严谨,要求开发者具有清晰的逻辑...
虽然打地鼠游戏可能不直接使用Jini技术,但这种技术展示了Java如何促进网络设备和服务的动态发现和交互,对于构建分布式系统和网络应用有深远影响。 2.2 Java语言的主要特点 2.2.1 简单性 Java语法简洁,避免了C++...
10. **性能优化**:虽然Java在跨平台上有优势,但性能可能不如原生的Delphi。了解Java性能调优技巧,如JVM参数调整、代码优化,以及使用Java的并发工具来提高程序效率。 总的来说,从Delphi转向Java涉及到语言特性...
Java与MS Office的结合,虽然面临一定的技术挑战,但通过合理的架构设计和技术选型,完全能够在保持Java跨平台优势的同时,充分利用MS Office的强大功能。无论是通过OLE Automation、第三方库还是云服务,都有成熟的...
例如,Java与大数据、人工智能等新技术的结合,为Java开发者带来了新的挑战和机遇。此外,Java在Web开发、桌面应用、嵌入式系统等多个领域的应用,也要求开发者具备多方面的技术知识和实践能力。 总结来说,Java...
Java的即时编译技术提高了运行效率,而C++的泛型编程和STL使程序设计更具挑战性。 (三) 个人建议 作者建议先学C++,再学Java,因为C++的基础能更好地理解Java的简化设计。C++像是重装骑兵,功能强大但复杂,而Java...
JavaBridge 的核心功能主要是实现Java Native Interface (JNI) 的简化,它提供了一种方便的方式让非Java程序调用Java方法,反之亦然。JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。但是,直接...