9

Javaの大きな特徴の1つは、Javaアプリケーションを作成し、ライブラリを使用しない限り、Windows、Linux、Macなどで実行できるという意味でプラットフォームに依存しないことです。 1つのOSに固有であり、適切なOSが正しく解釈するためにJVMがインストールされている限り...

ただし、携帯電話に特定のJVMがインストールされていて、正しく解釈できるのに、通常のコンピューターJavaプログラム(Javaの単純なHello Worldのように、WindowsやLinuxなど)が携帯電話でまったく同じように実行できないのはなぜですか。 ?

Android開発など、場合によってはプログラムのアーキテクチャを変更したり、Java MEを使用して一部の一般的な携帯電話に固有のアプリケーションを作成したりする必要があるのはなぜですか?

OSの特定の機能に関連する機能がいくつかあることは知っています。たとえば、コンソールや入力メソッドなどに関連する機能など、モバイルプラットフォームには適用されない可能性がありますが、これが唯一の理由です。それは物事を互換性のないものにしますか?もしそうなら、整数変数を宣言して初期化するだけの単純なアプリケーションが、JVMが利用可能なすべての非モバイルおよびモバイルプラットフォームで実行できないのはなぜですか?

このような以前に投稿された他の質問を知っていますが、それは私がここで目指している正確なポイントに焦点を当てていません。

4

5 に答える 5

8

注目すべき移植性の単位は、アプリケーションではなくクラスです。整数変数を宣言して初期化するクラスは説明したすべてのプラットフォームで実行され、他の多くのプラットフォームでも実行されます。彼らは、バイトコードインタープリターからJITコンパイル、AndroidのDalvik(JVMバイトコードを独自の命令セットに変換する)に至るまで、さまざまなメカニズムを使用して実行したとしても、同じバイトコードを理解します。

単一の整数変数を超えて見ても、「コア」機能を使用するJavaこれらのデバイスのほとんどで機能します。J2ME、Android、およびJ2SEの間には多くの共通点があります(特に後者の2つ-J2MEは、リソースが限られているデバイス用の標準Java APIの縮小版として意図されていたため、使用できる標準APIは少なくなっています)。

Windows / Mac / Linuxシステムでは、アプリケーションは通常、明示的に起動して使用し、終了したら終了するように指示するものです。これを、たとえばAndroidフォンと比較してください。アプリケーションは発生したイベント(おそらく着信SMS、またはWebからダウンロードされた特定の種類のファイル)に応答して開始される可能性があります。その場合、アプリケーションはその方法理由を知る必要があります。開始しました-単純なpublic static main(String[] args)ものはそれをカットしません。アプリを起動すると、リソースを解放したり、バッテリーを消耗する可能性のあるCPUを集中的に使用する機能(GPSなど)を無効にしたりするために、「バッテリー低下」や「スタンバイモードへの移行」などのイベントを認識する必要があります。

これらはあいまいな機能ではありません-電話が電話として役立つために不可欠です-したがって、すべてのネイティブアプリケーションがそれらを処理する必要があります。

于 2010-11-10T00:25:31.720 に答える
5

Javaコードをコンパイルすると、システムに依存しないバイトコード(クラスファイル)が生成されます。このバイトコードは、システムに常駐するJVM(Java仮想マシン)に送られます。すべてのシステムには独自のJVMがあるため、ソースコードをどこでコンパイルするかは問題ではありません。コンパイラによって生成されたバイトコードは、任意のマシンの任意のJVMで解釈できます。したがって、プラットフォームに依存しない言語と呼ばれます。

ありがとう

于 2011-10-23T16:05:08.363 に答える
2

Javaプラットフォームが理論的に独立していて、実際にはプラットフォームに依存しているのはなぜですか?

Java言語のみがプラットフォームに依存しないことを覚えて明確にし、文の意味を理解しようとします。Javaはプラットフォームに依存しないということは、Javaを使用して開発したコードを任意のマシンで実行できることを意味します。

ファイルをコンパイルすると、.javaファイルが生成さ.classれ、バイトコードが含まれます。このバイトコードはプラットフォームに依存しないため、どのマシンでも実行できます。これは、Java言語のプラットフォームに依存しないことです。

これは実際には行われていないため、Java言語のみがプラットフォームに依存しないが、そのランタイム環境(JVM)はプラットフォームに依存し、OSごとに個別に記述されているためです。つまり、Java言語はプラットフォームに依存しないと言えますが、そのランタイム環境はプラットフォームに依存します。

于 2013-10-16T17:49:27.017 に答える
1

Java言語は1つだけですが、携帯電話などの他の多くのデバイスは独自のバージョンを実行します。これは通常、デバイスに合うように縮小されたバージョンです。これらは、ハードウェア(つまり、タッチスクリーン)へのアクセスを支援する他の独自のクラスを持つこともあります。メインのプラットフォームに基づいて個別のプラットフォームを作成することで、多くのサポートとより緊密で効率的なプログラミング言語を利用できます。

于 2010-11-10T00:24:37.217 に答える
1

Sun micro Systemsは、さまざまなバージョンのjdkをリリースしました。1つはWindowsベース用で、もう1つはlinux/unixベース用です。これを使用してjdkをインストールすると、jvm、jre、およびjavacが取得されます。Windows jdkがインストールされているIntelプロセッサを搭載したWindowsでJavaプログラムを作成すると、そのjdkのJavaコンパイラは、.javaファイルをアセンブリ言語コードと同様のバイトコード命令を含む.classファイルに変換します。 jvmだけが理解できる。Windows OSで生成された.classファイルを取得し、Linuxで実行した場合、そのLinuxマシンのjvmは、javasoftの人々によって開発され、の一部として配置された約200以上の命令セットを使用してJavaプログラムを内部的に書き換えます。 jvm。.classファイルが実行されます。したがって、ここで重要なのは、jdkはプラットフォームに依存しますが、.classはプラットフォームに依存しないことです。これは、jvmが.classファイルの実行のみを担当するためです。すべてのjdkのjvmには、内部で事前定義された命令セットがあります。200以上。

于 2014-01-08T13:04:24.217 に答える