入門者のためのJava用語解説!横文字・専門用語の壁を乗り越えよう

Javaの学習を始めたけど、専門用語が多い・・・
用語の解説を読んでいたら、解説の中に知らない用語が出てくる・・・
意味を調べるだけで時間が過ぎていく・・・

こんにちは。Javaを使い始めて8年、テックライター兼エンジニアの平山です。

プログラミングの学習を始めると、多くの人が引っかかるポイントの一つに専門用語の多さがあるのではないでしょうか?

コンパイルを調べたら、中間言語、仮想マシーンなど新しい謎ワードが出てきて、それを更に調べて・・・
と、用語の検索沼にハマったことがある人は少なくないでしょう。

特にJavaは歴史が長いせいか専門用語が多く、初心者の心を折るケースが多いように感じます。

ただ、専門用語がわからなくて挫折してしまうのはあまりにももったいない。

そこで、この記事ではJavaを学習し始めた人が出会うであろう専門用語を限界まで噛み砕いて説明していきます。噛み砕いているとはいえ、しっかりと背景にあるものは説明しますので、読んでは見たけど結局よくわからなかった、ということも少ないはず。

早速行ってみましょう!

目次

ハードウェア・OS関連用語

まずはJavaを支えるハードウェアやOS周辺の用語をみていきます。

ちなみに、Javaそのものについては以下の記事で詳しく解説していますので、興味のある方は是非ご覧ください。

パス・環境変数

初心者がJavaをインストールする際に一番に引っかかるのが、パス通し・環境変数の設定でしょう。普通にパソコンをいじっているだけでは、なかなか出会うことのない部分ですからね。

これらの作業はなにをやっているのかというと、ターミナル・コマンドプロンプトから、Javaを簡単に実行するための設定をしています。

以下Windowsを例に考えてみましょう。

Windowsでプログラムを実行したい場合、そのプログラムのEXEファイルがあるフォルダまで移動して、EXEファイルをダブルクリックする、という方法がありますね。

C:Program Fileshogehoge にあるhoge.exeを実行するには、C:Program Fileshogehoge のフォルダを開いて、hoge.exeをダブルクリックすればいいわけです。

コマンドプロンプトでプログラムを実行する場合も同じで、コマンドプロンプトに以下のコマンドを打ち込めばhoge.exeを実行することができます。

"C:Program Fileshogehogehoge.exe"

これと同じように、Javaも実行ファイルがおいてある場所までのルート(これをファイルパスといいます)を毎回入力して実行してもいいわけです。

ですが、毎回C:Program Files~と書くのは非常に面倒ですよね。java、と入力したときはパソコンがC:Program Files~においてあるjava.exeだな、と解釈してくれるようになると非常に便利でしょう。

それを実現する仕組みが環境変数なんです。

環境変数に実行ファイルの場所を記入することで、次回以降はいちいちファイルパスを書かないでもファイルを実行できるようになるわけです。

なお、この環境変数にパスを書き加える作業をパスを通すといいます。あわせて覚えておくといいですね。ちなみにMacやLinuxのターミナルでも方法は異なりますが、同じ理屈でパスを通す事ができます。

ターミナルやコマンドプロンプトで、javac hogehoge.javaと入れるだけでコンパイルができるのはパスが通っているおかげなわけです。

具体的なパスの通し方はこちらの記事をご覧ください。

プラットフォーム非依存

Javaの特徴を説明するときに出てくるのがこちらの用語です。

まずはプラットフォームは何かというところから。プラットフォームはザックリいえばOSのことを指していると思っていただいてOKです。

要するにパソコンでいえば、WindowsやmacOS、Linux、UNIXなど。スマホで言えばAndroid、iOSなど。

プラットフォームが異なると、同じプログラムを動かすことは基本的にできません。

最近はクロスプラットフォームという、OSを問わずに同じアプリがリリースされるケースも多いのものです。ですが、複数OSで動作する、ということはOS間の差異を吸収する仕組みを使っているか、OSごとに別のプログラムを使って同じように動かしているかのどちらかになります。

こうしたプラットフォーム間の差異を吸収し、どんなプラットフォームでも動くことを目指したのがJavaという言語なのです。

プラットフォームに依存しないから、プラットフォーム非依存というわけですね。

コンパイル

PythonやRubyなどの言語経験者には馴染みのないものがコンパイルです。

プログラムは人間が読み書きできるソースコードの形でまず作られます。このソースコードをコンピュータが実行可能な形式にする行為をコンパイルといいます。このコンピュータが実行可能な形式を機械語(バイナリコード)と呼びます。

人間がわかる言語(ソースコード)からコンピュータがわかる言語(機械語)に翻訳すると例えられますね。

先に紹介したPythonやRubyはコード実行時に逐次コードを翻訳していきます。こちらはインタプリタ形式と呼ばれます。

先に機械語に翻訳しておくか、実際必要になったときに翻訳するかの違い、と考えておけばいいでしょう。

Javaの場合、実は機械語ではなく、次で説明する中間言語を生成するための作業です。

中間言語とJava仮想マシン

上で解説したように、コンパイルは一般的にソースコードを機械語に翻訳する作業です。

ですが、機械語に翻訳するためには、プラットフォームに合わせた機械語にしなければなりません。Windowsが実行できるアプリとiOSが実行できるアプリは基本的に異なりますよね。

細かい話をしだすと、CPUの命令セットアーキテクチャやらローダーやABIなど複雑な魔境に踏み込まなくてはいけないのですが、そこらへんはざっくり無視しましょう。

何がいいたいかというと、Windows向けにコンパイルされたものはWindowsでしか実行できないし、iOS向けにコンパイルされたものはiOSでしか動かせない、ということです。

ところがこれは、Javaの理念であるプラットフォーム非依存に反してしまいますね。

では、この問題をどう解決するかというと、プラットフォームによらない、Javaのプログラムを動かすことのできる仮想のマシン(コンピュータ)をプラットフォーム上で動作させて、その仮想マシン上でJavaのプログラムを実行する、という形で解決しています。

この仮想のマシンをJava仮想マシン(Java Virtual Machine/JVM)といい、JVMが実行できるコードを中間言語といいます。

以上の特性だけだったらJavaの内側で完結する話なのですが、最近おもしろいことにJVM上で動くJava以外の言語、というものが作られてきました。具体的にはKotlinとScalaですね。Kotlinについては次の章でも紹介していますので、興味がありましたら是非ご覧ください。

中間言語とJava仮想マシンについて、より深い説明はこちらの記事をどうぞ。

Javaでよく出てくる用語

この章ではJavaに関連してよく見かける用語を解説していきます。

JDK

JDKはJavaの環境を構築する際、ほとんどの場合でインストールされるものです。

ただ、教科書に従ってインストールしたはいいけど、今ひとつこれが何なのかよくわからない・・・というケースも結構見かけます。

JDKはJava Development Kitの略で、直訳するとJava開発キットとなります。つまり、Javaを開発するためのいろいろなキットが含まれているものがJDKなんですね。

JDKと似た感じのものにJREがありますが、こちらはJavaのアプリケーションを実行するためのもの。Javaを開発する側にとってはひとまずあまり関係の無いものです。

JDKとJREの違いについてはこちらの記事が詳しいです。

なお、JDKは様々な事情によって、発行元が大きく分けて2つあります。OracleのJavaJDKとOpenJDKですね。

2018年より前はJDKといえばOracleの頒布しているJavaJDKのことを指すことがほとんどでした。ところが、2019年1月から、Oracle JDKは有償カスタマーのみにすべてのサポートが利用できる形に移行しました。

そのため、企業でJavaを使い続ける場合、Oracleにお金を払って有償のサポートを得るか、無料のJDKを使うかの選択が必要になったのです。

2019年の2月に、個人ユーザーは2020年末まで無償でJava8を使えることが発表されたりと状況はかなり流動的です。

初心者にとっては面倒くさい状況ですが、とりあえず、OracleのJDK(Java8)が20年末まで無償で使えるので、そちらで学習を進めるのが無難と言えるでしょうか。

J2SE/J2EE/Java SE/Java EE

似たような名前なんだけど、微妙に違う。初心者を混乱させるJavaの悪い点の一つがこの表記かもしれません。歴史が長いぶんだけ、様々な派生バージョンが生まれてしまうのは致し方ないことかもしれませんが・・・

さて、用語の解説ですが、この項目のタイトルになっているものは全部Javaのエディションを表す用語です。Window10 にもHome、Proなどがありますが、あのようなものと捉えていただいて構いません。左2つのJ2から始まるのが古いバージョンで、現在は使われていません。右2つのJavaから始まるのが新しいバージョンです。

Javaはバージョン5頃までJava 2という表記をしていました。それを略して、J2〇〇というエディションがあったわけです。

2019年現在、この表記は廃止され、Java 〇〇という表記で統一されました。

SEはスタンダード・エディション(Java Platform, Standard Edition)の略で、名前の通りJavaの基本的な要素をまとめてあるエディションです。とりあえずこれがあればJavaが使える、というイメージですね。

一方のEEはエンタープライズ・エディション(Java Platform, Enterprise Edition)の略で、エンタープライズは企業用という意味合いが込められています。こちらにはサーバサイドの拡張が図られており、SE + Web開発機能というイメージのエディションになっています。

企業内で使われるシステムや商用システムといった、大規模な現場でJavaを扱う際はEEに出会うことも多いでしょう。

SEとEEの違いについてはこちらで詳しく説明していますので、気になる方はご覧ください。

Kotlin

Javaを学習し始めると、ちょこちょこと目にするようになるのがこちらのKotlin(コトリン)。

名前がなんとなく可愛らしいですが、これ、Javaの兄弟のようなプログラミング言語なんです。

どこらへんが兄弟かというと、KotlinのコードはJVM上で動かすことができるんです。JVM上で動くため、非常に多くのプラットフォームで使うことができ、Javaよりも先進的な機能を盛り込み、速度もJavaとほとんど変わらないといい事ずくめ。

また、Kotlinを開発している企業はJetBrainsというチェコの会社なのですが、ここは知る人ぞ知るIDE、IntelliJ IDEAやAndroid Studioの開発元でもあります。

このため、Androidの開発とは非常に相性がよく、昨今注目の言語です。Androidでアプリ開発をしたい方は要チェックですね。

Eclipse

Javaの開発といえばEclipse、といっていいほどに業界を席巻している統合開発環境がEclipse(エクリプス)です。

最近は上で紹介したJetBrainsのIntelliJ IDEAも勢いを増していますが、まだまだ今までに築き上げた地位は崩れることがないでしょう。

統合開発環境(Integrated Development Environment/IDE)とはコードを編集するためのエディタに加えて、コードを実行するためのコンパイラや環境、デバッグ機能などをひとまとめにしたツールです。

テキストエディタでJavaソースコードをかいて、ターミナルでコンパイル、実行をした経験のある方ならわかると思いますが、この工程って結構面倒なんです。

学習段階ならまだどうにかなりますが、実際になにか開発しようと思ったら、正直やってられません。

この開発に関わる手間を大幅に軽減してくれるのがIDEであり、JavaのIDEの代表選手がEclipse、というわけです。

Eclipseは採用している企業も多く、開発現場では普通に使えることが要求されます。また、慣れるまでに結構学習コストがかかりますので、本気でJavaを習得するつもりなら、最初からEclipseをつかって学習を進めるのがいいでしょうね。

Eclipseの基本的な使い方についてはこちらの記事をご覧ください。

オブジェクト指向プログラミング

Javaについて調べていると、ほぼ必ず遭遇する表現が、Javaはオブジェクト指向プログラミング言語である、という表現です。

で、オブジェクト指向が気になって調べてみると、継承だ、カプセル化だ、ポリモーフィズムだとよくわからない用語のオンパレードで、最終的になんだかよくわからなかった、というのがよくあるパターンですね。

正直言って、プログラミングをこれから学び始めようという人に、オブジェクト指向を完全に理解してもらうのは不可能といっていいレベルです。オブジェクト指向プログラミングはプログラミングに対する考え方であり、プログラミングに対する実体験が伴わないと、おそらく理解できないからです。

一応初心者むけにオブジェクト指向をわかりやすく解説した記事もあります。

ですが、まずはいろいろとプログラムを組んでみて、ある程度スキルが上がった段階でオブジェクト指向を本格的な本で学んでみることを個人的にはオススメします。本当に初心者の方は気にせず基本的な文法習得とプログラミングの実習をがんばりましょう。オブジェクト指向を使わなければ作れないプログラム、というのは基本的に存在しませんので。

組み込みシステム

組込みシステムはJavaで盛んな分野の一つです。組込みシステムとは古くはガラケーなどの携帯電話、DVD・BDプレイヤー、カーナビなどの車載機器、複合機といったOA機器、産業機械など、さまざまな機械に組み込まれるために作られたシステムです。

Javaを組込みシステムに使うメリットはなんといっても、プラットフォーム非依存からくる移植性の高さでしょう。

例としてカーナビについて考えてみると、カーナビは見た目や操作性といったユーザーインターフェイス(UI)の部分は一度組んでしまえばそうそう変更する必要は無いでしょう。

バージョンごとにコロコロと操作方法が変わった日には、ユーザーから反感を買うことは必至でしょうから。

一方で、内部のハードウェアはバージョンやランクに応じて変えていきたいのがメーカー側の希望のはずです。より安い部品で同じ性能が出せるなら、交換したいはずですよね。

そこで、Javaの移植性の高さが効いてきます。特定のハードに依存しないJavaのソフトウェアは、JVMが動く部品上であれば問題なく移植できるので、ハードウェアの変更に非常に強いわけです。

このような点から、昨今の家電にはJavaが組み込まれていることが多いようです。

商用システム

こちらもJavaの得意分野で、求人的にも一番需要の多いゾーンでしょう。Javaは言語としての堅牢性、ユーザー数の多さ、プラットフォーム非依存などの特性から、特に商用分野での利用が非常に多いです。

たとえば、みずほ銀行がシステム言語にJavaを採用した話は有名です。みずほ銀行に限らず、楽天銀行や三菱UFJ銀行などの銀行系、手堅い業務が必要な官公庁、技術者の多さからとりあえず採用されるようなケースも含めて、非常に多くのシステムでJavaは使われています。

使われている分野が広いため、人は常時足りていないようです。エンジニア不足で求人に将来性を感じている方にとっては非常に魅力的なポイントと言えるでしょう。

基本文法について

Javaの基本文法については既存記事で様々な形で紹介されていますのでこちらを参照ください。

変数

演算子

条件分岐


【Java入門】switch-case文の使い方総まとめ
更新日:2024年4月29日

【Java入門】switch-case文の使い方
更新日:2024年4月29日

ループ


【3分でわかるJava】while文とdo-while文の使い方
更新日:2024年4月29日

【Java入門】for文、拡張for文、forEachの使い方
更新日:2024年4月29日

配列

コメント

文字コード

まとめ

いかがでしたか?今回はJavaに関連する用語を様々な角度から解説してきました。

Javaはプロユースな側面が結構強く、現場で使っている人向け、わかってる人向けの情報が好まれる傾向があります。そのため、まったくの初心者むけに用語を解説する機会が意外と少なかったりします。

今回の記事がJavaでプログラミングの世界に入門した方の足がかりと慣れば嬉しいです。

お相手はJavaが使えればどんな言語でもいける、が信条の平山でした。

この記事を書いた人

フリーのエンジニア・ライター。
プログラミング、ライティング、マーケティングなど、あらゆる手段を駆使して、
ハッピーなフルリモートワーカーを目指し中。

最近興味がある分野は深層強化学習。
積みゲー、積ん読がどんどん増加しているのがここ数年の悩み。
実は侍エンジニア塾の卒業生だったりします。

目次