Java 11 - 新機能

こんにちは、Javaを学び始めた皆さん!Javaの世界に誘うガイドとして、この興奮する旅に参加できることを嬉しく思います。コンピュータサイエンスを多くの年間教えてきた者として、数多くの学生が完全な初心者から自信のあるコーダーに変わるのを見てきました。 therefore、あなたがどこから始めても心配しないでください。一歩一歩進めて、間もなくあなたはプロのようにJavaコードを書けるようになるでしょう!

Java 11 - New Features

Javaの制御文

まず基本から始めましょう。制御文はプログラミングの交通信号のようなものです。それらはコードの流れを指示します。Java 11では、プログラムの実行を制御するいくつかの便利な方法があります。

If-Else文

if-else文は最も一般的な制御構造です。現実生活での決断を思い浮かべると良いでしょう。以下に簡単な例を示します:

int age = 18;
if (age >= 18) {
System.out.println("あなたは投票できます!");
} else {
System.out.println("申し訳ありません。あなたは投票する年齢ではありません。");
}

このコードでは、age変数が18歳以上かどうかを確認しています。それがtrueの場合、投票できると表示します。falseの場合は、投票する年齢でないと伝えます。簡単ですね!

Switch文

複数の条件を確認する場合に非常に便利なswitch文があります。複数のif-else文を書くより効率的な方法と考えられます。Java 11ではswitch文にいくつかの素晴らしい改善が加えられました。以下に例を示します:

String day = "Monday";
switch (day) {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" -> System.out.println("平日");
case "Saturday", "Sunday" -> System.out.println("週末");
default -> System.out.println("無効な日");
}

このswitch文はday変数を確認し、平日か週末かを表示します。矢印構文(->)はJava 11で新しく導入され、コードをより簡潔にします。

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

オブジェクト指向プログラミング(OOP)はJavaの基本概念です。レゴブロックで物を作るようなものです。異なるオブジェクトを生成し、それらが互いに作用してプログラムを形成します。

クラスとオブジェクト

クラスはオブジェクトを作成するための青写真です。以下に車を表す簡単なクラスを示します:

public class Car {
String make;
String model;
int year;

public void startEngine() {
System.out.println("Vroom! The " + year + " " + make + " " + model + " is starting.");
}
}

このクラスからオブジェクトを作成しましょう:

Car myCar = new Car();
myCar.make = "Toyota";
myCar.model = "Corolla";
myCar.year = 2021;
myCar.startEngine();

このコードを実行すると、「Vroom! The 2021 Toyota Corolla is starting.」と表示されます。

Javaのビルトインクラス

Javaには私たちの生活をより簡単にするための豊富なビルトインクラスがあります。いくつか見てみましょう:

Stringクラス

Stringクラスはテキストを操作するためのものです。以下に例を示します:

String greeting = "Hello, World!";
System.out.println(greeting.length());  // 表示: 13
System.out.println(greeting.toUpperCase());  // 表示: HELLO, WORLD!

ArrayListクラス

ArrayListは必要に応じて増減できる動的配列です:

import java.util.ArrayList;

ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
System.out.println(fruits);  // 表示: [Apple, Banana, Cherry]

Javaのファイル操作

ファイル操作はファイルからの読み取りと書き込みに非常に重要です。Java 11では、これをより簡単にする新しいメソッドが導入されました:

import java.nio.file.Files;
import java.nio.file.Path;

String content = "Hello, Java 11!";
Path filePath = Path.of("example.txt");
Files.writeString(filePath, content);

String readContent = Files.readString(filePath);
System.out.println(readContent);  // 表示: Hello, Java 11!

このコードは文字列をファイルに書き込み、その後読み取ります。writeStringreadStringメソッドはJava 11で新しく導入されました。

Javaのエラーアンドエクセプション

エラーやエクセプションはプログラミングの道の上の bump と pothole です。Javaはそれらを優雅に処理する手助けをしてくれます:

try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("oops! zeroで割ることはできません。");
} finally {
System.out.println("エラーがあってもなくても常に実行されます。");
}

このコードは0で除算を試み(数学ではNG)、その結果のエクセプションをキャッチし、親切なメッセージを表示します。

Javaのマルチスレッディング

マルチスレッディングは jongler 一样です。プログラムが同時に複数のことを行うことを許可します。以下に簡単な例を示します:

class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getId() + " 値 " + i);
}
}
}

public class Main {
public static void main(String args[]) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start();
t2.start();
}
}

このコードは2つのスレッドを作成し、同時に実行します。

Javaの同期

複数のスレッドが共有リソースにアクセスする場合、競合を避けるために同期させる必要があります。交差点の交通信号のように考えます:

class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public int getCount() {
return count;
}
}

synchronizedキーワードは、一度に1つのスレッドだけがincrementメソッドを実行できることを保証します。

Javaのネットワーキング

Javaはネットワークアプリケーションを簡単に作成できるようにします。以下に簡単なサーバーを示します:

import java.net.*;
import java.io.*;

public class SimpleServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("サーバーはポート8080でリスニング中");
Socket socket = serverSocket.accept();
System.out.println("クライアントが接続しました");
}
}

このサーバーはポート8080でリスニングし、クライアントが接続するとメッセージを表示します。

Javaのコレクション

Javaのコレクションはオブジェクトを格納するための異なる種類のコンテナです。いくつか見てみましょう:

List

import java.util.*;

List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
System.out.println(fruits);  // 表示: [Apple, Banana]

Set

Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(1);  // 重複は追加されません
System.out.println(numbers);  // 表示: [1, 2]

Map

Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
System.out.println(ages.get("Alice"));  // 表示: 25

Javaのインターフェース

インターフェースはクラスが従う約束事のようなものです。以下に例を示します:

interface Animal {
void makeSound();
}

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

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

DogCatの両方がAnimalインターフェースを実装し、makeSoundメソッドを提供します。

Javaのデータ構造

データ構造はデータを組織化して格納する方法です。以下に簡単なリンク드リストを示します:

class Node {
int data;
Node next;

Node(int d) { data = d; }
}

class LinkedList {
Node head;

public void add(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}

public void print() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}

public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.print();  // 表示: 1 2 3
}
}

このコードはシンプルなリンクドリストデータ構造を実装しています。

Javaのコレクションアルゴリズム

Javaはコレクションを操作するための多くの便利なアルゴリズムを提供します。以下にソートの例を示します:

import java.util.*;

List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5));
Collections.sort(numbers);
System.out.println(numbers);  // 表示: [1, 1, 2, 3, 4, 5, 5, 6, 9]

高度なJava

進むにつれて、より高度なJavaの概念に遭遇するでしょう。その一つはラムダ式です。Java 8で導入され、Java 11で更に改善されました:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(n -> System.out.println(n * 2));

このコードはラムダ式を使用して各数を2倍にして表示します。

Javaの雑多な機能

Java 11はいくつかの雑多な機能を導入しました。その一つはvarキーワードで、ローカル変数の型推論を行います:

var message = "Hello, Java 11!";
System.out.println(message);

コンパイラがmessageがStringであることを推論します。

JavaのAPIとフレームワーク

Javaには広範なAPIとフレームワークのエコシステムがあります。その一つはSpring Bootです。以下に簡単な「Hello World」Spring Bootアプリケーションを示します:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class HelloWorldApplication {

public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}

@GetMapping("/")
public String hello() {
return "Hello, World!";
}
}

このアプリケーションはルートURLにアクセスすると「Hello, World!」と応答します。

Javaのクラス参照

Javaは実行中にクラスへの参照を取得することができます。以下に例を示します:

Class<?> stringClass = String.class;
System.out.println(stringClass.getName());  // 表示: java.lang.String

Javaの便利なリソース

Javaを学ぶためのいくつかの便利なリソースを以下に示します:

  1. Oracleの公式Javaドキュメント
  2. CodecademyのJavaコース
  3. 「Head First Java」書籍
  4. Stack Overflow(質問をするため)

新機能

Java 11はいくつかの新機能を導入しました。以下にその一部を表にまとめます:

機能 説明
ローカル変数のシンタックス برایラムダパラメータ ラムダ式でvarを使用可能
标準的なHTTPクライアント 标準的なHTTPクライアントAPI
単一ファイルソースコードプログラムの起動 Javaソースファイルを直接実行可能
Stringメソッド 新しいメソッド(isBlank(), lines(), strip()など)
Filesメソッド 新しいメソッド(readString(), writeString()など)

Java 11の whirlwindツアー到这里で終わりです!コードを学ぶことは新しい言語を学ぶのと同じで、練習、忍耐、続行が必要です。すぐにすべてを理解できない場合でもがっかりしないでください。コードを書き続け、実験を続け、最も重要なのは楽しむことです!間もなく、あなたは複雑なJavaアプリケーションを書けるようになり、最初はどのように難しかったかを驚くでしょう。ハッピーコーディング!

Credits: Image by storyset