返回爱好者网站首页
 
商城 博墅 论坛
首 页 | 学 院 | 数 码 | 硬 件 | 装机DIY | 台式机 | 办 公 | 数字家电 | 视频教程 | Flash小游戏 | 桌面壁纸 | 精彩专题 | 活动
  数码数码相机 手机 MP3/MP4 笔记本 GPS 硬件CPU 主板 存储 音频 显示器 显卡 投影机 机箱/电源 外设 术语 学院资讯 系统 软件 安全 网络 办公 设计 程序 问答
装机DIY家用 网吧 办公 娱乐 2000元 4000元 6000元 8000元 DIY技巧 答疑 台式机入门 家用 办公 娱乐 购买技巧 答疑 办公打印机 多功能一体机
寻找校园达人,挑战超级社团。PCW校园IT普及风暴,万元现金大奖等你来拿。
学院首页 | 新闻资讯 | 操作系统 | 软件应用 | 创意设计 | 程序开发 | 办公技巧 | 网络应用 | 个人安全 | 素材推荐 | 故障问答
CFan新视界 | 软件专区 | Vista专区 | XP专区 | 站长专区 | 专栏作者 | 精彩专题
当前位置: 首页 学院 程序 JAVA

Java和C#的比较


2008-05-09 作者: 来源:conanpaul
·JAVA程序编写的打字游戏
·java泛型编程
·用Spring中的AOP做权限管理
·Java仿关机效果
·java用MD5加密
·JAVA数据控制
·用Java实现断点续传
·Java的内部类和匿名类
·Java小程序网页上的照片添加
·在 Java中访问 USB 设备
·Java 数据库应用系统的实现
   Java 和 C#的比较

2007年11月1日
1。访问控制方面:C#有public、internal、protected、private,比java多了个internal,其实它跟java的包访问差不多,internal表示同一个编译集合(如exe、dll)下的类可以互访。
对于protected,java和C#有区别。在java中,protected和包访问级别差不多,即不是私有的。而在C#中,protected和private差不多,即它标志的成员是私有的。
有这样一种情况:类中的一个成员,需要它能被子类访问到,同时能被同一个集合中(无论是java的包还是C#中的编译集合)的其他类访问到,怎么办呢?在java中,只要用protected就行了。在C#中,可以同时指定internal protected(二者的顺序随意)。
在有这样一种情况:类中的一个成员,需要它能被子类访问到,但不能被同一个集合中(无论是java的包还是C#中的编译集合)的其他类访问到,怎么办呢?在C#中,可以指定protected(二者的顺序随意)。但java就无能为力了。
2。C#中有static constructor的概念,这跟java中的静态初始模块一样。
C# : static [类名]{}
java :static{}
3。Java中的main函数必须是public static void main(String[] args)的样子,否则虚拟机拒绝运行。C#中,Main函数可以是private的(甚至可以是protected),可以没有参数,可以返回int值。有点像C语言。
4。发现csc.exe有一个功能很好,100后面加一个小写的L,它会警告:“l”后缀容易与数字“1”混淆;为清楚起见,请使用“L”。
5.C#提供了一种机制,使得某个变量可以被动态赋值一次,以后就不能再改了。那就是readonly关键字的功能。
6.java在继承、多态方面,比C#强多了。Java默认的多态,C#要求加上virtual(被继承的方法)和override(继承的方法),而且C#要求不能改变原来的访问修饰符,不像java那样,可以指定更加宽松的访问方式。如果有人利用C#来写程序,必须经常带上virtual和override,还必须照抄原来的访问控制符,不会很郁闷吗?难道有人用C#的面向对象特性时,会舍弃多态的特性?这会引起多大的混乱啊。
多态是面向对象的精髓,像java那样默认不是更好吗?
7. C#中new还可以用来指定子类的某个方法要隐藏父类的具有相同签名的方法。这是不是多余的?你不用也可以,不过csc.exe会警告你,如“lan.Other.Main(string[])”隐藏了继承的成员“lan.HelloWorld.Main(string[])”。如果是有意隐藏,请使用关键字 new。
像java那样默认多好啊。
但是话又说回来,C#这样做也是有原因的。如果类B继承了类A,B接下来有添加了一个方法叫做hi(),那是B特有的。然后类A(假设是别人来维护的,你不能看到源码)突然也增加了一个方法hi()。如果B自己那个hi()跟A那个hi()的返回值不一样,当你更新类库A后,可能导致程序运行错误或不能编译。C#就很好就地避免了这种问题。(虽然这种问题出现的概率挺小的…)
8.C#中,防止一个类被继承,要用关键字sealed。而定义一个常量时,要用const。
像java统一用final多好啊。
9.在C#中,要比较两个引用变量是否指向同一个对象,不能用java中的= =,而要用Object里的ReferenceEquals方法。C#中,不能用一个类的实例去调用该类的类方法,必须用类名。所以java中的o1= =o2等价于C#中的Object.ReferenceEquals(o1,o2)。
10.C#中没有原始类型的包装类,但是也提供自动装拆箱的功能,和java有的一样。区别是,C#的装箱是自动的,拆箱就要强制转换了。
int i=100;
object obj=i;
i=(int)obj;
具体怎么装和拆,我们不知道。只知道CLR将int转换成object了。
11.java的内部类有时候帮助很大。到了C#那,就只提供静态的内部类了。这意味着外部类只相当于是一个命名空间而已。C#中的内部类能访问外部类的私有成员,这可能会让它有点用。
12.C#中虽然有运算符重载,但是为了整个.net的一致性,应该不会鼓励使用。因为有的.net语言没有运算符重载,而.net的一个目标就是消除各种语言的差别。
13.C#多了一个struct值类型,它就跟原始类型一样。微软在必要的时候会帮你将struct封装成Object,就像封装int类型一样。以至于你可以认为struct也是由Object继承而来,虽然struct本身并不支持继承。(struct可以不用new来初始化,但它里面的内容必须初始化后才能调用其方法;struct没有析构方法;struct没有默认的构造方法)。

2007年11月2日
1.java中类的访问控制符只能是public,或者没有(即默认的包访问)。但是C#中,class和interface的访问控制符可以是public / private / internal / protected / internal protected。当然你必须先取得对类的访问,才可能访问到类的成员。
一个C#集合中可以包含多个public的类或接口,跟文件名没有关系。
2.C#中的接口不能包含常量,而java可以。
3.C#中的as和java中的instanceof功能一样。但C#提供一个据说是效率更高的as关键字。
4.接口和抽象类在C#和java中都差不多,这里提一下接口设计和抽象类设计的区别之处。如果你更改了一个接口的设计,比如增加了一个方法,使用你以前的代码的用户将不得不改变他们的代码,否则不能运行和编译。但是如果是一个抽象类,你可以提供一个含默认实现的方法,用户的代码则不需要改变。
5.C#中一个类实现一个接口时,它的相关方法不必指明override;但一个类继承一个抽象类的抽象方法时,必须加上override,否则视为隐藏。(事实上,只有抽象方法或者是virtual、或者是接口方法才能被覆盖即override。不能无缘无故地override。)
6。C#中存在一个“多态起始点”的问题。如果一个类实现了接口的某个方法,只是接口到该类才有多态的功能,若要这种多态继承下去,该类必须指明是virtual,多态起始了,接下来的子类提供override就能多态了,不需要更多的virtual。
但是抽象类的抽象方法默认就是一个多态起始点,后续的子类只要override就行了。
7.当一个类实现了两个接口,两个接口有一个相同的方法定义,C#有一种解决机制,叫做显示实现。Java干脆就不处理这种情况,反正实现之后就能调用了,不必指明是哪个接口的,留给程序员自己考虑。
当然C#中的显示实现还有其他功能。举个例子,接口A有一个方法叫做f(),类B实现了A。按理说B的实例就能自由调用f()了,但是如果有这样的要求:B的实例只有被cast成A之后才能调用f()。在java中,这样无理的要求是不允许的。但是C#可以做到,就是通过显示实现的方式。有谁会使用这样的特性?
JAVA程序编写的打字游
· 用Spring中的AOP做权
· JAVA数据控制
· JSP验证码代码
· JAVA中配置环境变量
· 图解JBuilderX安装与
用Java实现文件分割与
· 在JSP中如何实现MD5
· java泛型编程
· Java FTP客户端库
· Java 数据库应用系统
· java中文件操作
桌面壁纸

恶作剧之吻剧情壁纸

天上人间梦幻壁纸

欢乐君主游戏壁纸

功夫世界游戏壁纸
· 金泰熙性感桌面壁纸
· 下雪的天空壁纸
· 惠普蓝色主题壁纸
· 恶作剧之吻剧情壁纸
· 唯美风景冬天·雪
· 圣诞节插画设计
· 天上人间梦幻壁纸
· 欢乐君主游戏壁纸
· 功夫世界游戏壁纸
站外资源推荐
无标题文档
绝色空姐汇聚的航线
评论
评论排行
初学者入门J2EE ---建议的学习路线
Java咖啡馆2:第一杯咖啡
Java反编译的研究
Java 中少为人知的小点子
真正的Java学习从入门到精通
Java 程序初始化过程详解
Java咖啡馆13:终结者
如何迅速成为Java高手
java抽取word,pdf的四种武器
RSA算法的实现方法——Java版放送

笔名

匿名发表

验证码:

查看评论
* 评论只代表网友个人观点,与电脑爱好者网站无关,不代表电脑爱好者网站也同意此观点。
 
电脑必备软件
 
无标题文档
· 迅雷下载及应用专区
· 快车(FlashGet)专区
· 新一代下载工具脱兔专区
· 木马清除大师专区
· 微软最新操作系统vista
· 微软Windows XP专区
· PPStream免费网络电视
· 豪杰超级解霸
· 最好用的论坛程序discuz!
· 智能陈桥,拼音五笔样样行
· 卡巴斯基专区
· 风行网络电影专区
  欢迎各软件厂商加入,联系邮箱邮箱:lkjiang@cfan.com.cn,联系电话:010-68130909转6623
频道推荐
 
· 全套人民币样版(49年至今)
· 让你过目难忘的天才广告
· Ubuntu 8.04桌面版安装教程(图文
· 台湾2008性感名模梦幻月历
· SP3到底快不快?XP SP3性能详尽评测

· 可能你一辈子都看不到的奇特景观
· 刘亦菲 落入凡间的天使
· 为了安全高速 装完XP系统必做六件
· 天下无毒之一─明确概念 迅雷安全
· Flash播放器下载页面
最新更新
 
· JAVA如何调用DOS命令
· JAVA写的MP3标签读写器
· JDK5增强for循环的使用
· JAVA字符编码的探索与理解
· 用Java编程实现“网络蜘蛛
· Java开发者的十戒律
· J2EE WEB应用架构分析
· 我的APPFUSE开发问题记录
· Tapestry组件使用总结
· JSP验证码代码
免费在线小游戏
 

痛打日本狗

魔兽争霸格斗体验版

丹麦最新IQ测试

· 免费在线泡泡堂
· 你能逃出这里吗?
· 俄罗斯方块
· 经典扫雷
· 推箱子
· 连连看大全
· 合金弹头
· 在线反恐CS
· 小小经典回顾
· 测测谁变态
· 恋爱测试
· 美女脱衣服
· 超级玛莉
· 华容道
· 街头霸王
免费在线视频教程
 
· WORD2003高级应用实例
· 幻影魔术手视频教程
· 21互联常用软件教程
· PS打造超酷摩托车
· 教你用PS画手表
· 思妙Flash视频教程
· PS新功能应用教程
· PS图层从入门到高级
· Excel 2003视频教程
· Word 2003视频教程
精品素材
 
· 沙滩美女阳光女孩壁纸
· 神秘莫测宇宙图片
· 精选Gnome系统桌面壁纸
· 硬币图片专辑
· 美丽动感精选风景桌面
· 异域风情沙漠风景图片
· 韩国手绘设计插画壁纸
· 精美卡通背景桌面
· 可爱钮扣女孩卡通桌面
· 个性设计电脑桌面壁纸
应用专题
 
· Photoshop教程精选
· Ubuntu Linux菜鸟入门
· PHP电子书下载推荐
· 电脑经典问题答疑
· 杀毒、防黑一个不能少
· 菜鸟的网络私房菜
· 18个Windows系统修复绝技
· 80个互联网新体验
· 炒楼炒股不如炒流量
· 安全工具大比拼
论坛博墅
 
· 明星让人抓狂的失败造型
· 婚礼当天新娘改嫁伴郎
· 数码相机的购买知识
· 中国水彩画展精选
· 漂亮的桌面壁纸
· 白领坦然晒工资
· 思念是悄悄的
· 美丽的日出日落
· 世上最变态的电脑中毒
· 世界24大视觉奇图
无标题文档

爱好者网站版权所有 未经授权禁止复制或建立镜像
Copyright(C) cfan.com.cn,All rights reserved
京ICP证010182号