Javaは、世界で広く使われているプログラミング言語です。
日本でも高い人気と需要がありますが、プログラミング初心者の中には次のように思う人もいるでしょう。
「Javaって具体的にどんな言語なの?」
「Javaで何ができるの?」
「Javaのコードってどう書くの?」
そんな疑問を解決するために、今回はJavaの特徴や基本構文などを入門者向けに解説します!
Javaへの理解を深めたい人やJavaを習得する予定の人は、ぜひ参考にしてみてください。
Javaとは
Javaとは、米国のサン・マイクロシステムズ社(現オラクル社)のジェームズ・ゴスリン氏を中心としたチームによって、1995年に開発されたプログラミング言語です。
C言語をベースに開発されており、構文スタイルはC++と似ています。
また、Googleが主要なサービスやシステム開発によく採用している、「三大言語(Java、C++、Python)」の一つとしても有名です。
開発時は「Oak(オーク)」と呼ばれていましたが、その名が他の会社で登録商標されていたので、「Java」に変えられました。
Javaの由来はインドネシアのジャワ島で採れるコーヒー豆「Java coffee」から。理由は、「開発チームがコーヒー好きだった」「開発者たちが集まっていたコーヒーショップのメニュー」などと言われています。
開発のきっかけは、1991年にサン・マイクロシステムズ社が、家電製品や携帯端末向けの組み込みソフトウェア開発言語を開発する「Greenプロジェクト」を開始したからです。このプロジェクトにより、Javaの前身となるOakが生まれました。
その後アップデートを重ね、現在ではアプリ開発や業務システム開発など、幅広い分野で活用されています。
Javaの特徴
公開から30年がたつ今も、根強い人気と圧倒的なシェア率を誇るJava。
その理由は以下5つの特徴にあります。一つずつ見ていきましょう。
特徴①オブジェクト指向
オブジェクト指向言語であるJavaは、コードの再利用性と保守性が高いです。
オブジェクト指向とは、プログラムの機能や役割を区別し、それぞれを「オブジェクト(小さな部品)」と捉え、各部品が互いに連携して機能するよう、プログラムを構成・開発する考え方。
再利用できるオブジェクトを組み合わせることで、一からコードを記述する必要がなく、品の高いプログラムを柔軟かつ効率的に開発できます!
単語の意味
再利用性・・・一度書いたコードを別の場所で、そのままor少し変更して利用できる性質
保守性・・・修正、機能追加、仕様変更などが簡単にできる状態
特徴②プラットフォームに依存しない
Javaはプラットフォームに依存しないプログラミング言語です。
異なる環境下で同じプログラムを動作させる場合、それぞれの環境に応じてプログラムを作り直す必要があります。
一方Javaでコーディングすれば、WindowsやMacなどのOSを問わず、同じプログラムを実行することが可能!つまり、わざわざ別のOS用にプログラムを作り直す手間が省けるわけです。
ちなみに、Javaがプラットフォームに依存せずプログラムを実行できるのは、Java仮想マシン(JVM)のおかげ。
Java仮想マシン(JVM)とは、各OSに合わせて擬似的に作り出された実行環境のことで、プラットフォームの違いをカバーしてくれます。
特徴③処理速度が速い
Javaはコンパイル型言語のため、プログラミング言語の中でも処理がスピーディーです。
そもそもプログラミング言語には、実行前にコンパイルを必要とする言語と、必要としない(実行時に解釈される)言語があります。
コンパイルとは、プログラム言語で書かれたソースコード(命令や指令)をコンピューターが理解しやすいように機械語に変換する作業です。
そして、事前にプログラム全体を変換しておく言語を「コンパイル型言語」、プログラム実行時にソースコードを1行ずつ変換する言語を「インタプリタ型言語」と呼びます。
つまり、コンパイル型言語であるJavaでは、あらかじめコンパイル済みのファイルを用意してからプログラムを実行するため、実行時のコンパイル作業がないぶん処理が速いのです!
特徴④セキュリティが高い
Javaのセキュリティが高いと言われる理由には、次の特徴が挙げられるでしょう。
- サンドボックスモデルを採用
- ガベージコレクションを搭載
- 静的型付け言語
まず、Javaではサンドボックスモデルを採用しています。
サンドボックスとは、隔離・保護された環境でプログラムを動作させて、外部からの攻撃や不正アクセスを防ぐセキュリティの仕組みです。
次に、Javaにはガベージコレクションという、自動メモリ管理機能があります。
ガベージコレクションとは、プログラムで使い終わったメモリを自動で解放する機能です。これにより、メモリリークのリスクを軽減します。
最後に、Javaは静的型付け言語です。
静的型付け言語はコンパイル時に型チェックが行われるため、実行時のエラーを減らせます。これにより、安全性と信頼性の高いシステムを構築することが可能です。
単語の意味
メモリリーク・・・不要なメモリが解放されずに保持し続けること。そのままにするとメモリが不足し、システムのパフォーマンス低下やアプリが停止する恐れがある。
特徴⑤ライブラリが豊富
ライブラリとは再利用できるコードの集まりで、特定の機能をまとめたもの。
Javaのライブラリを使えば、データベース操作、ネットワーク通信、ファイル処理といった機能を、プログラムへ簡単に組み込めます。
ライブラリには「標準ライブラリ」と「外部ライブラリ」の2種類があり、Javaはどちらも豊富です。
標準ライブラリは、Javaの開発や実行に必要な環境をまとめた「Java開発キット(JDK)」に組み込まれており、追加のインストールなしで利用できます。
外部ライブラリとは、サードパーティによって開発されたライブラリです。利用するには別途追加インストールする必要がありますが、開発の効率アップには欠かせません。
以下に代表的なJavaの外部ライブラリをまとめました。
| Apache Commons | 汎用的なユーティリティクラス(特定の機能や処理をまとめたクラス)を提供 |
|---|---|
| Guava | Googleが開発したユーティリティライブラリ(特定の機能を再利用可能にした部品のこと) |
| JavaFx | アプリのGUI(操作画面)を実装 |
| OpenCV | 高度な画像解析機能を実装 |
| Log4j | アプリでログを記録・出力 |
| JFreeChart | グラフ描画に特化 |
適したライブラリを使えば、同じコードを何度も書く手間が省け、開発期間も短縮できるでしょう!
JavaとJavaScriptの違い
Javaと混同されやすいプログラミング言語に「JavaScript」があります。
名前は似ていますが、この2つはまったくの別物です。
JavaとJavaScriptの違いを見ていきましょう。
| Java | JavaScript | |
|---|---|---|
| 開発元 | サン・マイクロシステムズ社(現オラクル社) | ネットスケープ コミュニケーションズ社(現AOL) |
| 開発目的 | 一度プログラムを書けば、どこでも動くことを目指して作られた | 簡単かつスピーディーなプログラミングを目指して作られた |
| 言語タイプ | コンパイル型言語 | インタプリタ型言語 |
| 文法 | 静的型付け言語 (データ型を事前に決める) | 動的型付け言語 (データ型を実行時に決める) |
| 用途 | 幅広い分野で利用 主にバックエンド(裏方部分)の開発に使われることが多い | Web開発に特化(Webページに動きをつける) 主にフロントエンド(見た目部分)開発に使われることが多い |
ちなみに、JavaとJavaScriptの名前が似ている理由は、Javaの人気にあやかりJavaScriptが改名したからです。
というのも、JavaScriptはもともと「LiveScript(開発当初は「Mocha」)」という名前でした。
JavaとJavaScriptの開発元が提携していたこともあり、1995年にLiveScriptからJavaScriptへ改名されたのです。
Javaが得意なこと・苦手なこと
Javaが得意なのは、強固なセキュリティが求められる大規模開発です。
例えば、銀行・証券会社・官公庁などの業務システムが挙げられるでしょう。
オブジェクト指向のプログラミングは機能を分割して開発を進めるため、作業を分担しやすいです。よって、複数人で取り組むような大規模開発に適しています。
逆に、Javaは小規模開発には向いていません。
Javaに搭載されているガベージコレクションはメモリ消費量が多いです。そのため、リソースが限られる小規模開発には不向きと言えます。
また、高度な機能を作れるのがJavaの魅力ですが、そのぶんコードが複雑になりがち。
シンプルな機能のみを搭載した小規模開発なら、Javaよりもほかの言語を使うほうが効率が良いのです。
Javaで開発できるもの
柔軟な開発ができ、セキュリティ面でも優れているJavaは、幅広い分野・用途で使われます。
特に以下の開発で使われることが多いでしょう。
Androidアプリ
- モンスターストライク
- Fate Grand
- TikTok
- YouTube
JavaはGoogleが提供している、Androidアプリ開発用の統合開発環境(IDE)「Android Studio」で採用されていることもあり、現存するAndroidアプリの多くはJavaで作られています。
Webアプリ
- X
- Amazon
- 楽天
JavaにはWebアプリ開発に特化した「Java EE」というプラットフォームがあり、Webアプリのバックエンド開発に使われます。なお、Javaで作られるWebアプリには、業務システムも含まれます。
組み込みシステム
- X
- Amazon
- 楽天
組み込みシステムとは、家電製品などの電子機器に特定の機能を果たすプログラムを組み込み、動作を制御するシステムのこと。
近年はIoT分野のプログラミングにも、Javaが使われています。
IoT(モノのインターネット)とは、家電などの電子機器をインターネットに接続して相互に連携させることで、より高度な機能やサービスを実現するものです。
Javaプログラム作成の流れ
ここからは、Javaプログラムの作成から実行までの基本的な流れを簡単に説明します。
ステップ1.開発環境を準備
Javaを使うには、まず「Java開発キット(JDK)」と「統合開発環境(IDE)」をインストールする必要があります。
JDKとは、Javaの開発に必要なソフトウェアをまとめたもの。IDEとは、効率的に開発するためのソフトウェアアプリケーションです。
なお、IDEにはさまざまな種類があります。
- Eclipse(エクリプス)
- Javaを中心としたプログラミング開発を効率化するためのIDE
- IntelliJ IDEA(インテリジェイ アイデア)
- Javaを中心に数多くのプログラミング言語に対応したIDE
- NetBeans(ネットビーンズ)
- Javaアプリケーション開発に特化したオープンソースのIDE
定番は「Eclipse」です。なお、JDKとEclipseをまとめてインストールできる「Pleiades All in One」を使えば、Javaの開発環境を簡単に構築できますよ!
ステップ2.Javaプロジェクトを作成
IDEでは「プロジェクト」という単位でプログラムを管理するのが一般的。
ここでは上で紹介したEclipseを使ってプロジェクトを作成する手順を紹介します。
- Eclipseを開く
- 「ファイル」>「新規」>「プロジェクト」の順に選択
- ウィザードのリストから「Javaプロジェクト」を選択
- Javaプロジェクトの作成画面が表示される
- 任意のプロジェクト名(例:「java_test」)を指定
- 「パッケージ・エクスプローラー」に作成したJavaプロジェクトが追加される
なお、パッケージ・エクスプローラーとは、主にEclipseなどのIDEで使われるビューの一つで、Javaプロジェクトのパッケージ構造をツリー形式で表示する機能です。
ステップ3.コードの記述
続いて、事前に作成した設計図や仕様書をもとに、コードを記述していきます。
コーディングは、IDEまたはテキストエディタのどちらか、あるいは両方を組み合わせて行うのが一般的です。簡単なコーディングならテキストエディタで十分対応できるでしょう。
ソースコードを記述したら、「〇〇〇.java」といった任意の名前をつけて保存すればOK。なお、このファイルを「ソースファイル」と呼びます。
ステップ4.コンパイル
次はコンパイル作業です。
コンパイルするとJavaソースコードがバイトコードに変わり、”.class”という拡張子を持つクラスファイルが生成されます。
バイトコードとは、特定の仮想マシン上で実行されるように設計された中間言語のこと。
文法などにミスがなければ無事にコンパイルされますが、うまくいかないときは修正して再度コンパイルしましょう。
クラスファイルが作成できたら、「〇〇〇.class」と、任意のクラスファイル名をつけて保存します。
ステップ5.プログラムの実行
プログラムを実行しましょう。
まず、コマンドプロンプトを起動し、クラスファイルが保存されているディレクトリに移動します。
次に「java 〇〇〇」のコマンドを入力して、Enter キーを押します。このとき、クラスファイル名は拡張子の.classをつけずに指定しましょう。
「Test.class」というファイル名なら→「java Test」と入力
記述した文字や数字などが正常に表示されたら、プログラムの実行は成功です!
Javaの基礎文法
Javaには覚えるべき基礎文法がたくさんあります。詳しく知りたい方はOracle社が提供している、Javaプログラムの書き方ルールをまとめた「コーディング規約」を参考にするのがおすすめ。
ここではJava入門者が知っておきたい8つの文法を厳選して紹介します。
①コメント
Javaのプログラミングではコメントを残せます。
コメントとは、ソースコードに書かれた人間が読むための注釈のこと。
コードの処理には反映されないので、自分向けのメモ書きや、ほかの開発者にプログラムの目的や機能の補足情報を伝えたいときに便利です。
1行だけコメント化する場合は、頭に「//(スラッシュ2つ)」をつけてコメントを記述します。
// この行だけがコメントになる
複数行をコメント化する場合は、コメント部分を「/*」と「*/」ではさめばOK。
/* ここから
複数行
コメントになる*/
なお、コメントは一時的に特定のコード処理を無効化するときにも使え、デバッグや機能の切り替えなどに役立つでしょう。
それから、JavadocというAPIドキュメントを自動生成する仕組みを使った、特別な形式のコメントもあります。こちらは、クラス、メソッド、フィールドの説明を残したいときに便利です。
Javadoc形式のコメントは、説明部分を「/**」と「*/」で挟むと、ドキュメントとして反映されます。
/** 説明を記述する */
単語の意味
APIドキュメント・・・APIの「取扱説明書」のようなもの
API・・・システム連携やサービス開発を効率化する技術
②データ型
データ型とは、扱うデータの種類を分類するためのものです。Javaでは変数を宣言するとき、必ずデータ型も一緒に指定します。
Javaのデータ型は、大きく次の2種類に分けられます。
- 基本データ型(プリミティブ型)
- 参照型
基本データ型(プリミティブ型)
数値・文字・真偽値など、基本的なデータを扱うための型です。
変数には値そのものが直接格納されます。
基本データ型は、以下の8種類です。
| 種類 | 概要 | 型 |
|---|---|---|
| 整数型 | 小数点のない数値 例)0、1、100、-123 | long(大きな整数)int(普通の整数)short(小さな整数)byte(さらに小さな整数) |
| 浮動小数点型 | 小数を含む数値 例)1.23、-99.9 | floatdouble |
| 論理型 (真偽値型) | true(真)かfalse(偽)の2値 | boolean |
| 文字型 | 1文字を扱う 例)’A’、’B’、’z’、’あ’、’ア’ | char |
参照型
データそのものではなく、データが格納されている場所(参照情報)を保持する型です。
基本データ型以外の型は、すべて参照型に分類されます。
たとえば、テキストデータを扱う文字列(String型)も参照型の一つです。
③変数
変数とはデータを一時的に保存しておく領域です。値の代入や保管したデータを参照するために使われ、データの効率的な操作に欠かせません。
変数を使うには、「どんな値を格納するか」「どんな名前をつけるか」を、あらかじめ宣言する必要があります。
少し難しいですが、最初は以下のように理解しておけばOKです。
- 変数・・・データを入れる容器
- 代入・・・容器にデータを入れること
- 参照・・・容器のデータを使うこと
- 宣言・・・容器を作る
変数を宣言するときはデータ型を指定します。
データ型 変数名;
なお、変数名に使える文字は以下の通りです。
- 半角英字(A-Z,a-z)
- 数字(0-9)※数字を先頭につけるのはNG
- アンダーバー( _ )
- ドルマーク($)
変数を宣言すると変数に値を代入できます。後の処理で前のデータを使いたいときに、変数を活用すると便利です。
[変数名] = [入れたい値];
格納する値が分かっている場合は、宣言と同時に値を代入して「変数の初期化」をすることが可能。
データ型 変数名 = 初期値;
④演算子
演算子とは、プログラムで計算したり比較したりするときに使う記号です。
さまざまな種類があるので、ここで一部を紹介します。
| 種類 | 概要 | 記号 |
|---|---|---|
| 算術演算子 | 数値演算に使われる | +:加算-:減算*:乗算/:除算%:剰余(割り算の余り) |
| 比較演算子 | 値を比較するために使われる | ==:等しいか!=:等しくないか>:より大きいか<:より小さいか>=:以上か<=:以下か |
| 代入演算子 | 右辺の値や計算結果を左辺の変数に代入するときに使われる | = : 値を代入+=: 加えて代入-=:引いて代入*=:掛けて代入/=:割って代入%=:割った余りを代入 |
| インクリメント・デクリメント演算子 | 変数の値を1つ増減させるために使われる | ++:増加--:減少 |
| 論理演算子 | 真偽値を扱うために使われる | &&:論理積(AND)||:論理和(OR)!:否定(NOT) |
⑤配列
配列とは同じ型の複数の値をまとめて格納し、一つの変数として扱うデータ型(参照型)です。
配列を使えば1回の宣言でまとめて値を格納できます。
Java配列の使い方は、宣言→代入→参照の流れで、基本的には変数と同じです。
配列における宣言とは、「この型のデータを、この数の要素を持つ配列として扱います」とプログラムに記述すること。
データ型[ ] 配列変数名;
またはデータ型 配列変数名[ ];
※[ ]の中身は何も書かない
どちらの書き方でも可能ですが、前者の書き方のほうが一般的です。
配列を宣言したら、各要素へ値を代入することも可能。
配列名[要素番号] = 値;
※要素番号(インデックス)は0から始まる
| 〈配列の要素へ値を代入する構文〉配列名[要素番号] = 値;※要素番号(インデックス)は0から始まる |
変数と同じく配列も初期化できます。宣言時か宣言後か、初期化のタイミングで書き方が違うので注意しましょう。
型名 配列変数名[] = {値1, 値2, ... };
配列変数名 = new データ型[要素数];
※このあと各要素に値を代入する
⑥条件分岐(if文 / switch文)
条件分岐とは、条件によって処理を切り替えること。
Javaの条件分岐は、「if文」と「switch文」の2種類です。
if文は条件を満たしている状態(true)のときに、特定の処理を実行します。
if( 条件式 ) {条件がtrueのときに実行される処理}
※条件を満たしていない状態(false)だと処理は実行されない
条件を満たす場合と満たさない場合で異なる処理を指定するときは、「if-else文」を使います。
if( 条件式 ) {条件を満たした場合の処理} else {条件を満たさなかった場合の処理}
さらに、条件と処理の分岐を複数用意したいときは、「if else-if -else文」を使います。
if (条件) {
// 条件が真の場合に実行する処理
} else if (別の条件) {
// 別の条件が真の場合に実行する処理
} else {
// 条件が偽で、かつ上記のどの条件も満たさない場合に実行する処理
}
※「else{ }」の条件はいくつでも設定できる
switch文は、変数の値によって条件分岐します。
switch (式) {
case 値1:
// 値1の場合に実行する処理
break;
case 値2:
// 値2の場合に実行する処理
break;
// 他の値に対する処理を追加する場合、case文を追加します。
default:
// 式がどのcaseにも一致しない場合の処理
なお、switch文の条件は次のデータ型でのみ使えます。
- 整数(byte型, short型, int型)
- 文字列(Stirng型)
- 列挙型(enum)
long型や浮動小数点数(float型, double型)では使えないので注意。
⑦反復処理(for文/while文)
反復処理とは「ループ処理」とも呼ばれ、指定した回数だけor条件が満たされるまで、同じ処理を繰り返し実行します。
反復処理を使えば、何度も同じ処理を書く必要がありません。
Javaの反復処理は、主に「for文」と「while文」の2種類です。
for文は、決まった回数だけ処理を繰り返す場合に使います。
for (初期化式; 条件式; 変化式) {
// 条件が真の間、実行する処理
}
while文は、条件が満たされる間(trueである限り)、処理を繰り返す場合に使います。
while (条件) {
// 条件が真の間、実行する処理
}
処理を繰り返す回数が決まっている場合はfor文、決まっていない場合はwhile文と覚えておけばOKです。
⑧クラス
オブジェクト指向言語であるJavaのコードは、関数やコマンドではなく、オブジェクトとクラスをベースに構成されます。
クラスとはオブジェクトの設計図やテンプレートのようなもの。クラスには、そのオブジェクトが持つ属性(フィールド)や振る舞い(メソッド)が定義されています。
class クラス名{
// ここにクラスの中身を書いていく
}
ただし、クラスは設計図なので、そのままでは使えません。
クラスを使うには、具体的な実体となる「インスタンス」を作り、それを操作します。クラスからインスタンスを生成するときは、配列と同じくnewを使います。
型 変数名 = new クラス名();
⑨メソッド
Javaにおけるメソッドとは、便利な機能を手軽に使えるように特定の処理をまとめたものです。他のプログラミング言語では「関数」と呼ばれることもあります。
そんなメソッドはクラス内で定義する必要があります。
修飾子 戻り値の型 メソッド名(引数){
処理(命令文)
return;(戻り値)
}
単語の意味
修飾子・・・メソッドのアクセスレベルを指定する。
戻り値の型・・・メソッドの処理後に呼び出して元に返す値(処理結果のデータ)。「return」で指定し、戻り値がない場合は「void(空)」と記述する。
引数・・・「この値を使ってデータを処理して欲しい」というときに渡す値のこと。引数がない場合も()は記述する。
メソッド名・・・変数の名前と同じルールで好きな名前をつけられる。
| 〈メソッドを定義する構文〉修飾子 戻り値の型 メソッド名(引数){ 処理(命令文) return;(戻り値) } 修飾子・・・メソッドのアクセスレベルを指定する。戻り値の型・・・メソッドの処理後に呼び出して元に返す値(処理結果のデータ)。「return」で指定し、戻り値がない場合は「void(空)」と記述する。引数・・・「この値を使ってデータを処理して欲しい」というときに渡す値のこと。引数がない場合も()は記述する。メソッド名・・・変数の名前と同じルールで好きな名前をつけられる。 |
メソッドの呼び出し方は戻り値を返すかどうかで書き方が違います。
メソッド名(引数)
戻り値を格納するオブジェクト変数名 = メソッド名(引数)
Javaの学習方法
ここからは、Java入門者におすすめの学習方法を紹介します。
| 学習方法 | メリット | デメリット |
|---|---|---|
| 入門書やネットの情報を活用した独学 | 学習費用を抑えられる 自分のレベルやペースに合わせて学べる | 挫折しやすい |
| スクールに通うorオンライン講義を受ける | プロの指導で基礎を体系的に学べる 就職や転職の支援が受けられるケースもある | 費用がかかる |
それぞれのメリット・デメリットをチェックして、自分に合った学習方法を選びましょう。
ちなみに、未経験からJavaの基本文法を習得するには、学習方法や学習ペースにもよりますが、3ヵ月〜半年ほどかかると言われています。
学習のポイントと注意点
ある程度Javaの基礎を理解したら、特に実際に手を動かしてコードの記述に慣れるのが習得の近道です!
最初は入門書などに載っているサンプルコードをまねして、小さなプロジェクトから始めてみましょう。
また、プログラミングにはエラーがつきものなので、実践を積む中で問題解決能力も養っていけるといいですね。
しかし、Javaでプログラミングする場合、言語の文法ルールだけでなく、オブジェクト指向についても理解する必要があります。
オブジェクト指向は覚えることが多いため、プログラミング初心者にとって習得難易度は高めです。
まとめ
最後にJavaの特徴をおさらいしましょう。
- C言語をベースに開発
- C++と似た構文スタイル
- Googleの「三大言語(Java、C++、Python)」の一つ
- オブジェクト指向言語
- プラットフォームに依存しない
- 処理速度が速い
- セキュリティが高い
- ライブラリが豊富
- 幅広い分野・用途で使われる
- 強固なセキュリティが求められる大規模開発が得意
Javaを使えば、さまざまなものが作れます。しかし習得が難しいので、未経験からアプリやシステムを開発できるようになるまでには時間がかかるでしょう。
アプリやシステム開発のノウハウや人材が社内にない場合は、プロにお任せするのがおすすめです!
システム開発のお悩みはI-SEEDにご相談ください
システム開発について以下のようなお悩みをお持ちの場合、ぜひI-SEEDにご相談ください。
- Excelで内製したシステムが業務とマッチしなくなってきた
- 人的コストがかかっている業務をシステム化したい
- 運用中のWebシステムをスマホ対応にしたい
I-SEEDでは、システム開発やWebデザイン、Webマーケティングそれぞれの分野で幅広いスキルと経験を持ったスタッフが、お客様のお悩みをひとつひとつ細かくヒアリング。「使いやすく分かりやすいUI/UX」をモットーに、最適な解決策をご提案します。
メールフォームでのご相談も可能ですので、お気軽にご相談ください。
