java与c#的语法对比

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java与c#的语法对⽐
1,命名空间与包
C#为了把实现相似功能的类组织在⼀起,引⼊了命名空间的概念(namespace)
Java中与此对应的东西叫做包(package)
2,类的访问控制⽅⾯的不同
C#只有两种:public和默认(同internal)
public能被所有的类(同项⽬中和不同项⽬中)访问
internal(在class关键字前不加控制符时默认为internal),表明类只能在同⼀项⽬中访问
Java也只有两种:public和默认
public能被所有的类访问
默认(在class关键字前不加控制符时)只能被同⼀包中的所有类访问
3,类成员的访问控制
C#中有四种:public,protected,private(默认),internal(注意这⾥internal和默认是不同的)
public能被所有的类访问
protected只能被⼦类访问
private(也即不写任何控制符时的默认情况下)只能类内部访问
internal能被同⼀项⽬中的类访问
Java也有四种:public,protected,private和默认
public能被所有的类访问
protected既能被同⼀个中的其他类访问,也可以被不同包中的⼦类访问
private只能在类内部使⽤
默认可以被这个包中的其他类访问,如果⼀个⼦类与⽗类位于不同的包中,⼦类也不能访问⽗类中的默认访问控制成员
4,C#中类的继承⽤通过冒号:实现,在Java中⽤extends
C#中实现接⼝通过冒号:实现,在Java中⽤implements
C#中密封类⽤sealed实现,在Java中⽤final
C#中常数⽤const实现,在Java中⽤final
C#中属性⽤set,get代码块实现,在Java中⼀般⽤类似于C#中的字段代表属性,或者⽤setter,getter构造器实现
C#中有部分类(partial)的概念,Java中没有
C#中有readonly修饰属性只读,Java中没有
C#中有virtual和override修饰虚⽅法和重写⽅法,Java中没有,Java中默认⽗类中的⽅法都是virtual的
Java中有static{},synchroized{}代码块的概念,C#中没有
Java中有标签(如labelA:)的概念,C#中没有
C#中⼦类调⽤⽗类的⽅法⽤base.method(),Java中⽤super.method()
C#中⽤is来判断⼀个实例是否是某⼀个类的,Java中⽤instanceof
C#中⽤foreach(int i in array)来对数组中每⼀个元素的遍历,Java中⽤for(int i : array)
~~~~~~~~~~~~~~~~~~~~~
1. C#命令输⼊和输出语法是:Console.ReadLine()和Console.WriteLine()(当然不换⾏的话就去掉Line,这些想必⼤家都知道,所以⽂章中只提供⽐较常⽤的)。

Java命令输⼊和输出语法是:System.In.Read()和System.Out.Println()
⼼得:其实两个语⾔语法本质都⼀样就是名字不⼀样。

2. C#中在⼀个.cs⽂件中可以存在多个Public修饰符修饰的类。

Java中在⼀个.java⽂件中有且仅能存在⼀个Public修饰符修饰的类。

⼼得:⽬前还不知道为啥java会有这样的限制,不过这⼀点很容易范错误。

3. C#中Switch语句接受的类型是byte、char、string.
Java中Switch语句接受类型是byte、char、string、int
⼼得:java语⾔貌似⽀持的多⼀点。

4. C#中存在属性与字段是两个概念,属性是属性访问器,是对字段的封装。

Java中貌似没有属性访问器,属性和字段是⼀个概念,通过⾃⼰实现⽅法来封装属性的访问,⼀般是getxxx()和setXXX()⽅法
⼼得:这点我还是⽐较赞同C#的做法,毕竟从编程的⾓度来说,C#将属性作为语法通⽤的,不需要⽤户⼿动去实现,省去了⼤量的重复编码。

5. C#中构造函数调⽤基类或者当前重载构造函数语法是直接在构造函数后⾯:base()和:this()就可以实现。

Java中相同原理语法是在构造函数模块中的第⼀条语句使⽤this()或者super()。

⼼得:这个我个⼈觉得c#设计的⽐较好,因为从程序的可读性⽅⾯,这样也容易使得读者容易读懂代码,对于程序员来说也容易区分,⽐较容易知道运⾏顺序;⽽Java的实现⽅式必须使得使⽤者记住在第⼀条语句,有的时候在编写⼀个⼤的程序的时候,很有可能会忽略这个。

6. C#中存在静态构造函数,即在类运⾏时,只执⾏⼀次。

Java中是不存在静态构造函数的。

⼼得:这点我也不知道为啥Java中不存在,不过在⽹上查了下,有⽹友说是因为这违背了⾯向对象的思想,后⾯也跟了⼀⼤堆理由,不过我总看都觉得该⽹友没有很好理解⾯向对象思想。

这个问题我觉得也值得深⼊研究,有兴趣的可以跟我⼀起研究下,⾄于C#中出现这个,我也没仔细深⼊研究为什么会出现这个情况,我只知道有的时候在类构造的时候,有些参数是执⾏⼀次的,但是细想这些也可以通过其他⽅法实现,所以暂时也说不出C#中静态构造函数的优点,不过竟然微软定义了该语法,⽽且是在3.5定
义的我相信必有它的⽤处。

7. C#中继承接⼝和抽象类都是使⽤:符号的。

Java中继承⽤Extends标识符,实现⽤Implements,且如果同时存在,Extends必须在Implements之前。

⼼得:C#相对来说是⽐较⾃由,直接⽤:就实现继承和实现。

可是Java中区别⽐较明确,这点我觉得还是java⽐较好,这样写的代码⽐较直观,可读性⽐较好,虽然写的字数多。

8. C#中⽤Sealed修饰符表⽰密封,即不可继承,⽤Const表⽰常量。

Java中使⽤Final修饰符表⽰密封和常量。

⼼得:Java中⽤⼀个修饰符代表2个功能,从设计⾓度说,不怎么符合功能单⼀原则,所以我个⼈觉得必要的时候还是拆分表⽰,可读性和区别性会好点。

9. C#的Is运算符可以⽤于类型的判别。

Java中⽤Instanceof进⾏类型的判别。

10. C#中存在Internal修饰符,表⽰程序集的访问级别。

Java中存在类似的修饰符Default,表⽰同⼀类和同⼀包中的访问级别。

⼼得:C#中访问修饰符⼤概有以下⼏种:
Public:公共的,最⼤的访问权限。

Internal:程序集的,命名空间级别的访问权限。

Protected:受保护的,类以及⼦类的访问级别权限。

Private:私有的,只能在该类中访问级别权限。

Java访问修饰符有以下⼏种:
Public:公共的,最⼤访问级别。

Protected:受保护的,同⼀类,同⼀包中的类和⼦类访问级别。

Defalut:同⼀类,同⼀包中的类访问级别。

Private:私有的,同⼀类中访问级别。

纵观,其实都差不多,但是平时必须注意,细节决定成败。

11. C#中异常直接⽤Throw抛出。

Java中如果要抛出异常,貌似必须现在⽅法或者类定义后⾯⽤Throws进⾏声明。

⼼得:这点也没深⼊研究,所以不发表观点。

12. C#中有命名空间,⽤Using关键字引⼊。

Java中有包,类似命名空间定义,⽤Import引⼊包。

13. C#中同步锁定,⽤Lock关键字。

Java中同步锁定,⽤Synchronized关键字。

14. C#基本数据类型中有string,且有包装类String。

Java基本数据类型是没有string,⽤String取代。

ng: 这个包下包含了Java语⾔的核⼼类,如String、Math、Sytem和Thread类等,使⽤这个包⽆需使⽤import语句导⼊,系统会⾃动导⼊这个包中的所有类。

java.util: 这个包下包含java的⼤量⼯具类/接⼝和集合框架类/接⼝。

如Arrays和List、Set等。

: 这个包下包含了⼀些Java⽹络编程相关的类/接⼝。

java.io: 这个包含了⼀些Java输⼊/输出编程相关的类/接⼝。

java.text: 这个包下包含⼀些Java格式化相关的类。

java.sql: 这个包下包含了java进⾏JDBC数据库编程的相关类/接⼝。

java.awt: 这个包下包含了抽象窗⼝⼯具集(Abstract Window Toolkits) 的相关类/接⼝,这些类主要⽤于构建图形⽤户界⾯(GUI)程序。

java.swing:这个包下包含了Swing图形⽤户界⾯编程的相关类/接⼝,这些可⽤于构建平台⽆关的GUI程序。

相关文档
最新文档