28

我最近开始为黑莓开发应用程序。因此,我不得不跳到 Java-ME 并学习它及其相关工具。语法很简单,但我一直遇到各种问题和环境问题。

例如,令我惊讶并浪费了大量时间的事情是类对象上没有真正的属性(我认为所有 OOP 语言都有)。有很多陷阱。我去过很多地方,他们比较了 Java 语法和 C#,但似乎没有任何网站可以说明迁移到 Java 时需要注意的事项。

环境是一个完全不同的问题。Blackberry IDE 简直太可怕了。外观让我想起了适用于 Windows 3.1 的 Borland C++——它已经过时了。其他一些问题包括参差不齐的智能感知、弱调试等……黑莓确实有一个 Eclipse 插件的测试版,但没有调试支持,它只是一个带有花哨的重构工具的编辑器。

那么,关于如何融入 Java-ME 的任何建议?

4

3 回答 3

52

这里的这个必须进行反向转换。所以他列出了 Java 和 C# 的 10 大差异。我将采用他的主题并展示它是如何用 Java 制作的:

Gotcha #10 - 给我我的标准输出!

在 Java 中打印到标准输出:

System.out.println("Hello");

问题 #9 - 命名空间 == 自由

在 Java 中,您没有命名空间的自由。您的类的文件夹结构必须与包名称匹配。例如,包org.test中的一个类必须在文件夹org/test中

Gotcha #8 - super怎么了?

在 Java 中引用超类,您使用保留字super而不是base

Gotcha #7 - 将构造函数链接到基本构造函数

你在 Java 中没有这个。你必须自己调用构造函数

Gotcha #6 - Dagnabit,我如何子类化现有类?

要在 Java 中子类化一个类,请执行以下操作:

public class A extends B {
}

这意味着 classA是 class 的子类B。在 C# 中将是class A : B

Gotcha #5 - 为什么常量不保持不变?

要在 Java 中定义常量,请使用关键字final而不是const

问题 #4 - 哪里是ArrayList,VectorHashtable?

Java 中最常用的数据结构是HashSet,ArrayListHashMap. 他们实施Set和。当然,还有一堆。在此处阅读有关收藏的更多信息ListMap

Gotcha #3 - 访问器和修改器(Getter 和 Setter)

Java 中没有属性工具。您必须为自己声明获取和设置方法。当然,大多数 IDE 可以自动执行此操作。

问题 #2 - 我不能覆盖!?

您不必virtual在 Java 中声明方法。所有方法——除了那些声明的final——都可以在 Java 中被覆盖。

还有 #1 陷阱……</h2>

在 Java 中,原始类型intfloatdoublechar与C# 中的long不同。Object它们都有各自的对象表示,如IntegerFloatDouble等。

就是这样。不要忘记查看原始链接,这里有更详细的讨论。

于 2008-09-18T07:12:42.617 回答
26

Java 与 C# 没有显着差异。在纯粹的句法层面上,这里有一些可以帮助你度过一天的提示:

  1. 在 Java 中,您有两个异常系列:java.lang.Exception以及从它派生的所有异常,以及RuntimeException. 这是有意义的,因为在 Java 中会检查异常;这意味着为了抛出任何非运行时异常,您还需要在throws方法声明中添加注释。因此,任何使用您的方法都必须捕获该异常或声明也抛出相同的异常。很多你认为理所当然的例外,例如NullPointerExceptionor IllegalArgumentException,实际上源自RuntimeException因此,您无需声明它们。检查异常是两个学科之间的争论点,所以我建议您自己尝试一下,看看它是否对您有帮助或惹恼您。在个人层面上,我认为检查异常显着提高了代码分解和健壮性。

  2. 尽管 Java 支持自动装箱已经有一段时间了,但您应该注意 C# 和 Java 实现之间的一些差异。而在 C# 中,您可以互换地int用作值类型和引用类型,而在 Java 中,它们实际上并不是同一种类型:您得到原始值类型int和库引用类型java.lang.Integer。这表现为两种常见的方式:您不能将值类型用作泛型类型参数(因此您将使用ArrayList<Integer>代替ArrayList<int>),以及实用方法(例如parseor toString)在引用类型中静态实现(因此它不是int a; a.toString();而是int a; Integer.toString( a );)。

  3. Java 有两种不同类型的嵌套类,C# 只有一种。在 Java 中,未使用修饰符声明的静态类static称为内部类,并且可以隐式访问封闭类的实例。这一点很重要,因为与 C# 不同,Java 没有委托的概念,内部类经常用于以相对较少的语法痛苦来实现相同的结果。

  4. Java 中的泛型以与 C# 完全不同的方式实现;当为 Java 开发泛型时,决定这些更改将是纯粹的语法,不支持运行时,以保持与旧 VM 的向后兼容性。由于运行时没有直接的泛型支持,Java 使用一种称为类型擦除的技术来实现泛型。与泛型的 C# 实现相比,类型擦除有很多缺点,但最重要的一点是Java 中的参数化泛型类型没有不同的运行时类型。换句话说,编译后的类型ArrayList<Integer>ArrayList<String>等价的. 如果您大量使用泛型,您会比您想象的更快遇到这些差异。

在我看来,C# 开发人员需要了解该语言的三个最难的方面。除此之外还有开发工具和类库。

  1. 在 Java 中,包(命名空间)、类名和文件名之间存在直接关联。在一个共同的根目录下,类com.example.SomeClassorg.apache.SomeOtherClass将分别在com/example/SomeClass.class和中找到org/apache/SomeOtherClass.class。小心尝试在单个 Java 文件中定义多个类(私有类可以,但不推荐),并坚持使用此目录结构,直到您对开发环境更加熟悉为止。

  2. In Java you have the concepts of class-path and class-loader which do not easily map to C# (there are rough equivalents which are not in common use by most .NET developers). Classpath tells the Java VM where libraries and classes are to be found (both yours and the system's shared libraries!), and you can think of class loaders as the context in which your types live. Class loaders are used to load types (class files) from various locations (local disk, internet, resource files, whatnot) but also constrain access to those files. For instance, an application server such as Tomcat will have a class loader for each registered application, or context; this means that a static class in application A will not be the same as a static class in application B, even if they have the same name and even if they share the same codebase. AppDomains provide somewhat similar functionality in .NET.

  3. The Java class library is similar to the BCL; a lot of the differences are cosmetic, but it's enough to get you running for the documentation (and/or Google) over and over again. Unfortunately I don't think there's anything to do here — you'll just build familiarity with the libraries as you go.

Bottom line: the only way to grok Java is to use it. The learning curve isn't steep, but prepare to be surprised and frustrated quite often over the first two or three months of use.

于 2008-09-18T09:14:42.900 回答
2

简短的回答是——这会很烦人,但并不难。

Java 和 C# 具有所有相同的基本概念,并且许多库在风格上非常接近,但是您将不断遇到各种差异。

如果你在谈论类属性,Java 有这些。语法是

public class MyClass {
    public static int MY_CLASS_PROPERTY = 12;
}

我会认真建议您获得更好的IDE。Netbeans、Eclipse、IDEA、JBuider 中的任何一个都将使您的过渡更加愉快。

于 2008-09-18T06:56:10.393 回答