対象読者
Javaを勉強したいと思っている人、勉強しはじめの方へ。
私はJavaを学習中です。学んだことを自分の知識とするためアウトプットとしてqiitaに記事を投稿します。
Javaでできること
スマホアプリや各種Webサービス、ゲーム、カーナビなど。
Javaが使われている代表的なサービスは、
・Twitter
・Evernote
・楽天
・みずほ銀行のシステム
・マインクラフト
等がある。
大規模開発に適している
Javaはオブジェクト指向が確立されている言語。オブジェクト指向とは、部品(オブジェクト)を分割して組み立てていくというプログラミングの志向である。
Javaを使えば、機能ごとにパーツ分けし、それを組み合わせて複数人で大規模のシステムを作ることができる。
処理速度が速い
インタプリタ
コンピュータでプログラムを実行する方法として、インタプリタとコンパイラがある。
コンピュータは「1」と「0」による二進数の計算しかできない。コンピュータが解釈できるように二進数で書かれた命令を「機械語」という。
インタプリタはソースコードを読み込んで、それを機械語に変換してコンピュータに命令する。実行時に都度を変換するため処理に時間がかかる。また実行時にコンパイラ(変換する仕組み)が必要になる。
インタプリタ言語として、Javascript、PHP、Ruby等が挙げられる。
コンパイラ
コンパイラはソースコードを事前に機械語へ一括変換してコンピュータに命令する。実行時に改めて変換する必要がないため、プログラムを高速で処理できる。また、コンパイラも不要のため単独でプログラムを実行できる。コンパイラ言語として、Java、C、C++、Objective-C、C#等が挙げられる。
インタプリタとコンパイラのいいとこどりのJava
Javaはコンパイラ言語だが、インタプリタのメリットも持つ言語である。Javaはソースコードを事前に中間的なコードであるバイトコードに変換する。このバイトコードをJVM(Java Virtual Machine)という仮想マシンで動かすと、仮想マシンがバイトコードを機械語に変換してコンピュータに命令することができる。このJVMはいわばコンピュータとJavaとを取り持つ通訳者のようなもので、JVMがあればJavaはどんなコンピュータ上でも動く。
インタプリタは「プログラム実行時にソースコードを機械語に変換する仕組み」があればどのプラットフォームでも動くが、実行速度が遅い。コンパイラは異なるプラットフォームで動かす場合には、ソースコードをプラットフォームに合わせて変更して再度コンパイルしなおす作業が必要になる。これらのデメリットをなくすためにJavaは仮想マシンでバイトコードを動かすという方法をとっている。
どんな環境でも使える
Javaは先述した仮想マシンであるJVMや、様々な実行・開発委に必要なライブラリを持つ「Javaプラットフォーム」上で動作するため、OSやハードウェアに依存することがない。MacでもWindowsでもLinuxでも使用できる。
ガベージコレクションを備えている
プログラムが実行される際は下記のプロセスを踏む。
- プログラム処理に必要な情報をメモリ上に読みこむ
- 読みこんだ情報をもとに、処理を実行する
読み込まれた情報は処理をした後は不要になる。不要になった情報をそのままにしておくとメモリに溜まっていき、プログラムの処理速度が遅くなる。
ガベージコレクションは使用後不要になった情報をメモリ上から捨ててくれる機能である。
ガベージコレクションはプログラマがメモリ管理のためにコードを書かなくても自動で情報の要不要を判断し、処理してくれる。
Javaはデフォルトでこのガベージコレクションを備えている。