私がJavaを学ぶにあたって、一番基礎となる最初に最低限押さえるべき内容についてまとめてみました。
目次
Javaとは
- コンパイラ言語化つオブジェクト指向言語
- Javaで作成されたアプリは、Java仮想マシンの上で動作する
- 仮想マシンがプラットフォームごとの違いを吸収する
- ガベージコレクションという仕組みによりメモリが自動化され、開発者がメモリ解放などを意識する必要がない
オブジェクト指向
プログラムの中で扱う対象が全てモノ(オブジェクト)と捉え、組み合わせてアプリを形成する手法のこと
ポリモーフィズム
- オブジェクト指向プログラミングにおける重要な概念の一つで、英語での意味は「多態性」
- 同じメソッド名やインターフェースを持つ複数のクラスが、それぞれ異なる振る舞いをすることができる特性
ポリモーフィズムを利用することで、新しいクラスを追加しても、既存のコードに影響を与えずに、既存機能を再利用できます。ポリモーフィズムはオブジェクト指向の柱として、保守性と拡張性を高める重要な機能です。
カプセル化
- オブジェクト指向の重要な概念の一つで、データとそれを操作するメソッドをオブジェクト内部にまとめること
- 外部から直接データにアクセスすることが制限され、データの安全性や一貫性を保つことができる
- オブジェクトの内部実装を隠蔽する役割も果たし、部から見たインターフェース(公開されているメソッド)に変更がなければ、内部の実装を変更しても、他のクラスに影響を与えることなく保守性を高めることができる
カプセル化は、オブジェクト指向の特徴であり、安全性や保守性を確保するために重要な考え方です。
適切にカプセル化されたクラスは、コードの理解や保守が容易になります。
基本構文関連
if文とfor文の使い分け
if | 変数nの値が特定の値よりも大きい(小さい)ときにある処理を実行させたい場合 or 複数の変数や条件を組み合わせて分岐させたい場合 |
switch | 変数が3つ以上の値をとり、値によって処理を振り分けたい場合 |
for文とwhile文の使い分け
for | 繰り返しの回数が決まっている場合 |
while | 繰り返しの回数が決まっておらず、条件を満たしている限り処理を繰り返したい場合 |
用語
インターフェイス
インターフェイスとは
- メソッドは全てオーバーライド前提の抽象メソッド
- クラスに含まれるメソッドの具体的な処理内容を記述せず、変数とメソッドの型のみを定義したもの
- クラスが実装しなければならないメソッドの一覧を定義する「契約」のようなもの
- クラスがインターフェイスを実装すると、定義されたメソッドを必ず実装しなければならない
インターフェイスのメリット
- 異なるクラスが同じメソッド名を持つことができる
- これにより、多様な実装を持つオブジェクトを一貫して扱うことができる
コード例
interface Shape {
double calculateArea();
}
class Circle implements Shape {
double radius;
Circle(double radius) {
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}
コンストラクタ
コンストラクタとは
- クラスのインスタンスが生成される際に呼び出される特別なメソッド
- 主にオブジェクトの初期化を行うために使用される
コンストラクタのメリット
- オブジェクトの初期化を保証するために使用され、不正な状態を防ぐ役割
- オブジェクト生成時に必要な情報を提供し、初期化の手間を減少させる
コード例
class Person {
String name;
Person(String name) {
this.name = name;
}
}
// インスタンスの生成と初期化
Person person = new Person("Alice");
ジェネリクス
ジェネリクスとは
- クラスやメソッドをより一般的かつ再利用可能にするための仕組み
- 異なるデータ型に対しても同じコードを使用できるようにする
- 汎用的なクラス / メソッドに対して特定の方を割り当てて、その型専用のクラスを生成する機能
ジェネリクスのメリット
- 型安全性を確保しながら、異なるデータ型に対して同じコードを再利用できる
- コードの冗長性を減少させ、バグの可能性を低減する
コード例
class Box<T> {
private T content;
void add(T item) {
content = item;
}
T get() {
return content;
}
}
// ジェネリクスを使ったインスタンス生成
Box<Integer> intBox = new Box<>();
intBox.add(42);
int value = intBox.get();
コレクション
コレクションとは
- 複数の要素をまとめて管理するためのデータ構造
- List、Set、Mapなどがあり、さまざまな操作が可能
コレクションのメリット
- 複数の要素を効率的に管理し、検索・挿入・削除などの操作を容易に行える
- 異なる種類のコレクションを選択してデータを管理できるため、ニーズに合わせた柔軟なプログラミングが可能
コード例
import java.util.List;
import java.util.ArrayList;
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
for (String name : names) {
System.out.println(name);
}
スレッド
スレッドとは
- プログラム内で並行して実行される個々の処理の流れ
- マルチスレッドプログラミングにより、複数の処理を同時に実行できる
- マルチスレッドプログラミングとは
-
- 複数のスレッド(並行して実行される処理の単位)を使用して同時にタスクを実行するプログラミング手法
- 単一のプログラム内で複数のスレッドを活用することで、複数のタスクを同時に実行し、プログラムの効率性と応答性を向上させることができる
スレッドのメリット
- マルチスレッドプログラミングにより、複数のタスクを同時に実行できる
- 処理速度の向上や、非同期な操作の実現などが可能になる
コード例
class MyThread extends Thread {
public void run() {
System.out.println("Thread is running");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); // スレッドの実行開始
}
}
ラムダ式
ラムダ式とは
- 簡潔な記法で匿名関数を表現するための方法
- 主に関数型プログラミングの概念を導入し、コードの簡素化や柔軟性を提供する
ラムダ式のメリット
- 匿名関数を簡潔に表現でき、コードの可読性や保守性を向上さる
- 特に、コレクションの操作や並列処理など、短いコードブロックを記述する場面で有用
コード例
interface MathOperation {
int operate(int a, int b);
}
public class Calculator {
public static void main(String[] args) {
MathOperation add = (a, b) -> a + b;
System.out.println(add.operate(5, 3)); // 出力: 8
}
}
ストリーム
ストリームとは
- コレクションや配列などのデータを処理するための高レベルな抽象化
- フィルタリング、マッピング、集約などの操作を連鎖的に行うことができる
ストリームのメリット
- コレクションの操作をシンプルで組み合わせやすい形で提供する
- フィルタリングやマッピング、リダクションなどを簡潔に記述でき、コードの可読性が向上する
コード例
import java.util.stream.*;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(Integer::intValue)
.sum();
System.out.println("Sum of even numbers: " + sum); // 出力: 6
}
}
HTTPプロトコル
HTTPプロトコルとは
- ウェブ上でデータをやり取りするためのルールや規約のセット
- ウェブブラウジングやウェブアプリケーションの通信など、インターネット上で情報を送受信する際に使用される基本的なプロトコル
- HTTPは、クライアント(ブラウザなど)とサーバーとの間で、要求と応答を交換するために使用される
HTTPリクエスト
- HTTPリクエストは、クライアントがサーバーに対して行う要求のこと
- クライアントが特定のアクション(例: ウェブページの取得、データの送信)を要求する際に使用される
メソッド | 要求の種類を示す(GET、POST、PUTなど) |
リソースのパス | 要求するリソース(ウェブページ、データなど)の場所を指定する |
ヘッダー | クライアントや要求に関する情報を含む |
ボディ | 必要な場合、データを含むことができる(例: POSTリクエストでのデータ送信) |
HTTPレスポンス
- HTTPレスポンスは、サーバーがクライアントに対して返すデータのこと
- クライアントが行ったHTTPリクエストに対して、サーバーが必要な情報や応答を返す
ステータスコード | 要求の結果を示す3桁の数字です(例: 200 OK、404 Not Found) |
ヘッダー | レスポンスやサーバーに関する情報を含みます |
ボディ | : リソースのデータを含みます(例: ウェブページのHTMLコンテンツ) |
ステータスコード
200 OK | リクエストが成功し、リソースが正常に返されたことを示す ウェブページの取得や成功したAPI呼び出しなどで使用される |
201 Created | リクエストによって新しいリソースが作成されたことを示す 通常、POSTメソッドが成功した場合に返される |
204 No Content | リクエストが成功し、レスポンスに本文データが含まれないことを示す 主にPUTやDELETEメソッドで使用される |
400 Bad Request | クライアントのリクエストが不正、無効、または理解できない場合に返される リクエストにエラーがあることを示す |
401 Unauthorized | 認証が必要なリソースに対して認証が失敗した場合に返す アクセス権限が不足していることを示す |
403 Forbidden | クライアントにリソースへのアクセス権限がない場合に返す 認証されていてもアクセスが許可されていないことを示す |
404 Not Found | リクエストしたリソースが存在しない場合に返す URLやリソースが見つからないことを示す |
500 Internal Server Error | サーバー内部でエラーが発生し、リクエストの処理ができない場合に返す サーバー側の問題を示す |
503 Service Unavailable | サーバーが一時的に過負荷状態であるか、メンテナンス中であるためリクエストに応答できない場合に返す |
その他プログラミング全般
命名について
命名は以下のように設定することが多い
変数 | キャメルケース(userName) |
クラス | パスカル記法(UserName) |
定数 | アンダースコア記法(USER_NAME) |
JSP & サーブレット
こちらは別記事でまとめます。
[近日作成予定]
関連技術
JavaでWebアプリケーションを作成するために必要な関連技術です。
それぞれ別記事にてまとめていきます。
データベースとSQL
[近日作成予定]
フレームワーク
[近日作成予定]
バージョン管理システム
[近日作成予定]
コメント