C# 担当者が Java-ME を本当に理解するための最良の方法 [終了]
-
01-07-2019 - |
質問
最近、Blackberry 用のアプリケーションの開発を始めました。その結果、私は Java-ME にジャンプして、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 - スーパーに何が起こったのでしょうか?
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
, ArrayList
そして HashMap
. 。彼らは実装します Set
, List
そして Map
. 。もちろん、他にもたくさんあります。コレクションについて詳しく読む ここ
注意点 #3 - アクセサーとミューテーター (ゲッターとセッター)
Java にはプロパティ機能がありません。get メソッドと set メソッドを自分で宣言する必要があります。もちろん、ほとんどの IDE はこれを自動的に行うことができます。
注意事項 #2 - 上書きできないのですか?
メソッドを宣言する必要はありません virtual
ジャワでは。すべてのメソッド - 宣言されたメソッドを除く final
- Java でオーバーライドできます。
そして一番の落とし穴は…
Java のプリミティブ型 int
, float
, double
, char
そして long
ではありません Object
C# のようなものです。それらはすべて、次のようなそれぞれのオブジェクト表現を持っています。 Integer
, Float
, Double
, 、など。
それでおしまい。忘れずにご覧ください 元のリンク, 、さらに詳しい議論があります。
他のヒント
Java は C# と大きな違いはありません。純粋に構文レベルで、その日を乗り切るためのヒントをいくつか紹介します。
Java には 2 つの例外ファミリーがあります。
java.lang.Exception
そしてそこから派生するすべてのもの、そしてRuntimeException
. 。Java では例外が次のとおりであるため、これは意味があります。 チェック済み;これは、実行時以外の例外をスローするには、throws
メソッド宣言にアノテーションを追加します。したがって、あなたのメソッドを使用するすべてのメソッドは、その例外をキャッチするか、それを宣言する必要があります。 それ も同じ例外をスローします。当然だと思っている多くの例外。NullPointerException
またはIllegalArgumentException
, 、実際にはから派生しますRuntimeException
したがって、それらを宣言する必要はありません。チェック例外は 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 );
).Java には 2 つの異なるタイプのネストされたクラスがありますが、C# には 1 つだけがあります。Java では、
static
修飾子はと呼ばれます 内部クラス, 、そして、それを囲んでいるクラスのインスタンスに暗黙的にアクセスできます。C# とは異なり、Java にはデリゲートの概念がなく、比較的少ない構文上の苦痛で同じ結果を達成するために内部クラスが非常によく使用されるため、これは重要な点です。Java のジェネリックスは、C# とは根本的に異なる方法で実装されます。Java 用のジェネリックスが開発されたとき、古い VM との下位互換性を維持するために、変更はランタイム サポートなしで純粋に構文的なものになることが決定されました。ランタイムでは直接ジェネリックがサポートされていないため、Java は と呼ばれる手法を使用してジェネリックを実装します。 タイプ消去. 。ジェネリックスの C# 実装に比べて型消去にはかなりの欠点がありますが、ここから得られる最も重要な点は次のとおりです。 Java のパラメータ化されたジェネリック型には異なるランタイム型がありません. 。つまり、コンパイル後の型は
ArrayList<Integer>
そしてArrayList<String>
は 同等. 。ジェネリックを頻繁に使用する場合は、思ったよりもずっと早くこれらの違いに遭遇することになります。
私の意見では、C# 開発者にとってこの言語の理解が最も難しい側面は 3 つあります。それ以外には、開発ツールとクラス ライブラリがあります。
Java では、パッケージ (名前空間)、クラス名、ファイル名の間に直接の相関関係があります。共通のルート ディレクトリの下に、クラス
com.example.SomeClass
そしてorg.apache.SomeOtherClass
文字通りに見つかりますcom/example/SomeClass.class
そしてorg/apache/SomeOtherClass.class
それぞれ。単一の Java ファイルで複数のクラスを定義しようとする場合は注意し (プライベート クラスの場合は可能ですが、推奨されません)、開発環境に慣れるまではこのディレクトリ構造に固執してください。Java にはクラスパスとクラスローダーの概念がありますが、これらは C# に簡単にマッピングできません (ほとんどの .NET 開発者が一般的に使用していない大まかな同等の概念があります)。クラスパスは、ライブラリとクラスがどこにあるか (ユーザーのライブラリとシステムの共有ライブラリの両方) を Java VM に伝えます。クラス ローダーは型が存在するコンテキストと考えることができます。クラス ローダーは、さまざまな場所 (ローカル ディスク、インターネット、リソース ファイルなど) から型 (クラス ファイル) をロードするために使用されますが、それらのファイルへのアクセスも制限します。たとえば、Tomcat などのアプリケーション サーバーには、登録されたアプリケーションまたはコンテキストごとにクラス ローダーがあります。これは、たとえ同じ名前を持っていても、同じコードベースを共有していても、アプリケーション A の静的クラスはアプリケーション B の静的クラスと同じではないことを意味します。AppDomain は、.NET で同様の機能を提供します。
Java クラス ライブラリは BCL に似ています。違いの多くは表面的なものですが、ドキュメント (および/または Google) を何度も検索するのに十分です。残念ながら、ここでは何もする必要はないと思います。やっていくうちにライブラリに慣れていくだけです。
結論:Java を理解する唯一の方法は、Java を使用することです。学習曲線はそれほど急ではありませんが、使用して最初の 2 ~ 3 か月間は頻繁に驚かれたりイライラしたりすることを覚悟してください。
簡単に言うと、面倒なことになるだろうが、難しくはない、ということだ。
Java と C# は基本的な概念がすべて同じであり、ライブラリの多くはスタイルが非常に似ていますが、さまざまな違いに頭を悩ませることになります。
クラスのプロパティについて話している場合、Java にはそれらのプロパティがあります。構文は次のとおりです
public class MyClass {
public static int MY_CLASS_PROPERTY = 12;
}
より優れた IDE を入手することを強くお勧めします。Netbeans、Eclipse、IDEA、JBuider のいずれかを使用すると、移行がより快適になります。