0

多くの人が、Javaはシステムに依存しないプログラミング言語であると言っていました。同じ.classファイルは、適切なOS JVMを使用して任意のOSで実行(インターセプト)できます。私の質問-.javaファイル自体もシステムに依存しませんか?つまり、あるOSで書き込まれた(そして正しくコンパイルできる).javaファイルは、別のOSで正しくコンパイルできますか?そうでない場合、これを示す例はありますか?

ありがとう!

4

4 に答える 4

1

ファイルが API 構文と正しいバージョンに従っている限り、.javaコーディングされている場所に関係なく、任意のオペレーティング システムでコンパイルできます。

于 2012-10-23T20:25:25.897 に答える
0

短い答え、はい。長い答え、ええええええ。

jedwardsAndroid SDK で利用可能なライブラリは Sun が配布する JDK とは異なるため、質問に対するコメントで指摘されているように、1 つの例外として Android が含まれます。これは JVM 固有の違いですが、Android は技術的には OS であるため、重要です。これは Java ME および Java EE にも拡張できますが、OS に依存するのではなく、JDK/ライブラリにさらに依存します。

sun.*別の例外として、またはパッケージ内のクラスなど、独自のパッケージの下でクラスを使用する場合がありcom.sun.*ます。その後、JVMに依存しますが、適切なバージョンの Sun の JVM を使用している限り、OS に依存することはありません。

つまり、厳密に言えば、使用している JDK バージョンが OS で利用可能であり、使用しているネイティブ ライブラリ (JNI と考えてください) が OS で利用可能である限り、.java ファイルは問題なくコンパイルされます。あなたのOS。それが実行されるかどうかは、まったく別の問題です。

補足: 前の仕事では、ソフトウェア開発に Mac OS X 10.4+、Ubuntu 8.04+、および Windows XP/Server 2003+ を同時に使用していまし。しかし、コンパイルに関する問題はありません。

于 2012-10-23T20:26:37.223 に答える
0

Java コンパイラは mac/win/linux に移植されており、有効でおそらく同等のバイナリを生成します。これは、内部にタイムスタンプを含めることができるためです。.class 形式はユニバーサルであるため、どの VM ポートでも正しく読み取ることができます。

于 2012-10-23T20:27:32.230 に答える
0

答えは、それによって異なります。

間違いを犯した場合、ソースコードはシステムに依存しません。

一例:

システム依存の文字エンコーディングで Sourcefile を記述します。そのファイルを、chrackter エンコーディングが存在しない別のシステムに転送すると、ファイルをコンパイルできない可能性があります。これはコンパイラの問題です。

もう一つの例:

システム依存のアドオンでカスタマイズされた JVM がある場合、このクラスを使用するプログラムは他のシステムでは使用できなくなる可能性があります。これはよりクラスの問題です。

正しいエンコードを使用し、com.sun.* や com.apple.* などのプラットフォームに依存するパッケージをインポートしない場合、*.java と *.class は独立しています。

于 2012-10-23T20:30:38.970 に答える