Java Virtual Machine(JVM)とクロスプラットフォームの原則<BR /> Javaはクロスプラットフォーム機能を持っていることを学んだと思います。修正。
では、クロスプラットフォームはどのように実装されていますか?これには、Java Virtual Machine(JVM)について話すことが含まれます。
JVMはソフトウェアでもあり、異なるプラットフォームにはバージョンが異なります。私たちが記述するJavaソースコードは、コンパイル後にByteCodeファイルと呼ばれる.classファイルを生成します。 Java Virtual Machineは、バイトコードファイルを特定のプラットフォームの下でマシンコードに翻訳してから実行する責任があります。言い換えれば、対応するJVMが異なるプラットフォームにインストールされている限り、ByteCodeファイルを実行して、書いたJavaプログラムを実行できます。
このプロセス中、私たちが書いたJavaプログラムは、JVMの「中間層」だけで異なるプラットフォームで実行できませんでした。
JVMは、「ブリッジ」であり、「ミドルウェア」は、クロスプラットフォームの実装の鍵です。最初にBytecodeファイルにコンパイルされ、JVMはバイトコードファイルをマシン言語に変換し、Javaプログラムの実行を実現します。目的。
注:コンピレーションの結果は、マシンコードを生成することではなく、バイトコードを直接実行することはできません。異なるプラットフォームでのコンパイルと生成によって生成されるバイトコードは同じですが、JVMによって翻訳されるマシンコードは異なります。
したがって、コンパイルの結果はマシンコードではなく、実行前にJVMによって再度翻訳する必要があるため、Javaプログラムの実行にはJVMサポートが必要です。 Javaプログラムを実行可能ファイル(.exeなど)にパッケージ化したとしても、JVMサポートが必要です。
注:JVMではなく、クロスプラットフォームJavaプログラム。 JVMは、C/C ++で開発されており、JVMの異なるバージョンをコンパイルしています。
JVMの実行効率について
Javaの発売の数年間、人々は異なる意見を持っていました。
ただし、JVMには、最も頻繁に使用されるbytecodeをインスタントコンピレーションと呼ばれるプロセスであるマシンコードに翻訳および保存するオプションがあります。この方法は実際に非常に効果的であり、Microsoftの.NETプラットフォームで仮想マシンを使用することにつながりました。
タイムリーなコンパイラは現在非常に優れており、従来のコンパイラの競合他社にさえなり、場合によってはJVMがランタイム情報を監視できるため、従来のコンパイラを上回ります。たとえば、インスタントコンパイラは頻繁に使用されるコードを監視および最適化し、関数呼び出し(つまり、「埋め込まれた」)を排除できます。
ただし、JavaにはC/C ++にはない追加のオーバーヘッドがあり、重要なアプリケーションは遅くなります。たとえば、Javaはプラットフォームに依存しない描画方法を採用しており、GUIプログラム(クライアントプログラム)の実行も時間がかかります。
クライアント市場の失敗
JavaのGUIライブラリは優れておらず、インターフェイスは友好的ではなく、ほとんどのユーザーはそれに慣れていません。
さらに受け入れられないのは、Microsoftが独自の興味を分割した後、WindowsがJVMをインストールする前に、JVMをインストールして、通常のユーザーにソフトウェアをインストールする必要があることです。
JVMをプログラムに統合したり、自動的にインストールしてセットアップしたり、ユーザーの介入を許可したりすることはできますが、プログラムよりもはるかに大きいJVMを使用したいですか?これを行うには、ソフトウェアがこれを行うことができます。ディスクスペースは無駄になりますか?
したがって、Javaで開発されたクライアントのほとんどが企業の内部従業員によって使用されている場合、市場で直接発売されるクライアントプログラムはほとんどありません。クライアント開発に従事したい場合は、C/C ++と.NETを学習することをお勧めします。これは、ウィンドウクライアント開発に大きな利点があります。
さまざまな理由は、市場に紹介されるのに不利であり、通常のユーザーに受け入れられています。しかし、繰り返しになりますが、クライアント開発はJavaの本来の意図ではありませんでしたが、元々はインターネットの台頭とともに急速に成長し、Web開発の強さを示しました。
Javaクラスとオブジェクトの概念
Javaは、オブジェクト指向のプログラミング言語です。最初にクラスとオブジェクトの概念を理解する必要があります。
Javaのクラスは、C言語の構造のアップグレードバージョンと見なすことができます。構造は、異なるメンバー(変数)を含む可能性のある構築されたデータ型であり、各メンバーのデータ型は構造を介して定義でき、各変数は同じプロパティを持っています。例えば:
#include <stdio.h> /操作構造のメンバー。名前、stu1.age、stu1.score);}
実行結果:
Xiao Mingの年齢は15歳で、彼の成績は92.500000です
Javaのクラスは、データ型の構築でもありますが、クラスのメンバーは変数だけでなく、「オブジェクト」と呼ばれる特定の名前もあります。例えば:
Public Class Demo {Public void Main(String [] Args){//クラスのクラスを介してクラスを定義します含まれる関数void say(){system.out.println(name + "age is" + age + "、スコアは" +スコア)。学生stu1 =新しいキーワードを使用する必要があります。 );実行結果:
Xiao Mingの年齢は15歳で、彼の成績は92.5です
C言語では、構造変数の定義を構造名で完了し、メモリ空間を割り当てることができます。スペース。
アナロジーは図面と比較でき、オブジェクトは部品と比較でき、図面は、それらが引き受ける部品のパラメーターを説明します。
Javaでは、新しいキーワードを使用して、クラスを介してオブジェクトを作成できます。つまり、このプロセスはクラスのインスタンス化と呼ばれるため、オブジェクトはクラスのインスタンスとも呼ばれます。
注:クラスは、説明を再生し、メモリスペースを占有していない図面であり、メモリスペースを占有する場所が必要です。
クラスに含まれる変数と関数には、変数が属性と呼ばれます(通常はメンバー変数とも呼ばれます)。
オブジェクト指向プログラミング(OOP)
クラスは、Java、C ++、C#、PHPなどの多くのプログラミング言語をクラスで作成できます。クラスは、c言語の若い世代がC言語の欠点を見て、それらを改善しようとし、構造の概念を継承し、プログラマーが大規模および中程度の開発または拡張を可能にするために、構造のアップグレードされたバージョンと見なすことができます。 - サイズのプロジェクト。
Java、C ++、その他の言語はクラスやオブジェクトをサポートするため、これらの言語でプログラムを作成することもオブジェクト指向プログラミングとも呼ばれ、これらの言語はオブジェクト指向のプログラミング言語とも呼ばれます。 C言語はクラスとオブジェクトの概念をサポートしていないため、プロセス指向のプログラミング言語と呼ばれます。
実際、オブジェクト指向は単なるプロセス指向のアップグレードです。
C言語では、特定の関数を完了する再使用されたコードブロックは関数として定義でき、関数のクラスを持つ関数はヘッダーファイルで宣言され、異なるタイプの関数が異なるヘッダーファイルで宣言され、より良い管理を実行することができます。書くのが簡単です。
Javaでは、特定の関数を完了するコードブロックはメソッドとして定義でき、同様の関数を持つメソッドはクラス、つまりソースファイル(ソースファイルに1つのパブリッククラスのみを含むことができるため)で定義できます。複数のソースファイルは、パッケージと呼ばれる特定の名前があるフォルダーに配置できます。
上記はC ++ですが、Javaは次のとおりです。
オブジェクト指向のプログラミングは、ソフトウェアの実行効率においてまったく利点がありません。