Javaとは

みるくあいらんどっ! > ドキュメント > Java > じっくり学ぶ Java講座 [初心者向け・入門]


Javaとは

Javaは、プログラミング言語の一種です。プログラミング言語は世の中に数多くありますが、例えば、C言語や Javascript、Visual Basic、Perl、Ruby、FORTRANなどが存在します。

なお、Javaという言葉は、広い意味では、Javaのプログラムを動かすための環境(JRE)や開発環境(JDK)を含むこともあります。

低級言語と高級言語

プログラミング言語は、大きく分けると低級言語高級言語に分けられます。Javaは高級言語に属します。

プログラムは最終的に CPUというハードウェアよって実行されます。そのハードウェアが直接解釈できる言語が低級言語と呼ばれ、具体的は機械語があります。また、アセンブラも事実上、低級言語に括られます。

高級言語は、そのハードウェアが直接解釈できないものを言います。機械語とアセンブラ以外のプログラミング言語はほぼすべて高級言語です。

インタプリタ系言語とコンパイラ系言語

プログラミング言語のうち、高級言語は、その記述内容をハードウェアが直接解釈できない、と書きました。とは言っても、最終的にハードウェアに解釈させる必要があります。そのための方法は 2つあります。Javaは…コンパイラ系の言語です。

インタプリタ系言語は、記述されたプログラムをその場その場で翻訳しながら処理を進めていきます。BASICや perl、ruby、Javascriptなどがこれに該当します。翻訳しながら実際の処理を実行していくということで、一般的にはコンパイラ系言語に比べて処理速度が遅くなる、と言われています。

コンパイラ系言語は、記述されたプログラムをまず実行ファイル形式に翻訳(コンパイル)します。その後、(元のプログラムではなく)実行ファイル形式のプログラムのほうを直接実行するという方式を取ります。この方式の場合、その場その場で翻訳する必要がありませんが、都度コンパイルをする…という必要があります。C言語などがこれに該当します。

Javaの事情と Java仮想マシン

先の項で、Javaはコンパイラ系の言語と記述したものの、事情は複雑です。

というのも、Javaでは、ソースコード(記述されたプログラムのこと)(拡張子は.java)を実行ファイル形式に翻訳(コンパイル)するものの、翻訳後の実行ファイル(拡張子は.class)をそのまま実行することができません。

翻訳後の実行ファイルは、Java仮想マシンという架空のハードウェアで実行可能なファイルとなっています。これを Windowsの環境なり Macの環境なりで実行させるためには、事前にJRE(Java Runtime Edition)というエミュレータをインストールする必要があります。

まとめれば、Javaでは、記述されたプログラム(.java)を実行ファイル(.class)にコンパイルし、その実行ファイルをエミュレータ上で動作させる(エミュレータはインタプリタ的である)、ということになります。

Java仮想マシンというエミュレータ

今どきの家庭用テレビゲーム機では、旧世代のテレビゲーム機のソフトウェアがネットワーク販売されていることがあります。例えば、Wiiではファミコンやメガドライブのソフトウェアを購入・ダウンロードして遊ぶことができます。

さて、ファミコンで使われていた CPUやメガドライブで使われていた CPUが Wiiに物理的に搭載されているかというと、否です。かといって、ファミコンやメガドライブのソフトウェアを 1本 1本、Wiiに移植しているという訳でもありません。実際には、Wiiに、ファミコンエミュレータ(Wii用)やメガドライブエミュレータ(Wii用)がインストールされるのだと思います。それによって、ファミコンやメガドライブのソフトが、Wii上で擬似的に動くようになっている…ということになります。

もし、著作権や商業上などの問題がないと仮定して、PS3に、ファミコンエミュレータ(PS3用)、メガドライブエミュレータ(PS3用)などを開発することができるならば、PS3でもファミコンやメガドライブのソフトが擬似的に動くはずです。XBOX360でも同じようなことをすれば、やはり擬似的に動くはずです。Javaの実行ファイル(.class)も、同じように Java仮想マシンというエミュレータ上で動作します。

さて、Java仮想マシンの「仮想」という言葉について。もし、仮にファミコンというハードウェアが世の中に存在しなかったとします。でも、ファミコン用エミュレータがあるならば Wiiでそのソフトを遊べる…ということは、ファミコンというハードウェアが必ずしも実在する必要はない…ということになります。そうう訳で、Javaの実行ファイルをそのまま実行できるハードウェアは世の中に存在しない…ただ、エミュレータの上でのみ存在する、ということで「仮想」という言葉がつけられています。

仮想環境の利点と欠点

仮想環境の利点

エミュレータ上で動作させることは、いろいろな利点があります。

いろいろな環境で動くというのがあります。Windows、Mac、Linuxそれぞれ OSやハードウェアが異なったとしても、それぞれで動作するエミュレータ(JRE)さえインストールすれば、Windowsでも Macでも Linuxでも同じように動作する、ということになります。

安全ということもあります。所詮、エミュレータ上で動いているので、仮に実行ファイルが暴走したとしても、エミュレータソフトウェアを強制終了すれば終了できます。パソコンが暴走してフリーズするようなことは、基本的には起こりません。

基本的には文字コードを気にしなくて済む、ということもあります。Windowsでは文字コードとして ShiftJISが、少し昔の Linuxでは文字コードとして EUCが使われているなど、ハードウェアや OSによって文字コードが異なっていました。ちょっと昔のガラケーで、ドコモの絵文字メールを AUに送信すると文字化けしたり違う絵文字になってしまうことがあったように、文字コードの問題はなかなか面倒です。Javaでは「仮想マシンは Unicodeという文字コードを基本として動作する」と決められているので、文字コードの問題をある程度、回避することができます。

仮想環境の欠点

エミュレータ上で動作させることは、いろいろな欠点もあります。

まず処理が重たいことです。実行ファイルをそのまま実行するのではなく、エミュレータを介して実行していくので CPUの負担がかかります。そのハードウェアで理論的に実現可能な最高速度を出す、ということはなかなか難しいことになります。

実行させるハードウェアの独自性が発揮できないこともあります。例えば、Wiiでファミコンエミュレータを使ってファミコンソフトを遊んでも、4人同時プレイはできません。そもそも、ファミコンは 2人プレイまでしか想定していない。このように、Java仮想マシンでは取り決められていないために、そのハードウェア上に搭載されている特殊な機能を使えない、ということは起こります。

Androidについて補足

Androidアプリケーションのプログラム開発は、主にJava言語で記述します。ただ、上に述べた Java仮想マシンとは異なった、Dalvik仮想マシンで動作させるなど、Android特有のいろいろな事情があります。

このウェブサイトで製作するプログラムは、Android上では動作しません。Androidの Javaプログラムには Androidなりの枠組みがあるということを留意していただければと思います。

最終更新: 2013/01/27 , 公開: 2013/01/26
▲top