あなたに合った学習プランは?LINE適正コース診断はこちら プログラミングが全て無料で学習可能!
Javaってどんな言語?特徴や文法をわかりやすく解説 - 忍者CODEマガジン

Javaってどんな言語?特徴や文法をわかりやすく解説

基礎知識

プログラミングを学習するときは、どの言語の習得を目指すか決める必要があります。人気の高さから、Javaに興味を持っている方もいるでしょう。とはいえ、Javaがどのような言語かあまりわかっていないこともあるのではないでしょうか。

今回はJavaの特徴や基本文法などについて紹介します。

世界中で人気のプログラミング言語「Java」

Javaはシステム開発の代表的なプログラミング言語のひとつです。

1995年にアメリカのサン・マイクロシステムズ社により開発されました。同社は2010年にORACLE社に吸収合併されたため、現在はORACLE社がJavaを提供しています。

人工知能(AI)の分野などで利用されることの多いPythonに次ぐ人気で、Javaは世界中で圧倒的なシェア(約10%)と支持率を獲得しています。

Javaのキャッチフレーズは、「Write once, Run anywhere」(一度書けば、どこでも使える)です。Javaの特徴を表現した言葉で、Javaを利用したプログラムは、OS(WindowsやmacOSのようにPCなどの動作に必要な基本のソフトウェアのこと)を問わず実行できます。

汎用性の高さから、さまざまな分野の開発現場で採用されており、特にWeb(ウェブ)アプリやAndroidアプリの開発に適しています。

公式LINE登録で5大特典無料プレゼント!!

プログラミング言語「Java」の特徴

Javaはどのようなプログラミング言語なのか、8つの特徴を紹介します。

Javaがなぜ選ばれるのか、メリットについて詳しく知りたい方はこちら。

Javaのメリットとは?オブジェクト指向や人気の理由を解説

オブジェクト指向

Javaは、オブジェクト指向のプログラミング言語です。オブジェクト指向とは、ソフトウェア開発において、処理を部品化し、組み合わせることによってプログラムを構築する考え方をいいます。

例えば、オブジェクト指向で車を組み立てる場合、エンジンや外装(カラー)など共通する機能を定義します。定義された共通機能から、車の種類別に独自に作り込んでいくのがオブジェクト指向のイメージです。

共通する機能のプログラミングに手を加えて作り変えるだけでプログラムを複数作成できるため、短期間で開発ができます。

オブジェクト指向のプログラミング言語はJava以外にもあり、C言語、C++、Python、Rubyなどが代表的です。

オブジェクト指向についてより詳しく知りたい方はこちら。

オブジェクト指向とは?初心者向けにわかりやすく解説

コンパイラ言語

プログラムは、人が理解できる高水準言語で記述されます。しかし、高水準言語のままではコンピューターで処理できないため、0と1の二進数による機械語に変換しなければなりません。ソースコードを機械語に翻訳することをコンパイルといいます。

コンパイラ言語とは、ソースコードを一括して機械語に変換する作業に対応するプログラミング言語のことです。一括で作業が行われるため、処理速度が速い特徴があります。

コンパイラ言語のほかにも、インタプリタ言語やスクリプト言語があります。

インタプリタ言語は、ソースコードをリアルタイムで翻訳する作業に対応したプログラミング言語です。

スクリプト言語は、機械語の翻訳が簡単あるいは不要で、文法がシンプルで記述量が少なく、実行速度が遅い言語をいいます。コンパイラ言語やインタプリタ言語のような明確な区分は存在しないため、抽象的な概念として使われています。

マルチプラットフォーム

マルチプラットフォームとは、プラットフォーム(システムなどを動かすための基盤)が異なる、さまざまな動作環境をいいます。PCであれば、WindowsやmacOSなどが代表的です。

Javaはマルチプラットフォームに対応しているため、一度書かれたソースコードはOSが異なるデバイスでも利用できます。単一のプログラムで対応できるJavaのようなプログラミング言語は近年の多様化した開発環境にも適しています。

ガベージコレクション

ガベージコレクションとは、処理に必要なメモリ領域を自動で判断して、不要な領域を自動で割り当てる仕組みです。

C言語をはじめとしたプログラミング言語は、ガベージコレクションに対応していません。そのため、開発者自らがプログラム内でメモリの割り当てと開放を明示する必要があります。

プログラム開発ではメモリ管理による問題が多く発生することから、開発のなかでも難しい領域といえます。

Javaは、ガベージコレクションにより、メモリ管理が自動で行われることから、基本的に開発者側でメモリの割り当てなどをする必要はありません。Javaのガベージコレクション機能の開発には多大な時間が費やされており、完成度が高いプログラミング言語です。

必要に応じて開発者側でチューニング(調整)する場合もありますが、C言語などのように常にメモリ管理に気を遣わなくて済みます。

ネットワークとの親和性が高い

Javaはネットワークを意識して開発されたプログラミング言語です。アドレス指定やネットワーク・セキュリティ機能などが備わっており、ネットワークを利用したアプリケーションの開発に適しています。

マルチスレッドに対応

処理を実行する流れをプログラミングではスレッドという単位で表します。また、スレッドは、シングルスレッドとマルチスレッドに区分できます。

シングルスレッドは、処理の始めから終わりまで分岐しないスレッドのことです。例えば、食事を準備する工程を考えてみましょう。シングルスレッドでは、下記の工程が順に行われるイメージです。

1.ご飯を炊く
2.食材を切る
3.食材を炒める
4.味付けをする
5.お皿に盛りつける

マルチスレッドは、処理の始めから終わりまでの間に分岐(複数のスレッド)が存在します。上記の例でいうと、1のご飯を炊く工程を実行しながら、2の食材を切る工程も同時に行われるイメージです。

Javaはマルチスレッドのため、複数の処理を並行して実行できます。Wordで入力中にスペルチェックが同時に行われるのもマルチスレッドの例のひとつです。

OSS(オープンソースソフトウェア)

プログラムを構成するソースコードを無償で一般公開しているソフトウェアをOSSといいます。Javaは、オープンソースのOpen JDKが公開されているプログラミング言語です。

オープンソースにより、誰でもソースコードの改良や再配布ができます。世界中のプログラマーによって、個人や企業が簡単に高品質なソフトウェアを利用することが可能になっています。

オープンソースをベースに、企業が自社のソースコードとして改良したものを販売するケースもあります。

「C言語」「C++言語」との類似性が高い

JavaはC言語やC++と構文が似ており、類似性が高いといった特徴があります。C言語やC++はソフトウェア開発の主流であったため、C言語やC++からスムーズに移行できるように開発されたためです。

なお、JavaはC言語などでバグの原因になりやすかったポインタ操作(※)などを排除しているため、従来のソフトウェア開発言語よりも洗練されています。

※ポインタ操作…記述方法のひとつで、変数名の先頭に「*(アスタリスク)」を付けてアドレス(メモリ上の位置)を保存すること。

プログラミング言語「Java」で開発できるもの

Javaを使って、下記のシステムやアプリケーションなどの開発ができます。

・Webアプリ
・Androidアプリ
・デスクトップアプリ
・Webサイト(サーバー側のプログラム)
・基幹システム
・組込みシステム(家電などに組み込まれたシステム)
・Webサービス
・ゲームソフト
・IoT(ものとインターネットを接続する技術)

Javaでできることについて詳しく知りたい方はこちら。

Javaでできることは?開発されたものや基礎から学習する方法を紹介

公式LINE登録で5大特典無料プレゼント!!

プログラミング言語「Java」の基本文法

Javaではどのようにソースコードなどを記述するのか、基本文法を紹介します。

コメント

コメントは、プログラムに影響しない部分です。コードに関する説明などを付けておきたい場合に使用し、自由に内容を記述できます。書き方は下記の3種類です。

種類 コメント方法
単一行コメント //コメントを記述する
複数行コメント /* コメント記述する */
Javadocコメント /** コメントを記述する */

※「コメントを記述する」部分に自由に記載します。

単一行コメントの場合

単一行コメントでは「//」を用います。「//」以降の行がコメントとして認識される仕組みです。行の先頭に「//」を置いて使えるほか、行の途中に「//」を置いて以降の文字列をコメントにすることもできます。

複数行コメントの場合

「/*」以降の行から「*/」までの行がコメントとして認識されます。間に改行をはさめるため、複数行にわたる長いコメントを残したいときに便利です。

Javadocコメントの場合

JavadocはJavaを利用したソースコードのコメントから、自動的にプログラムを説明するドキュメントを作成するツールです。Javadoc用のコメントは、「/**」で始まり「*/」で終わる行を説明文にしてドキュメントに反映します。

変数

変数とはデータを格納する領域です。数値や文字列などのデータを一時的に保存する箱のようなイメージで、値の代入や保管したデータの参照(取り出し)のために使われます。

変数はあくまでもデータの領域であるため、どのような値(数値や文字列)を格納するか、はじめにどの値を格納するかなどを宣言しなければ利用できません。プログラミングにおける宣言とは、「この型でこの要素をもつ配列をつくる」とプログラムに記述することです。

データ型

データ型は、数字や文字などの格納するデータの分類を指定するためのものです。先に紹介した変数を宣言する際に使用します。

データ型の種類は、大きく区分すると基本データ型と参照データ型の2つです。データ型によって、扱えるデータの種類や範囲が決まります。

基本データ型は、数字や文字を指定するための変数で下記の8種類が存在します。

種類 名称 消費メモリ 範囲
整数 byte 8bit -128~127
short 16bit -32,768~32,767
int 32bit ‐2,147,483,648~2,147,483,647
long 64bit -9,223,372,036,854,775,808L~9,223,372,036,854,775,807L
浮動小数点 float 32bit 4バイト
double 64bit 8バイト
文字 char 16bit Unicode規格の1文字
論理値 boolean 1bit true/false

参照データ型は、別の場所に保管された値を参照するためのものです。データが格納されたアドレス(参照値)を指定してデータを呼び出します。変数の宣言時点でデータの種類がわからないときに使われます。

配列

配列とは、同じ型のデータを格納するための箱の集まりのようなイメージです。配列を用いることで、大量のデータを効率良く扱えます。

配列宣言は、下記のように「型名 変数名[];」(または「型名[] 変数名;」)の形式で記述します。

配列の記述の例:
double value[];(浮動小数点の文字列「value」を配列で宣言)
int[] num;(整数の文字列「num」を配列で宣言)

配列を宣言した後は、初期化(配列の生成)が必要です。下記のように「変数 = new 型名[要素数];」と記述します。要素数とは配列のサイズを指します。

要素数記述の例:
value = new double[5];
num = new int[7];

配列の生成後に、下記のように初期値を設定します。

初期値の記述例:
value[1] = 3;

なお、配列の宣言は下記のように初期化と同時に記述することもできます。

配列と初期値を記述した例:
int[] num = {10, 20, 30};
{}内は配列の要素で、サイズも初期値も確定している場合に便利です。

なお、配列は同じデータの定義として用いられるため、数字と文字列など異なる型を配列として定義できません。

条件分岐

条件分岐は、プログラム上で指定した条件が満たされているかどうかで、別の処理を行うことを指します。

条件に応じて処理を分岐させることで、Javaではif文とswitch文の2つの構文が使えます。

if文の基本的な使い方

if文とは、「もし条件が〇であれば、×を実行する」など、条件に応じて処理を実行したいときに使用する制御文です。

具体的には、trueとfalseの2つに処理を分岐させたい場合に使えます。複数の条件式を使って、より複雑な条件分岐にすることもできます。

if文の記述方法:
if (条件式){

}

trueの場合は{}内に記述した処理が順に実行され、falseの場合は{}内の処理は実行されずに次に進みます。

switch文の基本的な使い方

switch文は、実行したい処理が3つ以上に枝分かれする条件分岐に使える構文です。例えば、「〇であれば×を実行する、△であれば□を実行する、◎であれば▲を実行する」など複数のケースに応じて処理を実行させたいときに使用します。

switch文の記述方法:
switch (式){
case 定数1:

break;
case 定数2:

break;

}

switch文では、caseの後に記述するラベルの値と一致した場合に、そのラベルの処理を実行します。

反復処理

条件を満たすまで、同じ処理を繰り返すことを反復処理といいます。Javaで用いられるのは、下記の構文です。

・while文
・do-while文
・for文
・拡張 for文

while文

while文は、条件式の判定がtrueの場合、trueでなくなる(条件を満たさなくなる)まで、繰り返し処理を実行する構文です。論理式はtrueかfalseになるようにして、下記のように記述します。

while (論理式) {
処理;
}

do-while文

do-while文もwhile文と基本は同じです。while文では、falseだった場合は処理がまったく実行されません。しかし、do-while文では論理式がfalseであっても、少なくとも1回は処理が実行されます。使い方は下記の通りです。

do {
処理;
} while (論理式);

使う機会はほかの構文ほど多くないものの、while文との比較として理解しておきたい構文です。

for文

for文は「n回処理を繰り返す」など、あらかじめ処理の回数が決まっている場合に用いられる構文です。下記のように記述します。

for (変数の宣言と初期化; 論理式; 変数の更新) {
処理;
}

変数は、処理の回数をカウントするために用意します。

拡張 for文

拡張for文は、配列などに含まれるすべての要素について、順に処理を実行するための構文です。下記のように記述します。

for (要素の型名 変数名 : コレクションの変数名) {
処理;
}

コレクションとは配列のように変数を複数扱えるもので、より規模の大きいデータ構造を表します。

クラス

オブジェクト指向とは、プログラムを部品化して構築する考え方だと説明しました。自動車の製造に例えると、車そのものがオブジェクトで、クラスはオブジェクトの属性などを定義する設計図のようなものです。

クラスでは、オブジェクトがどのようなものなのか、オブジェクトで何をするかを定義します。クラスの中身は主に下記の3つです。

フィールド:オブジェクトの属性を定義する変数
メソッド:オブジェクトの操作や機能
コンストラクタ:インスタンス(クラスから作られるオブジェクト)の生成時に実行される処理

クラスは下記のように記述します。

class クラス名{
}

{}のなかに、フィールド、メソッド、コンストラクタを記述するイメージです。

メソッド

メソッドとは処理をまとめたものです。メソッドを呼び出すことで同じ処理ができるため、その都度コードを記述する必要がなくなります。

メソッドを定義する書き方は下記の通りです。

修飾子 戻り値の型 メソッド名(引数){
メソッドの処理
}

修飾子は、クラスやメソッドの性質を決めます。

メソッドを呼び出す場合は、戻り値を返すかどうかなどで記述のしかたが変わってきます。

戻り値を返さない場合(単に処理を実行する場合):
メソッド名(引数1, 引数2, …, 引数n);

戻り値を返す場合(処理によって得られた値を使う場合):
戻り値を格納するオブジェクトの変数名 = メソッド名(引数1, 引数2, …, 引数n)

メソッドはクラスの中で定義します。クラスの外で定義するとエラーになるため注意が必要です。

まとめ

Javaとは、オブジェクト指向でマルチプラットフォームであるなどの特徴をもったプログラミング言語です。プログラミングの学習を始める前に、学習したい言語の特徴や使われ方を理解しておきましょう。

NINJA CODEなら、未経験からプログラミングのプロを目指せます。挫折しないオンライン学習に取り組みたいなら、NINJA CODEのJavaコースなどもご検討ください。