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

2023-10-27 18:00

本文主要是介绍BATJ面试官花样分析,C#和Java之间的主要区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

本文主要为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中的所有对象,基本上都有了动态代理的潜在可能

这篇关于BATJ面试官花样分析,C#和Java之间的主要区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/287397

相关文章

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

java导出pdf文件的详细实现方法

《java导出pdf文件的详细实现方法》:本文主要介绍java导出pdf文件的详细实现方法,包括制作模板、获取中文字体文件、实现后端服务以及前端发起请求并生成下载链接,需要的朋友可以参考下... 目录使用注意点包含内容1、制作pdf模板2、获取pdf导出中文需要的文件3、实现4、前端发起请求并生成下载链接使

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景