从本质上说,java并没有什么缺陷,所有的语言都不过是一种工具而已。
但是,作为一种工具,自然希望它越方便越好。工具是给人用的。工具的不同,决定了能做出东西的质量。
与c#相比,java语言本身有两个地方,是有待改进的。比较严重的不足。
第一,没有轻量级的方法的支持,没有在语言层做出对event的支持。
系统组件之间耦合,本质上,还是方法调用。这种调用有两种形式,一种是A去调用B的方法,另外一种,就是A传递一个函数指针给B,让B去调用。后一种,就是回调函数。有些开发语言中,把回调函数称为事件。
java语言,对回调的支持,有明显的不足。
java是通过一个单方法的接口,来实现事件这种设计需求。为了实现多播,需要用一个集合类来装载这个接口的所有调用者。这个集合类要实现addListener,removeListener等方法。
而c#对此定义了专门的语法,叫做delegate和event。event就是delegate,只是它专门用来做事件的用途。
从本质上来说,这二者其实没有什么不同。只不过是c#的一个语法糖而已。
然而,因为这个语法糖,c#实现事件这种设计需求,只需要两行代码。而java,用20行还不一定能搞定。
有时候,懒惰的聪明人想到办法来解决这个问题,就是在java类中调用一个抽象方法,这样,可以实现单播的回调。这个类的使用者,继承这个类,实现抽象方法,这样就等于变相实现了事件。然而,这样做的问题,是不正确的使用了继承。同时,从使用者的角度看来,如果不去看基类的源码或者文档,很难发现这个方法里面是有玄机的。也就是说,它影响了架构,并且可读性不好。
c#的delegate,还有一个附加的功能,就是异步调用。这个功能,实在是太方便了。对一些通讯方面的项目,异步调用经常是必须。传统的方法,需要用多线程来实现。为了提高性能,就要搞线程池,还要考虑调用队列不能无限制的增加,必要的时候,让线程阻塞,整个框架是相当复杂的。然而,C#在语言层,把这一切都做好了。这对通讯方面的项目来说,实在是太方便了。
Java的第二点不足,是缺少p/invoke这种机制,让java程序可以调用系统本地的api。或者说,让java可以调用c函数。jni这方面是不完善的。除了内存复制降低了效率以外,它还使项目开发人员必须使用其他开发语言。而且,对于指针这种东西,无法复制,所以限制了很多功能的使用。的确,这种方法看上去不美,可是它很实用。因为没有纯粹的java操作系统,所以有时候必须调用操作系统的功能。
第三,还有java没有property这种语法,用getter和setter来代替属性,使代码看起来不美观。既然它是一种规则,那就该在语法中定义。这并不改变虚拟机的实现,本来是没有多大难度的东西。
从这几点来看,可以发现java和c#在设计思想上的差异。java是理想主义,而c#是实用主义。
然而,作为程序员,需要的是实用主义。能解决问题,才是最重要的。再难看的招式,只要能杀敌就是好招式。这恐怕就是java在语言发展上落后于c#的原因。
直到今天,java语言的开发者,思路仍然没有改变过来。这是令人十分厌恶的。程序员需要一个解决问题的工具,不需要高谈阔论的理论。事实证明,大公司也经常忽悠人。还是来现实的比较好。怎样才能把java改善得象c#一样快捷易用。
分享到:
相关推荐
实验内容:C++语言、Java语言缺陷模式测试 二.实验要求:给出测试用例和测试结果 实验四 系统测试 一.实验内容:数据库应用系统性能测试 二.实验要求:给出响应时间、吞吐量测试用例和结果 以上代码均可运行
Java缺陷检查系统源码.zip
内容概要:通过带着读者设计并实现了一个基于 Github 的 Java 程序缺陷修复原型系统 VulRepair。并且为了验证 VulRepair 的缺陷修复效果,还设计并实现了一组评估对比实验,从多个角度评估验证本文提出的缺陷修复...
关于 Java 线程编程的大多数书籍都长篇累牍地指出了 Java 线程模型的缺陷,并提供了解决这些问题的急救包(Band-Aid/邦迪创可贴)类库。我称这些类为急救包,是因为它们所能解决的问题本应是由 Java 语言本身语法所...
本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,...—— GUY STEELE,Sun学者以及Java语言规范的合著者 “我笑了,我叫起来了,我赞赏地猛举起了我的手” ——TIM PEIERLS,LLC的主席和前成员,JSR166专家组成员
不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳实践,而且从架构设计的角度分析了java api存在的设计缺陷和可能存在的安全风险,以及应对的策略和措施。可以将本书作为java安全方面的工具书,...
本书深入研究Java编程语言及其核心类为的细微之处,特写95个有关Java或其他类库的陷阱和缺陷的谜题,其中大多数谜题都采用短程序的形式给出。在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上...
Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...
一、源码特点 ... 2、开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0,使用java语言开发。 3、数据库文件名是jspsbug.sql ,系统名称bug 4、系统首页地址:http://127.0.0.1:8080/bug/login.jsp
自己采用面向对象方法和Java语言开发一个玩五子棋游戏的分布式系统,不同的玩家可以通过Internet在任何不同的机器上玩该游戏,并支持聊天。虽然功能也不是很齐全,比如暂不支持注册、记录玩家信息及声音的功能,而且UI...
JavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序...它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择。
不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳实践,而且从架构设计的角度分析了java api存在的设计缺陷和可能存在的安全风险,以及应对的策略和措施。可以将本书作为java安全方面的工具书,...
本书是国外高校采用率很高的Java程序设计经典教材。书中以Java基础知识为主,包括基本类型、字符串、控制流、类...本书适合作为高等院校计算机专业本科生或研究生Java语言程序设计课程的教材,也适合相关技术人员参考。
北京 Java在语言层次上实现了对线程的支持。它提供了Thread/Runnable/ThreadGroup等一系列封装的类和接口,让程序员可以高效的开发Java多线程应用。为了实现同步,Java...而且Java语言最大的特点就是废除了指针,把
1、管理员端 (1)管理员登录:管理员进入软件缺陷管理系统进行各类...开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7+ 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件: idea Maven包:Maven3.3.9+
Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...
本书深入研究Java编程语言及其核心类为的细微之处,特写95个有关Java或其他类库的陷阱和缺陷的谜题,其中大多数谜题都采用短程序的形式给出。在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上...
讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。
描述java语言的设计缺陷
Java解惑,以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读...