BATJ面试官花样分析,C#和Java之间的主要区别

image.png
image.png

介绍

本文主要为C#开发人员了解Java提供一些基础。

Java中缺少C#的功能

  • C#包含更多原始类型和捕获算术异常的功能。
  • 包括大量的Java注释便利,其中许多,例如运算符重载和用户定义的强制转换,已经为C ++程序员社区所熟悉。
  • 事件处理是“一流的公民”,它是语言本身的一部分。
  • 允许定义“结构”,这些结构类似于类,但可以在堆栈上分配(与C#和Java中类的实例不同)。
  • C#将属性作为语言语法的一部分来实现。
  • C#允许switch语句对进行操作string。
  • C#允许提供闭包功能的匿名方法。
  • C#允许迭代器通过功能样式yield关键字使用协程。
  • C#支持输出参数,帮助返回多个值,这是C ++和SQL共享的功能。
  • C#具有别名空间的能力。
  • C#具有“显式成员实现”,该类允许类从其自己的类方法中单独实现接口的方法。这也允许它实现两个不同的接口,碰巧具有相同名称的方法。接口的方法不必是public; 它们只能通过该界面进行访问。
  • C#提供了与COM的集成。
  • 按照C和C ++的示例,C#允许按引用调用原始类型和引用类型。

C#中缺少Java的功能

  • Java的strictfp关键字保证浮点运算的结果在各个平台之间保持相同。
  • Java支持检查异常,以更好地实施错误捕获和处理。

语言之间的哲学差异

  • Java中没有无符号的原始数字类型。尽管普遍认为在代码中混合有符号和无符号变量是不好的,但是Java缺乏对无符号数字类型的支持,这使其在某种程度上不适合低级编程。
  • C#不包括检查的异常。有人会认为检查异常对于良好的编程习惯非常有帮助。其他人,包括首席C#语言架构师Anders Hejlsberg,认为它们在某种程度上是Java的实验,而且还没有证明它们是值得的。
  • C#的命名空间与C ++中的命名空间更为相似。与Java不同,名称空间不指定源文件的位置。(实际上,对于Java源文件位置来说,对应它的包目录结构并不是绝对必要的。)
  • C#包括委托,而Java不包括。有人认为委托使方法调用模型复杂化,因为委托是通过反射来处理的,这通常很慢。另一方面,它们可以通过消除声明新的(可能是匿名的)类以挂接到事件的需要,从而简化代码。
  • Java要求源文件名必须与其中的唯一public类匹配,而C#允许public同一文件中有多个类。
  • C#允许使用指针,某些语言设计者认为这是不安全的,但是某些语言功能试图确保不会意外滥用此功能。指针还极大地使诸如Java的RMI(远程方法调用)之类的技术复杂化,在该技术中,可以在一台完全独立的计算机上运行的程序中引用驻留在一台计算机上的程序对象。一些人推测,Java中缺少内存指针(被对象引用的更抽象的概念所取代)是网格计算时代的头号功臣,网格应用程序可以将单个应用程序分布在许多物理硬件上。
  • C#支持goto关键字。有时这可能很有用,但是通常建议使用结构化的控制流方法。
  • C#具有真正的多维数组,相对Java可用的数组(C#称为锯齿状数组)。多维数组始终是矩形的(在2D情况下,或对于更大的维数类似),而数组可以存储各种长度的行(同样在2D情况下)。如果内存是一个瓶颈(只有一个内存引用而不是两个内存引用,则矩形阵列可能会加快访问速度);如果内存不完整但成本高昂,则锯齿状数组可以节省内存(每行一个指针的代价) 。矩形数组还消除了为每行显式分配内存的需要。
  • Java不包括运算符重载,因为滥用运算符重载可能导致难以理解和调试的代码。C#允许操作符重载,如果谨慎使用,则可以使代码更简洁,更易读。Java缺乏重载使其在某种程度上不适合某些数学程序。相反,.NET的数字类型不与add / subtract / etc共享公共接口或超类方法,限制了数值库的灵活性。
  • 默认情况下,C#中的方法是非虚拟的。但是,在Java中,默认情况下方法是虚拟的。虚方法保证将调用对象的最终重载方法,该方法由运行时确定。在调用或编写任何虚拟方法时,您始终必须牢记这一点!如果该方法声明为非虚拟方法,则调用的方法将由编译器确定。这是Java和.NET平台的设计者之间的主要哲学差异。
  • Java 1.5的泛型使用类型擦除。当Java源代码编译为字节码时,有关泛型类型的信息将会丢失。.NET 2.0的泛型在编译后得以保留,因为从.NET公共语言运行时2.0版(简称CLR)开始,对泛型的支持。Java的方法允许Java 1.5二进制文件在1.4 JRE中运行,但要付出额外的运行时类型检查的代价。
  • C#是由ECMA和ISO标准定义的,而Java是专有的,尽管在很大程度上是通过开放社区流程进行控制的。
  • C#API完全由Microsoft控制,而Java API通过开放的社区流程进行管理。
  • .NET运行时允许托管和非托管代码,从而实现Java的纯托管代码环境中不存在的某些类型的错误,但也可以与现有代码进行交互。

问题:java在默认中,所有方法都是虚方法,这意味着什么?

答:这意味着,java中的所有对象,基本上都有了动态代理的潜在可能

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容