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

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

环境是一个完全不同的问题。Blackberry IDE 简直太糟糕了。外观让我想起了 Borland C++ for Windows 3.1 - 它已经过时了。其他一些问题包括不稳定的智能感知、弱调试等......Blackberry 确实有 Eclipse 插件的测试版,但没有调试支持,它只是一个带有精美重构工具的编辑器。

那么,对于如何融入 Java-ME 有什么建议吗?

有帮助吗?

解决方案

家伙在这里 必须进行逆向过渡。因此他列出了 Java 和 C# 的 10 大差异。我将采用他的主题并展示它是如何用 Java 制作的:

问题 #10 - 给我我的标准输出!

要在 Java 中打印到标准输出:

System.out.println("Hello");

陷阱 #9 - 命名空间 == 自由

在 Java 中,你没有命名空间的自由。类的文件夹结构必须与包名称匹配。例如包中的一个类 组织测试 必须在文件夹中 组织/测试

陷阱 #8 - super 发生了什么?

在 Java 中,要引用超类,请使用保留字 super 代替 base

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

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

问题 #6 - Dagnabit,如何对现有类进行子类化?

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

public class A extends B {
}

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

陷阱 #5 - 为什么常数不能保持不变?

要在 Java 中定义常量,请使用关键字 final 代替 const

陷阱 #4 - 在哪里 ArrayList, Vector 或者 Hashtable?

java中最常用的数据结构是 HashSet, ArrayListHashMap. 。他们实施 Set, ListMap. 。当然,还有很多。阅读有关收藏的更多信息 这里

陷阱 #3 - 访问器和修改器(获取器和设置器)

Java 中没有属性功能。您必须自己声明 get 和 set 方法。当然,大多数 IDE 可以自动执行此操作。

陷阱 #2 - 我不能覆盖吗!?

您不必声明方法 virtual 在爪哇。所有方法 - 除了声明的方法 final - 可以在 Java 中被覆盖。

第一个陷阱……

Java 中的原始类型 int, float, double, charlong 不是 Object就像 C# 中的那样。它们都有各自的对象表示,例如 Integer, Float, Double, , ETC。

就是这样。别忘了看看 原始链接, ,有更详细的讨论。

其他提示

Java 与 C# 没有显着差异。从纯粹的语法层面来看,以下一些提示可能会帮助您度过这一天:

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

  2. 尽管 Java 支持自动装箱已经有一段时间了,但您应该注意 C# 和 Java 实现之间仍然存在相当多的差异。而在 C# 中,您可以互换使用 int 作为值类型和引用类型,在 Java 中它们实际上不是同一类型:你得到原始值类型 int 和库引用类型 java.lang.Integer. 。这表现为两种常见方式:您不能将值类型用作泛型类型参数(因此您将使用 ArrayList<Integer> 代替 ArrayList<int>)和实用方法(例如 parse 或者 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.classorg/apache/SomeOtherClass.class 分别。请谨慎尝试在单个 Java 文件中定义多个类(对于私有类是可能的,但不推荐),并坚持使用此目录结构,直到您对开发环境更加熟悉为止。

  2. 在 Java 中,类路径和类加载器的概念不容易映射到 C#(有一些粗略的等效项,但大多数 .NET 开发人员并不常用)。类路径告诉 Java VM 在哪里可以找到库和类(您的和系统的共享库!),并且您可以将类加载器视为您的类型所在的上下文。类加载器用于从不同位置(本地磁盘、互联网、资源文件等)加载类型(类文件),但也限制对这些文件的访问。例如,诸如 Tomcat 之类的应用程序服务器将为每个注册的应用程序或上下文提供一个类加载器;这意味着应用程序 A 中的静态类与应用程序 B 中的静态类不同,即使它们具有相同的名称并且共享相同的代码库。AppDomains 在 .NET 中提供了一些类似的功能。

  3. Java类库与BCL类似;很多差异都是表面上的,但足以让您一遍又一遍地查找文档(和/或谷歌)。不幸的是,我不认为这里有什么可做的——你只需不断熟悉这些库即可。

底线:了解 Java 的唯一方法就是使用它。学习曲线并不陡峭,但在使用的前两三个月内,要做好经常感到惊讶和沮丧的准备。

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

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

如果您谈论的是类属性,Java 就有这些属性。语法是

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

我强烈建议你使用更好的 IDE。Netbeans、Eclipse、IDEA、JBuider 中的任何一个都将使您的过渡更加愉快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top