C#与Java基础语法初比较

news/2024/7/1 14:12:30

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本人2010年毕业,毕业一直做C#语言的开发工作,主要从事桌面应用系统方面的开发,所以学习了一年多的C#语言,最近正在拓展自己的语言,学习Java语言,主要是以张孝祥老师的学习视频加上JDK文档为学习资料。下面对学习了3天进行一个经验总结吧,希望各位大侠多多提观点,以后还会将学习中的经验进行更新分享。废话不多说了,主要区别有以下几点:

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取代。

转载于:https://my.oschina.net/violetmoon/blog/82106


http://www.niftyadmin.cn/n/2502371.html

相关文章

(Android实战)ProgressDialog+Thread实现弹出进度条数据异步加载(配有效果图)

1 效果图 2 实现说明 实现流程 Step One 弹出进度条对话框 Step Two 执行线程,在线程中实现数据的异步加载 Step Three 在线程数据加载完成后,调用Handler并集合数据,更新界面 3源码 //添加异步操作 m_DialogProgressDialog.sh…

NHibernate一对多映射保存数据

Iesi.Collections.Generic.Iset<T>使用Iset集合中&#xff0c;每个对象唯一。 在NHibernate中&#xff0c;在父类中对应子类的Iset集合时&#xff0c;因为Set类为抽象类&#xff0c;所以不能实例化Set类。 Iset<T> listnew Set<T>()将报‘无法创建抽象类或接…

2012.09月面试五十题

转自&#xff1a;http://blog.csdn.net/v_july_v/article/details/7974418 九月十月百度人搜&#xff0c;阿里巴巴&#xff0c;腾讯华为小米搜狗笔试面试五十题 &#xff08;欢迎加入十月面试题集训组&#xff0c;参与讨论&解题&#xff1a;193308452&#xff09;引言 自发…

Linux Wake-On-Lan(wol)

Wake-On-Lan 網路開機介紹 網路開機顧 名思義就是透過 Ethernet 進行開機動作&#xff0c;這需要硬體與BIOS的支援&#xff0c;目前市面上的主機板所內建的網路卡都能支援。假設您的網路介面不是採用主機板內建晶片&#xff0c;而是採用傳統的網路 卡&#xff0c;那麼通常需要透…

使用Javascript写一组图片的缓冲运动

一、先来了解一下为什么要学习运动框架呢 在我们web开发中过程中&#xff0c;一些特效的使用&#xff0c;比如&#xff1a;导航条中滑动的动画特效、点击加入购物车按钮有抛物线的特效&#xff0c;还有一些小游戏的开发等&#xff0c;就需要我们对动画的基础运动掌握的足够扎实…

认识cookie会话跟踪技术

一、cookie的概念 在一次会话从开始到结束的整个过程&#xff0c;全程跟踪记录客户端的状态&#xff08;例如&#xff1a;是否登录、购物车信息、是否已下载、是否已点击、视频播放进度等&#xff09; 二、cookie的组成 cookie由名/值对形式的文本组成&#xff1a;namevalue 完…

java线程安全理解

如果你的代码所在的进程中有多个线程在同时运行&#xff0c;而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的&#xff0c;而且其他的变量的值也和预期的是一样的&#xff0c;就是线程安全的。比如一个 ArrayList 类&#xff0c;在添加一个元素的…

cookie的封装及应用

最原始代码 var person {name: "小明",age: 18,sex: 男}//直接把整个对象当做参数传入function showSelf(obj){alert("我叫" obj.name , 今年 obj.age "岁,是" obj.sex "的");}// showSelf(person);showSelf({name: "小明…