我已经使用C#,更广泛地使用.Net框架已有两年了。我经常听说C#和Java语言之间的相似之处,并且想了解有关第二种语言的更多信息。
好吧,尽管C#和Java表面上相似,但仍有一些细微的差别可能会咬你。通常,我认为相反的方向(从Java到C#)的问题较少。这主要是由于C#是一种更复杂的语言,因此您可能会发现常见Java模式的许多简化,但反之则可能会有些痛苦。
需要注意的事情(部分清单,不能保证是详尽无遗的):
不同…
接口通常也不以开头I
。另一方面,您必须使用其他关键字来实现它们。但是,在代码中间并没有真正的帮助。
* 类库:-)
虽然很明显,但这是我在学习语言时花费的大部分时间。在处理已知范例时,可以快速理清语法差异,但是在某些情况下,了解标准库/类库/框架会花费一些时间:-)
* 模式。好吧,不完全是,它还是一样的东西。但是C#在语言级别支持某些模式,而您仍然必须自己在Java中实现它们。没有事件,但是只有观察者模式(在Swing中非常普遍-每当您看到监听器时,您就知道该怎么做:-))
* 异常处理。Java具有所谓的 _检查异常_ ,这意味着必须捕获或向上声明异常。通常这意味着你有
catch (SomeException ex) {
ex.printStackTrace();
}
在您的代码中很常见1 :-)
* 类型。.NET具有普通的对象和值类型,它们都是对象,并且支持方法,属性&c。Java有的二分法 _原始_ 类型,例如`int`,`float`,`char`,& C。以及诸如此类的 _课程_`String`。没有多大关系,因为他们实现自动装箱,但有时它仍然恼人的包裹`int`在`Integer`。
* 多态:`virtual`默认情况下,所有Java方法都是默认方法,而c#方法则不是。
foreach (a in b)
→ for (a : b)
internal
和protected internal
不存在的事情。但是,不合格的成员对于同一包中的其他类是可见的(有点internal
,但又不太完全)。==
在Java中没有完成。您必须使用.equals()
。虽然在C#==
中字符串是值相等,但在Java ==
中 始终 是引用相等。不…
Foo getFoo()
/ void setFoo(Foo foo)
模式完成此操作,当使用属性时,C#会在背后默默地生成/ 模式,但您必须在Java中显式地进行操作。通常,为了使语言本身更简单,Java中的许多事情只是约定。不过,大多数情况下,最好还是坚持使用它们:-)myList.get(5)
而不是类似数组的语法来访问列表项myList[5]
。不过,这只是轻微的不便。Object
保留s。同样,当编译器抱怨?
您泛型中的所有四个具有不同类型时,泛型中的通配符有时可能很难解析。(尽管公平地说:在这种情况下,无论如何我在运行时都需要类型信息,所以我又回到了Object
s)。一般建议:
找一个具有Java经验的朋友,让他浏览一下您的代码。当他直接问他这个问题时,虽然他可能无法告诉您所有您应该注意的事情,但他可以在代码中发现奇怪的事情,并通知您。这极大地帮助了我学习Java(尽管我先学习Java,然后再学习C#,所以可能有所不同)。
1是的,我知道许多捕获块看起来都不同,但这仍然是典型的捕获块,甚至没有那么罕见。 2
Quaere,JaQue,JaQu,Querydsl
3但是有lambdaj。
问题内容: 我很了解Java。哪些警告和资源将帮助我尽可能轻松地跨过另一端(C#)。 问题答案: 最大提示:请使用go一词中的.NET命名约定。这样,您将不断被提示使用的是哪种语言。(听起来很愚蠢,但这确实有帮助。)尽可能多地接受该语言的习惯用法。 有许多专门针对您所处地区的人们的书籍-在亚马逊上搜索“ C#for Java”,您将获得很多成功。值得 仔细 阅读以确保您不认为C#和Java中的功能
(再说一遍,数据是字节数组) 但是,字节不匹配。我是不是漏掉了什么? (好吧,我当然是,否则它会起作用的,对吧?:S) -86,44,95,84,3,50,7,-119,-36,46,39,32,-120,7,10,-86,-101,110,-93,-72,-13,-93,-42,111,0,59,-85,-63,-15,-98,-17,-52 当转换为 170,44,95,84,3,50,7,1
我试图通过套接字将protobuf从C++应用程序发送到Java应用程序。我正在使用一个简单的套接字在muc++程序发送protobuf。在通过网络发送之前,我已经将其序列化到char缓冲区。在我的Java(服务器)程序中,我使用ServerSocket来接收数据。 我有麻烦反序列化的原Buf在Java那边。它一直给我错误: 解析协议消息时,输入在字段中间意外结束。这可能意味着输入被截断,或者嵌入
问题内容: 我正在尝试解决此问题:http : //uva.onlinejudge.org/external/7/732.html。对于给定的示例,他们给我们提供了原始单词,例如 TRIT 和目标“组合”字符串 TIRT 。 目标: 我们必须输出所有有效的序列“ i”和“ o”(分别为推式和弹出式),这些序列从源字符串产生目标字符串。 因此,我正在考虑计算“ i”和“ o”的所有排列,但是减少了这
问题内容: 因此,下周我将在Java地方接受工作面试,并且希望不会遇到这么无聊的人。我是一个非常有信心的C#/。NET开发人员,并且(显然!)愿意考虑将其移植到Java中- 我希望人们推荐这样做的资源链接。我对以下问题的答案感兴趣: 有没有任何与Justin Etheridge的Ruby for C#开发人员等效的指南?当我决定要学习Ruby的耙子(因此至少要学习一点Ruby)时,这真的很有用。不
问题内容: 由于办公室人员的变动,C#专业知识的水平急剧下降,现在有更多的Java开发人员。至此,高层人士正在考虑将用C#编写的现有.NET项目转移到Java世界中。 除了从头开始完全出现 的明显问题之外,该公司还可以通过哪些可行的方法成功地将项目从.NET C#移植到Java? 问题答案: 这里是要考虑的事情: 这是大项目吗?如果是,请尝试使用C# 这个中型项目是否包含组件?如果否,请尝试使用C