28

最近、Blackberry 用のアプリケーションの開発を開始しました。その結果、私は Java-ME に飛びついて、Java-ME とそれに関連するツールを学ばなければなりませんでした。構文は簡単ですが、さまざまな落とし穴や環境に問題があり続けています。

たとえば、私を驚かせ、多くの時間を無駄にしたのは、クラス オブジェクトに実際のプロパティが存在しないことです (すべての OOP 言語にはあると思っていたものです)。多くの落とし穴があります。Java 構文と C# を比較しているさまざまな場所に行ったことがありますが、Java に移行する際に注意すべきことを説明しているサイトはないようです。

環境はまったく別の問題です。Blackberry IDE は単にひどいものです。この外観は、Borland C++ for Windows 3.1 を思い起こさせます。それは時代遅れです。その他の問題には、むらのあるインテリセンス、脆弱なデバッグなどがあります。Blackberry には Eclipse プラグインのベータ版がありますが、デバッグのサポートがなければ、派手なリファクタリング ツールを備えた単なるエディターです。

では、Java-ME に溶け込む方法について何かアドバイスはありますか?

4

3 に答える 3

52

ここにいるこのは逆の移行をしなければなりませんでした。そこで彼は、Java と C# の相違点トップ 10 を挙げました。彼のトピックを取り上げて、それが Java でどのように作成されているかを示します。

落とし穴 #10 - 私の標準出力を教えてください!

Java で標準出力に出力するには:

System.out.println("Hello");

落とし穴 #9 - 名前空間 == 自由

Java では、名前空間の自由はありません。クラスのフォルダー構造は、パッケージ名と一致する必要があります。たとえば、パッケージorg.test内のクラスは、フォルダーorg/testにある必要があります。

落とし穴 #8 - スーパーに何が起こったの?

superJava では、スーパークラスを参照するために、代わりに予約語を使用します。base

落とし穴 #7 - コンストラクターをベース コンストラクターにチェーンする

Javaにはこれがありません。自分でコンストラクタを呼び出す必要があります

落とし穴 #6 - ダグナビット、既存のクラスをサブクラス化するにはどうすればよいですか?

Java でクラスをサブクラス化するには、次のようにします。

public class A extends B {
}

つまり、 classAは class のサブクラスですB。C#ではclass A : B

落とし穴 #5 - 定数が定数のままにならないのはなぜですか?

Java で定数を定義するには、final代わりにキーワードを使用します。const

落とし穴 #4 - ArrayListVectorまたははどこHashtableですか?

Java で最もよく使用されるデータ構造はHashSetArrayListHashMapです。SetListおよびを実装しMapます。もちろん、もっとたくさんあります。コレクションについて詳しくはこちら

落とし穴 #3 - アクセサーとミューテーター (ゲッターとセッター)

Java にはプロパティ機能がありません。自分で get および sets メソッドを宣言する必要があります。もちろん、ほとんどの IDE はそれを自動的に行うことができます。

落とし穴 #2 - 上書きできない!?

virtualJavaでメソッドを宣言する必要はありません。宣言されたものを除くすべてのメソッドfinalは、Java でオーバーライドできます。

そして一番の落とし穴は…</h2>

Java では、プリミティブ型intfloatdoublecharおよびはC# のような sでlongはありません。それらはすべて、、、 などObjectのそれぞれのオブジェクト表現を持っています。IntegerFloatDouble

それでおしまい。元のリンクを参照することを忘れないでください。より詳細な説明があります。

于 2008-09-18T07:12:42.617 に答える
26

JavaはC#と大きな違いはありません。純粋に構文レベルで、1日を通してあなたを導くかもしれないいくつかのポインタがここにあります:

  1. Javaには、2つの例外ファミリがあります。java.lang.Exceptionそれから派生するすべてのものとRuntimeExceptionJavaでは例外がチェックされるため、これは意味があります。これは、実行時以外の例外をスローするにはthrows、メソッド宣言にアノテーションを追加する必要があることを意味します。したがって、yoursを使用するメソッドは、その例外をキャッチするか、同じ例外をスローすることを宣言する必要があります。NullPointerExceptionまたはなど、当然のことと思われる多くの例外はIllegalArgumentException、実際にはRuntimeExceptionしたがって、それらを宣言する必要はありません。チェックされた例外は2つの分野間の論点であるため、自分で試してみて、それが役立つか、迷惑になるかを確認することをお勧めします。個人的なレベルでは、チェックされた例外によってコードファクタリングと堅牢性が大幅に向上すると思います。

  2. Javaはかなり前からオートボクシングをサポートしてきましたが、C#とJavaの実装の間にはまだかなりの違いがあることに注意する必要があります。C#intでは値型と参照型の両方として交換可能に使用できますが、Javaでは文字通り同じ型ではありません。プリミティブ値型intとライブラリ参照型を取得しますjava.lang.Integer。これは、2つの一般的な方法で現れます。値型をジェネリック型パラメーターとして使用することはできません(したがって、ArrayList<Integer>の代わりに使用しますArrayList<int>)。ユーティリティメソッド(parseまたはなどtoString)は、参照型に静的に実装されます(したがって、そうではありません)。int a; a.toString();むしろint a; Integer.toString( a );)。

  3. Javaには2つの異なるタイプのネストされたクラスがあり、C#には1つしかありません。staticJavaでは、修飾子で宣言されていない静的クラスは内部クラスと呼ばれ、それを囲むクラスのインスタンスに暗黙的にアクセスできます。これは重要なポイントです。C#とは異なり、Javaにはデリゲートの概念がなく、構文上の問題が比較的少なく、同じ結果を達成するために内部クラスが頻繁に使用されるためです。

  4. Javaのジェネリックは、C#とは根本的に異なる方法で実装されます。ジェネリックがJava用に開発されたとき、古いVMとの下位互換性を維持するために、変更はランタイムサポートのない純粋な構文であることが決定されました。ランタイムでジェネリックスを直接サポートしない場合、Javaは型消去と呼ばれる手法を使用してジェネリックスを実装します。ジェネリックのC#実装に比べて型消去にはかなりの欠点がありますが、これから得られる最も重要な点は、Javaのパラメーター化されたジェネリック型には異なるランタイム型がないことです。言い換えれば、コンパイル後のタイプArrayList<Integer>ArrayList<String>同等です。ジェネリックスを多用すると、思ったよりも早くこれらの違いに遭遇するでしょう。

私の意見では、C#開発者が理解するのが難しい言語の3つの側面があります。それ以外に、開発ツールとクラスライブラリがあります。

  1. Javaでは、パッケージ(名前空間)、クラス名、およびファイル名の間に直接的な相関関係があります。共通のルートディレクトリの下で、クラスcom.example.SomeClassorg.apache.SomeOtherClassは文字通りそれぞれとにcom/example/SomeClass.classありorg/apache/SomeOtherClass.classます。1つのJavaファイルで複数のクラスを定義しようとすることには注意してください(プライベートクラスでは可能ですが、お勧めしません)。開発環境に慣れるまで、このディレクトリ構造に固執してください。

  2. Javaには、C#に簡単にマップできないクラスパスとクラスローダーの概念があります(ほとんどの.NET開発者が一般的に使用していない大まかな同等のものがあります)。クラスパスは、Java VMにライブラリとクラスの場所(ユーザーとシステムの共有ライブラリの両方)を通知します。クラスローダーは、タイプが存在するコンテキストと考えることができます。クラスローダーは、さまざまな場所(ローカルディスク、インターネット、リソースファイルなど)からタイプ(クラスファイル)をロードするために使用されますが、それらのファイルへのアクセスも制限します。たとえば、Tomcatなどのアプリケーションサーバーには、登録されているアプリケーションまたはコンテキストごとにクラスローダーがあります。つまり、アプリケーションAの静的クラスは、同じ名前を持ち、同じコードベースを共有している場合でも、アプリケーションBの静的クラスと同じにはなりません。

  3. JavaクラスライブラリはBCLに似ています。違いの多くは表面的なものですが、ドキュメント(および/またはGoogle)を何度も何度も実行するのに十分です。残念ながら、ここで行うことは何もないと思います。ライブラリに慣れていくだけです。

結論:Javaを理解する唯一の方法は、Javaを使用することです。学習曲線は急ではありませんが、使用の最初の2、3か月間、非常に頻繁に驚いたりイライラしたりする準備をしてください。

于 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 に答える