java与C#的简单比较

时间:2022-09-02 10:01:29

刚刚看完java视频,做了个简单图:

java与C#的简单比较

新知识不多,大多是与以往知识的相互碰撞,一下做了java与C#的简单比较:

                       

Java

C#

主类名与文件名

必须一致

可以不一致

命名空间导入方式

import关键字

using关键字

常量

final关键字

Const关键字

基本数据类型

C#中有无符号数,Java没有。

C#中有值类型,且可自己定义值类型的结构体(struct)。
Java中的基本类型(或叫基元类型)即为值类型,但Java没有结构体,所以不能自定义值类型。
C#中的值类型(包括所有基本类型)间接继承自Object,有自己的方法可以调用;Java中的值类型(即基本类型)不继承自Object,只是简单的数据,没有方法可以调用。

C#中int等同于System.Int32,是值类型;bool等同于System.Boolean;等。
Java中int是基本类型,是值类型,而Integer是引用类型,Integer是int的包装器,int自身没有方法,Integer有一些方法;int与Integer之间可隐式转换(导致装箱和拆箱),但当Integer值为null的时候会在运行时抛出异常。boolean等类似。

Java中的int与Integer的对应在C#中类似int和Nullable<int>的对应,它们的后者都是前者的包装,且后者可以等于null。但Nullable<int>实际上仍然是值类型的(所以仍然很轻量级),所以从内存上讲C#中int和Object的对应更接近Java的对应一些。C#中Nullable<int>到int的转换必须显式进行,因为Nullable<int>中的值为null时会引发运行时异常。
其他基本类型与之类似。

初始化

调用基类构造函数:

SubClass():base(){}

调用基类构造函数:

SubClass(){

super();

}

Switch语句

(1)只能处理int类型

(2)每个case块后写break语句,不然会有穿透问题

(1)还可以处理字符变量

(2)要求每一个case块或者在块的末尾提供一个break语句,或者用goto转到switch内的其他case标签。

声明数组

灵活。

Int[] x={1,2,3};//正确

Int x[]={1,2,3};//正确

Int[] x={1,2,3};//正确

Int x[]={1,2,3};//错误

面向对象

完全面向对象

相同

继承

类的单继承;

可以实现多个接口;

相同

多态

支持某些形式的多态性机制

相同

重写

默认方法都可被重写,派生类和子类方法签名一样时被认为是重写。要声明不能被重写的方法需在方法前加final关键字。重写时可以在方法前添加标注(即C#中的定制特性)@Override,这样一旦此方法找不到被重写的方法时编译器会报错,以防止拼写错误。

被重写的方法必须添加virtual关键字声明为虚方法,派生类重写子类方法时添加override关键字。

访问修饰符

4类

Public:成员可以从任何代码访问;

Protected:成员只能从派生类访问;

Default:

内部类

内部类可以直接访问外部类的实例成员

C#的内部类不可以直接访问外部类的实例成员;C#的内部类等同于java的静态内部类

最终类

final关键字定义的类不能再被派生

Seale关键字定义的类不能再被派生

接口

(1)关键字:interface;

(2)接口内允许有内部类、静态字段等;

(1)关键字:interface;

(2)接口内不允许有内部类、静态字段等;

内存管理

由运行时环境管理,使用垃圾收集器

由运行时环境管理,使用垃圾收集器

指针

支持,你只在很少使用的非安全模式下才支持。通常以引用取代指针

完全不支持。代之以引用

泛型

Java中泛型实现使用的擦除机制,为类型参数传入类型并不导致新类型出现,即传入了类型参数后在运行时仍然完全不知道类型参数的具体类型,它的目的是为了兼容非泛型(所以可以在泛型和非泛型之间隐式转换,会有编译警告但不会有编译错误,这当然其实并不安全);这同时衍生了一系列问题:不能定义泛型类型参数的数组如T[],不能通过new T()的方式实例化泛型,等。
Java的泛型不支持值类型(使用的话会被自动包装成引用类型)。

C#的泛型在类型参数传入类型后会产生一个新类型(虽然CLR的优化机制会使引用类型共享同样的代码),可以在运行时得到类型参数的类型信息。可以定义泛型数组,可以添加约束使其可以new。C#的泛型可以使用值类型(不会被装箱)。

参数引用传递

只有值传递

使用关键字ref:迫使值参数通过引用传递给方法;

使用关键字out: 在参数未初始化的情况下,在一个函数中输出多个值;

使用关键字params:自动把参数转为数组;

 

总结:所有高级语言之间都是相通的,只是一些简单语法上的不同、专业术语不同、再加上某些部分运行机制不同,其实也没有什么。做好比较,减少学习知识量,轻松学习。

java与C#的简单比较的更多相关文章

  1. 计算机网络&lpar;13&rpar;-----java nio手动实现简单的http服务器

    java nio手动实现简单的http服务器  需求分析 最近在学习HTTP协议,还是希望动手去做一做,所以就自己实现了一个http服务器,主要功能是将http请求封装httpRequest,通过解析 ...

  2. 模拟java&period;util&period;Collection一些简单的用法

    /* 需求:模拟java.util.Collection一些简单的用法! 注意:java虚拟机中并没有泛型类型的对象.泛型是通过编译器执行一个被称为类型擦除的前段转换来实现的. 1)用泛型的原生类型替 ...

  3. Rsession让Java调用R更简单

    Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...

  4. 多线程&lpar;三&rpar; java中线程的简单使用

    java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...

  5. Java数据结构和算法 - 简单排序

    Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...

  6. JAVA课程设计——一个简单的教务人事管理系统

    大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...

  7. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  8. 使用JAVA实现的一个简单IOC注入实例

    https://blog.csdn.net/echoshinian100/article/details/77977823 欲登高而望远,勿筑台于流沙 RSS订阅 原 使用JAVA实现的一个简单IOC ...

  9. Java通过JDBC进行简单的增删改查(以MySQL为例)

    Java通过JDBC进行简单的增删改查(以MySQL为例) 目录: 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JD ...

随机推荐

  1. 网页制作中在头部固定悬浮table表头&lpar;thead&rpar;的方法

    这两天接了一个需求,页面是这样的 然后需求是页面中的这个表格当页面向上滚动,且表格的表头到达窗口上方时,表头悬浮在页面的上方,表格正常滚动,这样表格内的数据可以随时看到表头内容. 一开始我认为这是极简 ...

  2. Centos6 yum安装openldap&plus;phpldapadmin&plus;TLS&plus;双主配置

    原文地址:http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%8 ...

  3. 创建ASP&period;NET Core MVC应用程序&lpar;4&rpar;-添加CRUD动作方法和视图

    创建ASP.NET Core MVC应用程序(4)-添加CRUD动作方法和视图 创建CRUD动作方法及视图 参照VS自带的基架(Scaffold)系统-MVC Controller with view ...

  4. 图片拉伸iOS

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight: (NSInteger)topCa ...

  5. 网站开发进阶&lpar;三十一&rpar;js如何将html表格导出为excel文件&lpar;后记&rpar;

    js如何将html表格导出为excel文件(后记) 前言 项目前期做了个导出Excel表格的功能,但是经过测试发现只有在IE上才可以正确实现,在Chrome等浏览器中无法实现导出效果.经过上网搜索,尝 ...

  6. Vue &lpar;三&rpar; --- Vue 组件开发

    ------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...

  7. VSS2005源代码管理启用http方式

    一直在使用vss管理源代码,在服务器上使用文件共享当方式.最近安全形式升级,禁止使用文件共享,因此要升级到http方式. 按照网上的教程,一路前行. 1.登录服务器桌面,打开vss administr ...

  8. 个人博客作业&lowbar;week14

    M1/M2阶段总结 我在M1阶段负责后端代码的开发,以及协助PM,在M2阶段负责PM,在为期将近一学期的团队软件开发过程中,我深刻体会到了团队协作的重要性,以及合理分配任务的重要性,没有一个好的时间规 ...

  9. 如何使用 Flexbox 和 CSS Grid,实现高效布局

    CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想.幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来 ...

  10. 关于ARM指令那些你必须知道的东西

    1.32位ARM指令每一位都有其作用,具体如下: 低12为第二操作数, 12~15位为目的寄存器, 16~19位为第一操作数, 20~27就是操作码, 28~31就是条件域. 2.多寄存器load和s ...