メインコンテンツまでスキップ

「java」タグの記事が2件件あります

全てのタグを見る

Javaの基礎と現代Java入門~オブジェクト指向からJava 21まで~

福原
ディアシステム(株)開発二部第2課

こんにちは。開発二部第二課の福原です。

「Javaって昔からある言語でしょ?」

そんなイメージを持っている方も多いかもしれません。しかしJavaは約30年にわたって進化を続け、現在でも多くの企業システムやWebサービスで利用されている人気のプログラミング言語です。

今回は社内勉強会の内容をもとに、

✅ Javaとは何か
✅ オブジェクト指向の基本
✅ 現代Javaの便利な機能

を分かりやすく紹介します。

🚀 Javaってどんな言語?

Javaは1995年に登場したプログラミング言語です。現在はOracle社によって開発・管理されています。

主な特徴

  • 🎯 オブジェクト指向
  • 🌎 マルチプラットフォーム対応
  • 🔧 高い保守性
  • 📚 豊富なライブラリ
  • 🏢 長期運用に強い

業務システムや金融システムなど、「安定性が求められる現場」で特に多く採用されています。

Stack Overflow 2025でJavaの利用率は29.4%(7位)
https://survey.stackoverflow.co/2025/technology/

GitHubのOctoverse 2025ではJavaの前年同期比成長率は20.73%(4位)
https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/#the-top-programming-languages-of-2025-typescript-jumps-to-1-while-python-takes-2

💡 なぜJavaは今も選ばれるのか?

新しい言語が次々と登場する中で、Javaはなぜ使われ続けているのでしょうか?

✅ 安定性が高い

Javaは後方互換性を重視しています。
そのため、「10年以上前に作られたシステムが今でも動いている」 というケースも珍しくありません。

例えば、Java 8 、Java 11 で開発したシステムが
適切な検証を行えば新しいJava環境でも動作するケースが多くあります。

✅ 学習しやすい

Javaは利用者が多いため、

  • 📖 書籍
  • 🎥 学習サイト
  • 📝 技術ブログ
  • 💬 コミュニティ

などの情報が豊富です。

javaは30年近い歴史があり、学習環境が非常に充実しているため
初心者が困ったときに調べやすく、解決策を見つけやすいです。

また企業システム開発で広く利用されているため、多くのエンジニアが経験を持っています。
(世界のJava開発者数はおよそ1,000万人前後〜2,000万人規模)
そのため最大級のコミュニティを持つ言語の一つになります。
https://www.jetbrains.com/ja-jp/lp/devecosystem-data-playground/

✅ エコシステムが充実

Javaには長い歴史の中で育まれた強力なツールがあります。

ツール用途
Spring BootWebアプリ開発・REST API開発
MyBatisデータベースアクセス
JUnitテスト自動化
Mavenライブラリ管理
Gradleビルド自動化

これらの存在がJava開発を支えています。

🏗️ オブジェクト指向とは?

Javaを学ぶうえで欠かせない考え方がオブジェクト指向です。

簡単に言うと、現実世界のモノをプログラム上で表現する考え方 です。

例えば「車」を考えると以下のような形になります。

┌───────────────┐
│ 車 │
├───────────────┤
│ 🚗 色:赤 │
│ 🚗 速度:60km │
├───────────────┤
│ ▶️ 走る() │
│ ⛔ 止まる() │
└───────────────┘

現実世界の「モノ」を、

  • 属性(データ)
  • 振る舞い(処理)

として表現する考え方がオブジェクト指向です。

サンプルコード

class Car {

String color; // 属性:色

  // 処理:走る
void run() {
System.out.println("走る");
}
}

利用するときは、

Car car = new Car();
car.run();

のようにオブジェクトを生成します。

🎓 オブジェクト指向の3大要素

Javaでは次の3つが特に重要です。

🔒 カプセル化

データを保護する仕組みです。

ユーザー

┌────────────────────┐
│ User │
├────────────────────┤
│ private age │
└────────────────────┘
↑     ↑
getAge() setAge()

直接変更は禁止。

メリット

  • ✅ 不正な値を防ぐ
  • ✅ 保守しやすい

🧬 継承

共通機能を再利用する仕組みです。

          Animal

┌──────┴──────┐
│ │
Dog Cat
Animal
└─ eat()

Dog
└─ eat() ← 引き継ぐ

Cat
└─ eat() ← 引き継ぐ

メリット

  • ✅ コードの重複削減
  • ✅ 再利用性向上

🎭 ポリモーフィズム

同じ操作でも異なる動作を実現できます。

Animal animal

sound()


┌─────┴─────┐
│ │

Dog Cat

ワン! ニャー!

呼び出し側は同じコードでOK。

animal.sound();

実体によって動作が変わります。

⚡ Javaは進化し続けている

実はJavaは最近かなりモダンになっています。

📝 Lambda(ラムダ式)

従来

list.forEach(item -> {
System.out.println(item);
});

現在

list.forEach(System.out::println);

メリット

  • ✨ 記述量が減る
  • ✨ 読みやすい

🌊 Stream API

データ処理を宣言的に書けます。

List<String> result =
names.stream()
.filter(name -> name.startsWith("T"))
.toList();

メリット

  • 📖 コードの意図が伝わりやすい
  • 🔍 可読性向上

🛡️ Optional

Java開発者を悩ませる「NullPointerException」。

Optionalを使うことで安全に扱えます。

Optional<User> user = findUser();

String name =
user.map(User::getName)
.orElse("unknown");

メリット

  • ✅ Nullを明示的に扱える
  • ✅ バグ防止につながる

🎯 Pattern Matching

Java 16から利用できる便利機能です。

従来

if(obj instanceof String){
String s = (String)obj;
}

現在

if(obj instanceof String s){
System.out.println(s);
}

メリット

  • ✨ キャスト不要
  • ✨ コードがスッキリ

🔥 Java 21のswitch Pattern Matching

Java 21 ではswitch文もさらに進化しました。

return switch (obj) {
case String s -> "文字列";
case Integer i -> "整数";
case null -> "null";
default -> "その他";
};

メリット

  • ✅ 条件分岐が整理される
  • ✅ 型ごとの処理が分かりやすい

🌈 Javaを学ぶとできること

Javaを学ぶとさまざまな開発に挑戦できます。

  • 🌐 Webアプリ開発
  • 🔌 API開発
  • 📦 バッチ処理
  • ☁️ クラウド開発
  • 🏗️ マイクロサービス開発
  • 🎉 まとめ

Javaが長年愛される理由は、

✅ 安定性が高い
✅ 学習環境が充実している
✅ エコシステムが成熟している

さらに近年は、

  • Lambda
  • Stream API
  • Optional
  • Pattern Matching
  • switch Pattern Matching

といったモダンな機能が追加され、より読みやすく保守しやすいコードを書けるようになっています。

Javaは「昔からある言語」ではなく、🚀 今も進化し続ける現役のプログラミング言語 です。

これからJavaを学び始める方も、久しぶりに触る方も、ぜひ現代Javaの便利さを体感してみてください!

【Java初心者向け】基本文法のみでタスク管理プログラムを作ってみよう!

荒木
ディアシステム(株)開発二部第2課

こんにちは。開発二部第二課の荒木です。

私は元々プログラミング未経験で入社し、初めはどんな処理があってどんなふうに書くのか知らない状態から学習を始めていました。
プログラミング初学者にはあるある(だと思っている)のですが、学習を進めていると、「一つ一つの処理はわかるし書けるけど、実際どうやってプログラムやシステムの形になるの?」という疑問が出てくるかと思います。
これを解消するには、身の回りにあるようなシステムがどんな処理で成り立っているかを考えてみて、自分で実際に書いて再現してみると少しイメージがつきやすくなります。
今回はJavaを学習し始めた方を対象に、基本的な文法を使って、タスク管理ができるプログラムを組んでみましょう!

完成イメージ

プログラムを実行すると、以下のようにタスクを管理できます。

画像1

番号を入力すると……

画像2 画像3

使用する技術

今回使用するのはJavaの基礎機能だけです。

  • クラス
  • コンストラクタ
  • メソッド
  • ArrayList
  • while文
  • switch文

※フレームワークは使用していないため、興味のある人は調べたり今回のプログラムを改良してみてください!

Taskクラスを作成する

まずはタスクを管理するクラスを作ります。

public class Task {

private String title;

public Task(String title) {
this.title = title;
}

public String getTitle() {
return title;
}
}

タスクは

  • タスク名

だけを持つシンプルな設計にしています。

例えば、

Task task = new Task("Javaを勉強する");

のようにタスクを生成できます!

メイン処理を作成する

次にメイン処理を作ります。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TodoApp {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);
List<Task> tasks = new ArrayList<>();

while (true) {

System.out.println("\n=== タスク管理 ===");
System.out.println("1. タスク追加");
System.out.println("2. タスク一覧表示");
System.out.println("3. 終了");

System.out.print("選択してください:");
int choice = scanner.nextInt();
scanner.nextLine();

switch (choice) {

case 1:

System.out.print("タスク名を入力してください:");
String title = scanner.nextLine();

tasks.add(new Task(title));

System.out.println("追加しました!");
break;

case 2:

System.out.println("\n【タスク一覧】");

if (tasks.isEmpty()) {
System.out.println("タスクはありません");
} else {
for (int i = 0; i < tasks.size(); i++) {
System.out.println(
(i + 1) + ". "
+ tasks.get(i).getTitle()
);
}
}
break;

case 3:

System.out.println("終了します");
scanner.close();
return;

default:

System.out.println("正しい番号を入力してください");
}
}
}
}

プログラム実行 → ユーザーが番号を入力 → 番号によってそれぞれの処理をするという流れです。

「Scanner」はキーボードの入力やファイルのデータ読み込みを簡単に行うためのクラスです。便利!
今回はキーボード入力を使うため import しています。
Scannerでは読み取るデータの種類によっていろいろなメソッドが用意されています。

  • nextLine():1行まるごと読み取り
  • nextInt():整数の読み取り

nextInt() で数字を入力した後の Enter キーの入力が残ってしまうため、そのまま nextLine() を呼ぶと空文字が読み込まれてしまいます。

そのため、今回は nextInt() の後に nextLine() を1回実行して改行を消しています。

他にもScannerのメソッドがあるので気になる方は調べてみてください!

配列とArrayList

今回のプログラムではタスクの数を決めていません。
最初からタスクが何件まで増えるかはわからないですよね?

配列の場合は最初にサイズを決める必要があります。

Task[] tasks = new Task[10];

※この場合は10個の要素を入れますよという宣言

一方ArrayListは、要素が入るたびに自動的にサイズが拡張されていくイメージです。
そのため、タスク管理のような用途ではArrayListが便利です。

コードでは List<Task> として宣言していますが、実際に使用しているのはArrayListです。
Listは「リストとして扱う」というルールを表し、ArrayListはそのルールを実装したもの……のようなイメージです。

while文とfor文

Javaのテキストなどを学習していると、序盤の方に必ず繰り返し処理のことが書いてあるかと思います。
今回はwhile文とfor文を使っています。

まず、プログラムのタイトルである「タスク管理」や、タスク追加などの処理の種類を表示するところですが、これは明確に何回繰り返すかわからない処理です。
今回はタスク追加やタスクの一覧を表示させた後、また最初の表示に戻ってくるようにしています。
何回タスクが追加されるか・タスク一覧を出すかはわからないですが、while(true) を使うことで、「終了」を選択するまでメニューを表示し続けるようになります。
return は main メソッド自体を終了させます。そのため、結果的に while 文も終了します。)

while文の中にswitch文があり、そこでそれぞれの処理へと分岐していきますが、case2のところにfor文が入っています。
case2はタスクの一覧表示です。
「今まで追加されたタスクを全て表示する」処理ということですね。
つまり、tasksリストの要素数分、入っている値を表示していけばいいわけです!
これは繰り返しの回数 = リストの要素数と決まっているのでfor文を使っています。
ちなみにこのfor文はif文の中に入っていますが、これはtasksリストにまだ何も追加されていない場合はタスクなしの表示、何か要素が入っている場合はfor文に進むようになっています。

なぜTaskクラスを別で作るの?

……と思った人がいるかもしれません。
特に文法の学習をし始めた段階だと、別ファイルで作る必要性を感じにくいのではないかと思います。

今回のような小規模のプログラムであれば、1つのファイルにまとめてズラッと全ての処理を書いても問題なく動くかと思います。
しかし、プログラムの規模が大きくなると、役割ごとにクラスを分割した方が管理しやすくなります。

今回の場合、

  • Taskクラス:タスクの情報を管理する
  • TodoAppクラス:アプリの処理を管理する

というように、それぞれの役割を分けています。

例えば今後、

  • 完了状態
  • 優先度
  • 登録日時

といった要素を追加したくなった場合は、Taskクラスを主に修正すれば対応できるようになるのです。

今回はタスク名しか持っていませんが、今後上記のような機能を追加するとタスクに関する情報が増えていきます。そのため、Taskというクラスにまとめて管理しています。
1ファイルに全部の処理を書いてしまうと、どこかに変更を入れるたびに他の部分と整合性がとれているか確認する必要があります。大規模なプロジェクトだとできそうにありません……。
おそらくミスも出るでしょうし、エラーのもとにもなります。
このように関連するデータや処理をクラスごとにまとめると、コードの見通しが良くなり、機能の追加や削除も簡単になります。
この考え方は「オブジェクト指向」というものに基づくのですが、弊社ブログでもその内容に触れている記事があるのでぜひ見てみてください!

身近にあるプログラムを考えてみる

ここまで作りましたが、今回のプログラムはタスク管理のプログラムとしては問題だらけです。
タスク追加のみで削除ができなかったり、そもそも画面がなくて使いづらかったり、数字を入力するところで文字列を入力するとエラーが出て止まってしまったり……。
また、プログラムを実行するたびに追加した内容が消えてしまいます。
今回は出てきていない他のメソッドを使ったり、Spring Bootやデータベースを使ったりすれば、削除機能や入力画面・一覧画面、追加したデータを保持する仕組みなどを作れるようになります!

まずは、本やネットで見た文法をどうやって組み合わせて形にするのかを今回見てもらいましたが、学習したことが増えれば増えるほど、どんどんできる範囲が広がっていくことが感じられるかと思います。
それこそがプログラミングを学ぶ楽しさに直結しているかと思うので、興味が出た方は先ほど書いた処理のやり方を考えてみてください!
身近にあるプログラムの中身を考えてみることも、プログラミング言語を学ぶことと同じくらい大切ではないかと思っています!

未経験から始める
システムエンジニア

一生モノのITスキルを身につけよう

あなたの経験とスキルを
ディアシステムで発揮してください!