Java&C#语法差别
|
Java |
C# |
|
|
主类名与文件名 |
必须一致 |
可以不一致 |
|
命名空间导入方式 |
import关键字 |
using关键字 |
|
常量 |
final关键字 |
Const关键字 |
|
基本数据类型 |
C#中有无符号数,Java没有。 C#中有值类型,且可自己定义值类型的结构体(struct)。 C#中int等同于System.Int32,是值类型;bool等同于System.Boolean;等。 Java中的int与Integer的对应在C#中类似int和Nullable<int>的对应,它们的后者都是前者的包装,且后者可以等于null。但Nullable<int>实际上仍然是值类型的(所以仍然很轻量级),所以从内存上讲C#中int和Object的对应更接近Java的对应一些。C#中Nullable<int>到int的转换必须显式进行,因为Nullable<int>中的值为null时会引发运行时异常。 注: 可以为 null 的类型是 System.Nullable<T> 结构的实例。 可以为 null 的类型可以表示其基础值类型正常范围内的值,再加上一个 |
|
|
初始化 |
调用基类构造函数: SubClass(){ super(); } |
调用基类构造函数: SubClass():base(){} 或者代码中使用base(); |
|
Switch语句 |
(1)只能处理int类型或者字符型 (2)每个case块后写break语句,不然会有穿透问题。 注:无Goto语句。 |
(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:默认 Private: |
Public公有访问。不受任何限制。 Private私有访问。只限于本类成员访问,子类,实例都不能访问 Protected保护访问。只限于本类和子类访问,实例不能访问。 Internal内部访问。只限于本项目内访问,其他不能访问。 protected internal内部保护访问。只限于本项目或是子类访问,其他不能访问 |
|
内部类 |
内部类可以直接访问外部类的实例成员 |
C#的内部类不可以直接访问外部类的实例成员;C#的内部类等同于java的静态内部类 |
|
最终类 |
final关键字定义的类不能再被派生 |
Seale关键字定义的类不能再被派生 |
|
接口 |
(1)关键字:interface; (2)接口内允许有内部类、静态字段等; |
(1)关键字:interface; (2)接口内不允许有内部类、静态字段等; |
|
内存管理 |
由运行时环境管理,使用垃圾收集器 |
由运行时环境管理,使用垃圾收集器 |
|
指针 |
完全不支持。代之以引用 |
支持,你只在很少使用的非安全模式下才支持。通常以引用取代指针 |
|
泛型 |
Java中泛型实现使用的擦除机制,为类型参数传入类型并不导致新类型出现,即传入了类型参数后在运行时仍然完全不知道类型参数的具体类型,它的目的是为了兼容非泛型(所以可以在泛型和非泛型之间隐式转换,会有编译警告但不会有编译错误,这当然其实并不安全);这同时衍生了一系列问题:不能定义泛型类型参数的数组如T[],不能通过new T()的方式实例化泛型,等。 |
C#的泛型在类型参数传入类型后会产生一个新类型(虽然CLR的优化机制会使引用类型共享同样的代码),可以在运行时得到类型参数的类型信息。可以定义泛型数组,可以添加约束使其可以new。C#的泛型可以使用值类型(不会被装箱)。 |
|
参数引用传递 |
只有值传递 |
使用关键字ref:迫使值参数通过引用传递给方法; 使用关键字out:在参数未初始化的情况下,在一个函数中输出多个值; 使用关键字params:自动把参数转为数组; |
|
Ref: 当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。 Out: out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。 |
||
Java&C#语法差别的更多相关文章
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- Java 学习笔记(1)——java基础语法
最近抽时间在学习Java,目前有了一点心得,在此记录下来. 由于我自己之前学过C/C++,而Java的语法与C/C++基本类似,所以这一系列文章我并不想从基础一点点的写,我想根据我已有的C/C++经验 ...
- JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)
Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中.用户能够通过指定数据类型和标识符来声明变量.其基本的语法为: DataType identifier; 或 Dat ...
- 【转】详解Java正则表达式语法
(转自: http://www.jb51.net/article/76354.htm) 这篇文章主要介绍了Java正则表达式语法,包括常用正则表达式.匹配验证-验证Email是否正确以及字符串中查询字 ...
- C++与Java的语法区别
C++与Java的语法区别 首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别. main 函数C++//自由浮动的函数int main( int argc, char* argv[]) ...
- Atitti.java exp ast java表达式语法ast构造器
Atitti.java exp ast java表达式语法ast构造器 /atiplat_cms/src/com/attilax/lang/AstParser.java 原理 分割tokens_sli ...
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- JAVA正则表达式语法大全
[正则表达式]文本框输入内容控制 整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n ...
- java基础语法笔记
这段时间看了一些java,急了一些笔记,记下一遍以后复习用! 2016-07-24 15:12:40 java很多语法都跟C#类似,下面列举一些不同的地方******注意***** java中的系统方 ...
随机推荐
- JAVAssist字节码操作
Java动态性的两种常见实现方式 字节码操作 反射 运行时操作字节码可以让我们实现如下功能: 动态生成新的类 动态改变某个类的结构(添加/删除/修改 新的属性/方法) 优势: 比反射开销小,性能高 ...
- 在Win10下搭建web服务器,使用本机IP不能访问,但是使用localhos或127.0.0.1可以正常访问的解决办法
最近在在Win10下搭建web服务器,发现通过windows自带的浏览器win10 edge浏览器使用本机IP不能放问,但是使用localhos或127.0.0.1可以正常访问, 后来无意发现,使用w ...
- 《编写可维护的javascript》读书笔记(上)
最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...
- Oracle中append与Nologging
快速向表中插入大量数据Oracle中append与Nologging 2017-05-05 / VIEWS: 304 来源于:http://blog.sina.com.cn/s/blog_61cd89 ...
- ArduinoYun教程之通过网络为Arduino Yun编程
ArduinoYun教程之通过网络为Arduino Yun编程 Arduino Yun的软件部分 通过第一章的介绍后读者就明白了Arduino Yun除了是一个类似其他Arduino的单片机之外,它的 ...
- Web大前端面试题-Day4
1. 如何实现瀑布流? 瀑布流布局的原理:1) 瀑布流布局要求要进行布置的元素等宽, 然后计算元素的宽度, 与浏览器宽度之比,得到需要布置的列数;2) 创建一个数组,长度为列数, 里面的值 ...
- MySQL Replication(Master与Slave基本原理及配置)
MySQL Replication(Master与Slave基本原理及配置) 1. 主从mysql server的工作原理:(如图及其过程分析) 过程: Mysql的复制(replication ...
- Codeforces Round #371 (Div. 2) A. Meeting of Old Friends 水题
A. Meeting of Old Friends 题目连接: http://codeforces.com/contest/714/problem/A Description Today an out ...
- SlickMaster.NET 开源表单设计器快速使用指南
前言:在企业数据处理过程中,经常需要通过定制表单来输入业务数据.由于涉及的数据比较离散,并不同于ERP系统的紧密关联数据.假如由开发人员每个增加页面,工作量会比较大,后期后期的维护很升级也耗费时间和精 ...
- 高性能server分析 - Hadoop的RpcServer
一.Listener Listener线程,当Server处于运行状态时,其负责监听来自客户端的连接,并使用Select模式处理Accept事件. 同时,它开启了一个空闲连接(Idle Connect ...