`
mooniscrazy
  • 浏览: 2983 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java语言的缺陷

阅读更多
从本质上说,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#一样快捷易用。


3
6
分享到:
评论
4 楼 mooniscrazy 2008-05-04  
没有这样的事情。.net framework是兼容以前版本的。你对c#的了解太少。
3 楼 qubic 2008-05-02  
两年前从c#转向java,楼主说的那些缺陷还能接受。之所以放弃是c#是因为微软经常在版本升级的时候删除或直接修改api,造成低版本写的程序在高版本中无法运行的情况,即没有做到向后兼容,这一点java做的比较好,一般把不推荐的方法标记deprecated
2 楼 mooniscrazy 2008-03-11  
但是java是工业化语言,要对它的客户负责人。提高客户的工作效率,是它分内的工作。
我们作为专业的软件开发者,也应该考虑客户利益。为客户选择成本最低的方案,才是合乎商业道德的。
降低开发成本,应该成为java设计者的目标。好看,但是不能解决问题与解决问题但是不好看相比,还是后者来得实在。
很多问题,其实是设计者的指导方针的问题,而不是技术问题。


1 楼 ShiningRay 2008-03-08  
相对于很多函数式编程语言来说,java还不是那么地理想主义
还有一些如brainf*ck,lambdak之类的语言

相关推荐

    华为公司 java语言规范

    【华为公司 Java语言规范】 Java语言编程规范是华为公司基于其内部积累的编程经验和SUN公司的《Java Coding Style Guide》整合而成的,旨在为消息应用产品的开发提供一套统一的指导原则,以提升开发效率和代码质量...

    Java缺陷检查系统源码.zip

    Java缺陷检查系统源码分析 Java作为一种广泛应用的开发语言,其源码的分析与学习对于开发者来说至关重要。这个"Java缺陷检查系统源码.zip"压缩包包含了一个名为"imagefaultcheck-master"的项目,我们可以从中学到...

    基于java语言在web开发的知识探讨.pdf

    然而,Java语言也存在一定的缺陷,例如过于简便化,限制了编程人员编程语言能力的提高。在未来的Java语言开发过程中,应该不断地对其进行完善,使其成为一种既方便使用又可以锻炼编程人员编程语言能力的综合性软件。

    Java语言的程序漏洞检测与诊断技术.pdf

    "Java语言的程序漏洞检测与诊断技术" Java语言是一种广泛应用的计算机编程语言,根据国际计算机开发语言 TIOBE 排行榜的统计显示,从2002年以后,Java语言的使用频率始终稳占计算机编程语言使用频率榜单的前两位。...

    计算机软件开发中JAVA编程语言及其实际应用.pdf

    更重要的是,Java语言编写的应用可以在任何安装了Java虚拟机(JVM)的平台上运行,这使得它成为跨平台开发的理想选择。Java虚拟机的跨平台特性使得Java开发的应用能够在不同的操作系统和硬件环境下无缝迁移和部署,...

    基于Github的Java程序缺陷自动修复

    ### 基于Github的Java程序缺陷自动修复 #### 知识点一:软件缺陷修复的重要性及背景 软件缺陷修复是软件开发过程中不可或缺的一部分。随着软件规模不断扩大和技术日益复杂,软件缺陷不仅影响软件产品的质量,也...

    Java语言中的两种异常

    ### Java语言中的两种异常:深入理解与应用 Java作为一门广泛应用的编程语言,其异常处理机制是其设计中的一大亮点,旨在帮助开发者更好地控制和处理程序运行时可能遇到的错误。在Java中,异常主要分为两大类:`...

    Java语言课程教学模式的探索.pdf

    二、Java语言课程教学模式的缺陷 1. 缺乏合适的教材:目前,高职Java语言课程教学中缺乏合适的教材,导致教师经常使用本科或普通专科的教材,这些教材理论基础内容较多,实践应用内容较少,缺乏高职教育特色。 2. ...

    软件测试实验报告含四个实验

    1. **C++和Java语言缺陷模式测试**:这个实验要求识别并构造出可能导致特定编程语言(如C++和Java)常见错误的测试用例,如空指针异常、数组越界、类型转换错误等。通过对这些已知的缺陷模式进行测试,可以有效地...

    基于Java平台安全性的分析与研究.pdf

    在分析Java平台安全性时,通常会涉及多个方面,包括但不限于Java虚拟机的安全性、Java类加载器的安全性、Java语言的安全特性、API的安全性以及安全策略等。Java虚拟机的安全性是确保Java代码在执行过程中不会对宿主...

    2022年Java线程模型缺陷Java教程.docx

    基于这些观察,作者提出了对Java语言进行改进的建议,引入"task"(任务)的概念,使其成为语言的一部分,以更好地支持面向对象的并发编程。Task可以封装异步请求,并在特定的上下文中按顺序执行,类似于active_...

    基于JAVA语言的物流管理系统的设计与实现.doc

    本文主要介绍了基于JAVA语言的物流管理系统的设计与实现,旨在解决传统物流管理方式的种种缺陷,提高企业信息管理效率。下面是相关知识点的详细解释: 一、物流信息管理系统的重要性 物流信息管理系统是一个企业不...

    Java语言开发相关单词

    根据提供的文件信息,我们可以整理出一系列与Java编程语言相关的关键词,并对这些关键词进行详细解释,以便更好地理解Java语言的核心概念和技术细节。 ### 公开访问修饰符:`public` `public`是Java中的一个访问...

    探讨计算机软件开发的Java编程语言应用.pdf

    编程初学者可以轻松地学习和掌握Java语言,而有经验的程序员也可以利用Java语言的特点快速进行软件开发。Java的普及也得益于其丰富的开发工具支持,包括集成开发环境(IDE)、代码编辑器、版本控制系统等,这些工具...

    java语言产生泊松分布[归类].pdf

    Java 语言产生泊松分布 Java 语言产生泊松分布是随机数生成领域中的重要问题。本文档主要介绍了如何使用 Java 语言产生泊松分布的随机数,并讨论了相关的理论基础和算法实现。 一、实验目的 实验目的旨在利用 ...

    使用java语言基于mysql数据库开发的进阶.pdf

    基于 Java 语言的 MySQL 数据库开发进阶 本文从 Java 基于 MySQL 数据库开发的角度,论述了软件开发规范化和灵活化的发展趋势。文章将 Java 语言应用于 MySQL 数据库开发的进程分为四个阶段,分别阐述了 JDBC 开发...

    基于图像识别的钢铁表面缺陷检测(语言:Java).zip

    基于图像识别的钢铁表面缺陷检测(语言:Java).zip

    代码管家代码管家

    今天我们要聚焦的是一款名为“代码管家”的软件,它是一款用Java语言编写的高效代码管理工具。Java作为一款跨平台的面向对象编程语言,以其强大的类库支持和优秀的性能,常被用于开发大型企业级应用和复杂系统。而...

    一种Java处理器的体系结构设计与研究.pdf

    本文阐述了一种实时Java处理器JPOR的设计结构,旨在解决Java语言在嵌入式实时应用领域中的执行速度缺陷。JPOR是一款五级流水线的RISC处理器,拥有指令预取和缓存等机制,非常适合嵌入式实时领域的应用。 知识点1: ...

Global site tag (gtag.js) - Google Analytics