我已经使用C#,更普遍的是.Net框架已经有几年了。我经常听说C#和C之间的相似之处。 Java语言,想了解更多关于第二个的知识。
答案 0 :(得分:66)
嗯,虽然C#和Java在表面上相似但是有一些小的差异可能会让你感到困惑。一般来说,我认为从Java到C#的相反方向 - 问题较少。这主要是因为C#是一种更复杂的语言,因此您可能会发现许多普通Java模式的简化,但反过来可能会有点痛苦。
需要注意的事项(部分清单,不保证详尽无遗):
不同......
命名约定。在Java中,只有类型名称以大写字母开头(即PascalCase),其他所有内容都使用camelCase。但是,并不是很难坚持。
接口通常也不以I
开头。另一方面,您必须使用不同的关键字实现它们。但是,在代码中间并没有真正帮助。
班级图书馆: - )
虽然显而易见,但这是我在学习语言时花费的最多时间。在处理已知范例时,语法差异很快得到解决,但在某些情况下,了解标准库/类库/框架需要一些时间: - )
异常处理。 Java具有所谓的已检查异常,这意味着必须捕获或向上声明异常。通常这意味着你有
catch (SomeException ex) {
ex.printStackTrace();
}
经常在您的代码中 1 : - )
int
,float
,char
和& c。和类,例如String
。自从他们实现了自动装箱以来没有多大关系,但有时在int
中包裹Integer
仍然很烦人。virtual
,而c#方法则不是。{/ li>
foreach (a in b)
→for (a : b)
internal
和protected internal
之类的内容不存在。但是不合格的成员对于同一个包中的其他类是可见的(排序为internal
,但后来又不完全)。==
未进行字符串比较。您必须使用.equals()
。虽然在C#==
上字符串是值相等,但在Java ==
中总是引用相等。不......
Foo getFoo()
/ void setFoo(Foo foo)
模式来完成,当使用属性时C#会在您的背后静默生成,但您必须在Java中明确地执行此操作。通常,为了使语言本身更简单,Java中的许多东西都只是约定。不过,大多数时候你最好还是坚持下去: - )myList.get(5)
而不是类似数组的语法myList[5]
来访问列表项。但是,这只是一个轻微的不便。Object
。当编译器抱怨你的泛型中的所有四个?
具有不同类型时,泛型中的通配符有时很难解决。 (虽然公平地说:那是我在运行时需要类型信息的情况,所以我又回到了Object
)。一般建议:抓住一位有Java经验的朋友,让他浏览你的代码。虽然他可能无法告诉你当你直接问他这个问题时你应该照顾的一切,他可以在代码中发现奇怪的事情然后通知你。这对我学习Java有很大帮助(虽然我先学习Java然后学习C#,所以可能会有所不同)。
1 是的,我知道许多捕捉块看起来不同,但是,这可能是原型和not even that rare。
2 Quaere,JaQue,JaQu,Querydsl
3 虽然有lambdaj。感谢您指出,Esko。
答案 1 :(得分:11)
老实说,我认为许多试图学习Java的C#开发人员的最大障碍是学习新的IDE。 Visual Studio很棒,当你在C#中编写很长一段时间时,你会习惯它。当不得不转移到Eclipse或Netbeans时,你会突然感到迷茫。我该如何设置断点?最近的窗口在哪里?如何创建Windows应用程序?等等......我知道这听起来很疯狂,但我告诉你,人们非常依赖他们的IDE并且很难适应新的......
答案 2 :(得分:9)
语言本身非常相似,没有几个关键字,Java缺少C#程序员习惯的属性(属性,using
,具体化(非类型擦除)泛型)。
这里的主要问题是框架的知识,其中有数千个用于Java。
答案 3 :(得分:5)
主要语言很好。了解库将是一件需要时间的事情。如果您正在进行Web应用程序,那么很多东西需要学习......与WCF和ASP.net等效的技术。 您没有说明您在哪个区域工作...桌面,服务器或Web服务器?
答案 4 :(得分:3)
C#和Java之间的最大区别:在Java中,所有方法都是virtual
。因此,诸如NUnit等工具来自Java世界的原因。
答案 5 :(得分:2)
老实说,如果你是一名称职的C#程序员,我认为除了应用程序的打包和部署之外你还不需要了解它。
这是一个很好的链接http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp
答案 6 :(得分:2)
您需要学习的最重要的事情是如何在Java中使用Greenspun C#的功能样式功能。例如,您可以期望只使用一种方法创建大量接口,以解决Java缺少lambda函数和委托的问题。
答案 7 :(得分:1)
我诚实地推荐Java in a Nutshell。大多数Java / any_other_lang入门书籍都是针对完全新手的读者解释页面循环和章节递归的概念......你可以在两天内用本书开始编写Java程序。当然,您需要花费很长时间才能了解幕后发生的事情以及如何使用所有可用的框架。但是一旦掌握了语言本身,即使只使用谷歌资源也很容易相处。
答案 8 :(得分:1)
我从Java转换到C#并再次回到Java。我认为它们在语法上非常相似,我遇到的大部分麻烦都是学习.NET API并学习如何有效地使用它们。很多时候我使用'syntactic sugar',编写我的代码就好像是在Java中,然后将其翻译成C#。我花了很多时间在微软的网站上阅读和学习API,这是一个巨大的帮助。
答案 9 :(得分:1)
虽然这是另一种方式,但我发现以下链接对于比较Java和C#非常有用。