IT

一番オールマイティな言語?Javaの基礎- データ型からクラス、例外処理まで徹底解説

Javaは、オブジェクト指向プログラミング言語の1つで、シンプルで安全、移植性が高く、ウェブアプリケーションやスマートフォンアプリなど幅広い分野で利用されています。この記事では、Javaの基礎を学んでいきましょう。

Javaの特徴

Javaの特徴は以下の通りです。

  • オブジェクト指向プログラミング(OOP): プログラムを再利用しやすい形に構成できる
  • プラットフォームに依存しない: Javaアプリケーションは、異なるオペレーティングシステムで動作する
  • ガーベジコレクション機能: 不要になったメモリを自動で解放する
  • 多機能な標準ライブラリ: ネットワーク、ファイル操作、データベースなど多くの機能を提供

Javaの基本構文

変数とデータ型

Javaでは、変数を使用してデータを保持します。以下のように、データ型と変数名を記述して宣言します。

データ型 変数名;

Javaには、以下のような基本データ型があります。

  • 整数型: byte, short, int, long
  • 浮動小数点型: float, double
  • 文字型: char
  • 論理型: boolean

以下は変数宣言の例です。

int age;
double height;
boolean isAdult;
char initial;

演算子

Javaでは、算術演算子や論理演算子などを使用して、計算や条件判断ができます。

  • 算術演算子: +, -, *, /, %
  • 比較演算子: ==, !=, <, >, <=, >=
  • 論理演算子: &&, ||, !
  • 代入演算子: =, +=, -=, *=, /=, %=

制御構文

Javaでは、条件分岐や繰り返し処理を行うための制御構文があります。

  • if文: 条件に応じて処理を実行する
  • switch文: 値に応じて処理を分けて実行する
  • for文: 指定された回数の繰り返し処理を行う
  • while文: 条件が満たされている間、繰り返し処理を行う
  • do-while文: 一度処理を行い、その後条件が満たされている間繰り返し処理を行う

if文の例

int score = 85;

if (score >= 90) {
    System.out.println("Excellent!");
} else if (score >= 70) {
    System.out.println("Good!");
} else {
    System.out.println("Keep trying!");
}
switch文の例
int day = 3;
String dayName;

switch (day) {
    case 1:
        dayName = "Monday";
        break;
    case 2:
        dayName = "Tuesday";
        break;
    case 3:
        dayName = "Wednesday";
        break;
    // (省略)
    default:
        dayName = "Invalid day";
}

System.out.println(dayName);
for文の例
for (int i = 0; i < 5; i++) {
    System.out.println("Hello, Java! " + i);
}

while文の例

int counter = 1;

while (counter <= 5) {
    System.out.println("Counter: " + counter);
    counter++;
}
do-while文の例
int number;
do {
    System.out.print("Enter a number between 1 and 10: ");
    Scanner scanner = new Scanner(System.in);
    number = scanner.nextInt();
} while (number < 1 || number > 10);

System.out.println("You entered: " + number);

配列とコレクション

Javaでは、複数のデータをまとめて扱うために配列やコレクションが利用できます。

配列

配列は、同じ型のデータを複数格納するためのデータ構造です。配列の宣言と初期化は以下のように行います。

データ型[] 配列名 = new データ型[要素数];

また、以下のように宣言と同時に初期化も可能です。

データ型[] 配列名 = {要素1, 要素2, 要素3, ...};

配列の要素にアクセスするには、インデックスを使って以下のように記述します。

配列名[インデックス]

インデックスは0から始まります。以下は配列の使用例です。

int[] numbers = {2, 4, 6, 8, 10};

for (int i = 0; i < numbers.length; i++) {
    System.out.println("numbers[" + i + "] = " + numbers[i]);
}

コレクション

コレクションは、オブジェクトをまとめて扱うためのデータ構造で、リスト(ArrayList)、セット(HashSet)、マップ(HashMap)などがあります。以下はリストの使用例です。

import java.util.ArrayList;

ArrayList<String> names = new ArrayList<>();

names.add("Alice");
names.add("Bob");
names.add("Charlie");

for (String name : names) {
    System.out.println(name);
}

クラスとオブジェクト

Javaでは、オブジェクト指向プログラミングを実現するために、クラスとオブジェクトが利用されます。クラスはオブジェクトの設計図のようなもので、オブジェクトはクラスに基づいて生成される実体です。

クラスの定義

クラスは、以下のような構文で定義します。

class クラス名 {
    // フィールド(属性)
    // メソッド(操作)
}

以下は、Personクラスの例です。

class Person {
    String name;
    int age;
    
    void introduce() {
        System.out.println("Hello, my name is " + name + " and I'm " + age + " years old.");
    }
}

オブジェクトの生成と利用

オブジェクトは、new演算子を使用して生成します。オブジェクトの属性や操作にアクセスするには、ドット.を使って記述します。

クラス名 オブジェクト名 = new クラス名();

以下は、Personクラスを使った例です。

Person person1 = new Person();
person1.name = "Alice";
person1.age = 30;
person1.introduce();

Person person2 = new Person();
person2.name = "Bob";
person2.age =25;
person2.introduce();

コンストラクタ

コンストラクタは、オブジェクト生成時に自動的に呼び出される特殊なメソッドで、オブジェクトの初期化を行います。コンストラクタは、クラス名と同じ名前を持ち、戻り値の型を持ちません。

class クラス名 {
    クラス名(引数) {
        // 初期化処理
    }
}

以下は、Personクラスにコンストラクタを追加した例です。

javaCopy codeclass Person {
    String name;
    int age;
    
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    void introduce() {
        System.out.println("Hello, my name is " + name + " and I'm " + age + " years old.");
    }
}

Person person1 = new Person("Alice", 30);
person1.introduce();

Person person2 = new Person("Bob", 25);
person2.introduce();

継承とポリモーフィズム

Javaでは、クラス間に親子関係を持たせることができます。子クラスは親クラスの属性やメソッドを継承し、新たな機能を追加したり、既存の機能を上書き(オーバーライド)したりできます。これにより、コードの再利用性が向上し、プログラムの設計が容易になります。

継承の構文

継承を行うには、子クラスの定義にextendsキーワードを使用します。

class 子クラス名 extends 親クラス名 {
    // 子クラスの属性とメソッド
}

以下は、Personクラスを継承したStudentクラスの例です。

class Student extends Person {
    String major;
    
    Student(String name, int age, String major) {
        super(name, age);
        this.major = major;
    }
    
    void study() {
        System.out.println(name + " is studying " + major + ".");
    }
}

Student student = new Student("Charlie", 20, "Computer Science");
student.introduce();
student.study();

ポリモーフィズム

ポリモーフィズムは、オブジェクト指向プログラミングの重要な概念で、異なるクラスのオブジェクトが同じインターフェースを持つことを指します。これにより、プログラムの柔軟性が向上します。

Javaでは、ポリモーフィズムを実現するために、継承やインターフェースを利用します。以下は、インターフェースを利用したポリモーフィズムの例です。

interface Animal {
    void speak();
}

class Dog implements Animal {
    @Override
    public void speak() {
        System.out.println("Woof!");
    }
}

class Cat implements Animal {
    @Override
    public void speak() {
        System.out.println("Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();
        
        myDog.speak();
        myCat.speak();
    }
}

この例では、Animalインターフェースを実装したDogクラスとCatクラスがあります。Animal型の変数にDogオブジェクトやCatオブジェクトを代入することで、異なるクラスのオブジェクトを同じインターフェースで扱うことができます。

例外処理

Javaでは、プログラムで発生するエラーを例外(Exception)として扱います。例外処理は、プログラムの安全性と信頼性を向上させるために重要です。Javaでは、try-catch構文を使って例外処理を行います。

try {
    // 例外が発生する可能性のあるコード
} catch (例外クラス1 e) {
    // 例外クラス1の例外が発生したときの処理
} catch (例外クラス2 e) {
    // 例外クラス2の例外が発生したときの処理
} finally {
    // 例外の発生に関係なく実行される処理
}

以下は、例外処理の例です。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            Scanner scanner = new Scanner(file);
            
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }
            
            scanner.close();
        } catch (FileNotFoundException e) {
            System.out.println("Error: File not found.");
            e.printStackTrace();
        } finally {
            System.out.println("This message will always be displayed.");
        }
    }
}

この例では、example.txtファイルを読み込む際にFileNotFoundExceptionが発生する可能性があります。例外が発生した場合、エラーメッセージが表示され、プログラムは適切に終了します。

まとめ

Javaの基礎を学ぶことで、オブジェクト指向プログラミングを実現する強力で柔軟な言語を使いこなすための土台を築くことができます。この記事では、Javaの基本概念や構文を以下の項目で説明しました。

  1. データ型と変数
  2. 制御構造(if文, switch文, for文, while文, do-while文)
  3. 配列とコレクション(ArrayList, HashSet, HashMap)
  4. クラスとオブジェクト(コンストラクタ, 継承, ポリモーフィズム)
  5. 例外処理(try-catch構文)

これらの基礎を理解し、練習を重ねることで、Javaを用いたアプリケーション開発がスムーズに進むことでしょう。今後もJavaの機能を習得し、素晴らしいプログラムを作成するきっかけになれれば幸いです!

今後も、ITやDX、投資等に関する人生を豊かにして自由な時間を増やせるような情報を発信していきますので是非お楽しみに!

↓ オススメ記事 ↓

サイトの外観を決める言語?CSS入門 - 基本概念とプロパティについて解説します

必須の言語?HTML入門 - ウェブページ構築の基本について解説します

初心者にオススメの言語?Python入門 - 基礎から学ぶプログラミングの世界への第一歩

-IT
-, ,