多くの人が、Javaはシステムに依存しないプログラミング言語であると言っていました。同じ.classファイルは、適切なOS JVMを使用して任意のOSで実行(インターセプト)できます。私の質問-.javaファイル自体もシステムに依存しませんか?つまり、あるOSで書き込まれた(そして正しくコンパイルできる).javaファイルは、別のOSで正しくコンパイルできますか?そうでない場合、これを示す例はありますか?
ありがとう!
多くの人が、Javaはシステムに依存しないプログラミング言語であると言っていました。同じ.classファイルは、適切なOS JVMを使用して任意のOSで実行(インターセプト)できます。私の質問-.javaファイル自体もシステムに依存しませんか?つまり、あるOSで書き込まれた(そして正しくコンパイルできる).javaファイルは、別のOSで正しくコンパイルできますか?そうでない場合、これを示す例はありますか?
ありがとう!
ファイルが API 構文と正しいバージョンに従っている限り、.java
コーディングされている場所に関係なく、任意のオペレーティング システムでコンパイルできます。
短い答え、はい。長い答え、ええええええ。
jedwards
Android 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+ を同時に使用していました。しかし、コンパイルに関する問題はありません。
Java コンパイラは mac/win/linux に移植されており、有効でおそらく同等のバイナリを生成します。これは、内部にタイムスタンプを含めることができるためです。.class 形式はユニバーサルであるため、どの VM ポートでも正しく読み取ることができます。
答えは、それによって異なります。
間違いを犯した場合、ソースコードはシステムに依存しません。
一例:
システム依存の文字エンコーディングで Sourcefile を記述します。そのファイルを、chrackter エンコーディングが存在しない別のシステムに転送すると、ファイルをコンパイルできない可能性があります。これはコンパイラの問題です。
もう一つの例:
システム依存のアドオンでカスタマイズされた JVM がある場合、このクラスを使用するプログラムは他のシステムでは使用できなくなる可能性があります。これはよりクラスの問題です。
正しいエンコードを使用し、com.sun.* や com.apple.* などのプラットフォームに依存するパッケージをインポートしない場合、*.java と *.class は独立しています。