2019独角兽企业重金招聘Python工程师标准>>>
本人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取代。