JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

今更きけないpleiades-all-in-oneを使わないEclipseのインストールに役立つリンク集

## こちらがリンク集です!Eclipseを今日から始めましょう!

やり方としてはEclipseの日本語化の記事を読みながら①Eclipseをインストール、②Pleiadesのプラグインのダウンロードと展開をしてください。

[Eclipseのダウンロード](https://www.eclipse.org/downloads/)

[Pleiadesのプラグイン](https://willbrains.jp/)

[Eclipseの日本語化(Pleiadesプラグインの導入方法)](https://qiita.com/mizu4my/items/b63095c89464ac3b054c)

## JavaでHelloWorldを表示(Eclipseを使わず手動でやる場合)

Javaで「Hello, World!」プログラムを作成し、javacでコンパイルする手順を説明します。

## 1. ソースコードの作成

まず、テキストエディタを開き、以下のコードを入力します:

“`java
public class Hello {
public static void main

元記事を表示

java。URLエンコード。標準ライブラリ。spring frameworkのライブラリの例

## Java標準ライブラリを使用したURLエンコード

“`java
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class URLEncodeExample {
public static void main(String[] args) {
try {
String original = “こんにちは 世界!”;
String encoded = URLEncoder.encode(original, “UTF-8”);
System.out.println(“Original: ” + original);
System.out.println(“Encoded: ” + encoded);
} catch (UnsupportedEncodingException e) {
e.printStack

元記事を表示

java。base64エンコード。標準ライブラリ。spring frameworkのライブラリの例

## 標準ライブラリでのBase64エンコード

“`java
import java.util.Base64;

public class Base64Example {
public static void main(String[] args) {
String originalInput = “Hello, World!”;

// Base64エンコード
String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes());
System.out.println(“Encoded String: ” + encodedString);

// Base64デコード
byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
String decodedStri

元記事を表示

byte[] 型の配列が空であるかどうかを Java でチェックする

## 標準ライブラリ

“`java
byte[] byteArray = …; // ここに配列を初期化するコードが入ります。

if (byteArray == null || byteArray.length == 0) {
System.out.println(“The byte array is empty.”);
} else {
System.out.println(“The byte array is not empty.”);
}
“`

## Apache Commons Lang

“`java
import org.apache.commons.lang3.ArrayUtils;

byte[] byteArray = …; // ここに配列を初期化するコードが入ります。

if (ArrayUtils.isEmpty(byteArray)) {
System.out.println(“The byte array is empty.”);
} else {
System.out.println(“The byte

元記事を表示

(調査中)Java。JARファイル内にアクセスし、特定フォルダのファイル名のリスト作成

JARファイル内にアクセスして、特定のフォルダ内にあるファイルの名前リストを作成するためには、ClassLoaderやgetResourceAsStream()だけでは不十分です。JARファイル内は通常、ファイルシステムのように直接ディレクトリを探索できませんが、java.util.jar.JarFileやClassLoaderを活用してJARファイルのエントリを取得し、特定のフォルダに含まれるファイルのリストを作成できます。

以下は、その具体的な実装方法です。

コード例: JARファイル内の特定フォルダのファイル名をリスト化する

“`java
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.Enumeration;
import java.util.List;
import java.util.ArrayList

元記事を表示

Spring Securityの基本的な使い方

ログイン機能では、基本的に認証/認可が必要になります。これをいちいち実装すると、何らかのミスで脆弱性につながってしまいます。Spring Bootでは、Spring Securityという認証/認可のためのフレームワークが用意されていますので、こちらを用いてカスタムした方が得策です。本記事では、Spring Securityの基本的な使い方を紹介します。ただし、Spring Bootでのアプリケーションの作り方に関しては説明しません。

## 前提
### 環境

Java基礎文法Part3

まず、基本型とは、プログラミングで使われる最も基本的なデータの種類です。

イメージ: 数字や文字など、一つの値だけを持つシンプルなデータです。
Javaには8つの基本型があります。

整数を表す型:

byte:小さな整数(-128から127)
short:やや大きな整数(約-3万から3万)
int:一般的な整数(約-21億から21億)
long:非常に大きな整数
小数を表す型:

float:小数(単精度浮動小数点数)
double:より正確な小数(倍精度浮動小数点数)
文字を表す型:

char:一文字(例:’A’、’あ’)
真偽値を表す型:

boolean:真(true)か偽(false)の二つの値だけ
ポイント:

基本型は、データそのものを直接扱います。
計算が速く、メモリ(データを保存する場所)の使用量も少ないです。
例:
“`Java
int age = 15; // 年齢を整数で表す
double height = 160.5; // 身長を小数で表す
char grade = ‘A’; // 成績を一文字で表す
boolean

Java基礎文法Part2

今回はJavaの配列について記事にしたいと思います。
配列は、同じ種類のデータをまとめて一つに管理できる「箱」のようなものです。
たとえば、クラスのみんなのテスト点数をプログラムで扱いたいとします。一人一人の点数を別々の変数に入れると、とても大変です。

“`java
int score1 = 80;
int score2 = 90;
int score3 = 75;
“`

// 生徒が30人いたら、30個の変数が必要になります!
これでは効率が悪いので、配列を使って点数をまとめて管理します。

配列のイメージ
配列は、一列に並んだロッカーや引き出しのようなものです。
各引き出し(要素)には、データが一つずつ入っています。
配列全体に名前をつけて、引き出しごとに番号(インデックス)でアクセスします。
図で表すと:

“`css
配列 scores
+—–+—–+—–+—–+—–+
| 80 | 90 | 75 | 85 | 95 |
+—–+—–+—–+—–+—–+
[0] [1] [2] [

抽象クラスとインターフェース

今回は抽象クラスとインターフェースについて記事にしたいと思います。

抽象クラスとは?
「乗り物」の設計図を作りたいとします。でも、「乗り物」といっても、車や自転車、飛行機などいろいろありますよね。

抽象クラスは、「乗り物」という共通の特徴を持つ設計図のようなものです。
この設計図には、「走る」や「止まる」といった共通の動きが書かれています。
でも、「乗り物」だけでは具体的に何を作るかわかりません。直接使うことはできないのです。
そこで、この「抽象クラス」をもとにして、「車」や「自転車」といった具体的な乗り物の設計図(クラス)を作ります。

「車」は「乗り物」の特徴を受け継ぎつつ、エンジンやタイヤの数など、車特有の情報を追加します。
「自転車」も同様に、「乗り物」の特徴を持ちつつ、ペダルやギアなどを追加します。
つまり、抽象クラスは共通の部分をまとめた「未完成の設計図」で、これをもとに具体的なものを作るための基礎となります。

抽象クラス Vehicle(乗り物)
“`java
public abstract class Vehicle {
String name;
}

【デザインパターン】Facadeパターンについての備忘録

# 概要

Facade パターンとは、**複雑なサブシステムへのアクセスを簡単にするため**に、**サブシステムの複数のクラスをまとめて、統一したインターフェースを提供する**デザインパターンである。これにより、クライアントはサブシステムの内部の複雑さを意識せず、シンプルなインターフェースを通じて操作が可能となる。

# 利用目的

– クライアントが複数のサブシステムを操作する際に、シンプルなインターフェースを提供することで、システムの使いやすさを向上させる。
– サブシステムの詳細を隠蔽し、柔軟性とメンテナンス性を向上させる。
– 依存関係を減らし、サブシステムの変更をクライアントに影響させないようにする。

# 注意点

– Facade パターンを適用しすぎると、システムが単純化されすぎて、詳細な制御が必要な場合に柔軟性を失う可能性がある。
– Facade パターンは、サブシステムを完全に隠すものではなく、サブシステム自体も直接使用可能なことが多い。そのため、設計時にサブシステムへの直接アクセスが必要かどうかを検討することが重要である。

# 実装

“`java:App

Java Silver 試験中に気を付けたいこと

# はじめに

先日Java Silver (SE11)を取得したので、その時のノウハウを少し共有したいと思います。(合格体験記的なものではないです)

# 試験中に何を気を付けるか

Java Silverは結構というかかなり引っ掛けの問題が多いので、ボーっと解いていると簡単に点を落としてしまうと思います。そこで本記事では非常に簡単にではありますが、試験本番中に頭に片隅に入れておくことで3%くらい点数を伸ばせるかもしれないノウハウを紹介します。
(試験自体の学習が済んでいることを前提としているので、試験前日とかに確認するTips的なものとして捉えていただけると幸いです)

### 1. finalは初期化しないとエラー

finalの付いた変数は、初期化をしないとコンパイルエラーとなります。
特に気を付けたいのは、複数定義されているコンストラクタの中でfinalの変数が初期化されている問題です。一方のコンストラクタでは初期化されているのにもう一方では初期化されていない場合などがあるので、目を光らせておく必要があります。

例) 引数なしのコンストラクタではfinalの変数aが初期化

【デザインパターン】Adapterパターンについての備忘録

# 概要

アダプターパターンは、互換性のないインターフェースを持つクラス同士を接続するためのデザインパターンである。**異なるインターフェースを持つオブジェクト**を使いたい場合、**アダプタークラスを介して既存のクラスを新しいインターフェースに適合させる**。

# 利用目的

アダプターパターンは、**既存のクラスを再利用しつつ、そのクラスのインターフェースを変更したい**場合に使用される。例えば、新しいインターフェースに合わせて**既存のクラスを使いたいが、元のクラスを直接変更したくない場合**に有効である。特に、異なるライブラリや API を統合する際に便利である。

# 注意点

アダプターパターンは、既存のクラスに依存しているため、**クラスの内部構造や動作に変化があった場合、アダプターも修正が必要になることがある**。また、複雑なアダプターを作ると、設計が不必要に複雑になる場合があるため、**単純な解決策で済むならばアダプターパターンを使用するべきではない**。

# 実装

“`java:Target
// クライアントが使用するインターフェース
public in

【デザインパターン】Decoratorパターンについての備忘録

# 概要

デコレーターパターンは、既存のオブジェクトに新しい機能を追加するためのデザインパターンである。基本的な考え方は、**元のオブジェクトをラップし、動的に機能を拡張する**点にある。これにより、**サブクラス化せずに機能を追加でき**、柔軟で保守性の高い設計が可能となる。

# 利用目的

デコレーターパターンは、クラスの機能を動的に拡張する際に使用される。特に、複数の異なる拡張が必要な場合や、継承による設計が複雑になりすぎる場合に有効である。例えば、IO 処理において、バッファリングや圧縮、暗号化などの機能を重ねて適用する際に役立つ。

# 注意点

デコレーターパターンを過度に使用すると、オブジェクトが多層化してコードが複雑になり、可読性が低下する可能性がある。また、デコレータの連鎖が深くなると、デバッグやメンテナンスが難しくなる場合があるため、適切な設計が求められる。

# 実装

“`java:Component
// 機能追加したいコンポーネントのインターフェース
public interface Component {
void operation();

【デザインパターン】Observerパターンの学習備忘録

# 概要

Observer パターンは、あるオブジェクト(Subject)の状態が変化した際に、その変化を複数の依存するオブジェクト(Observer)に通知し、オブザーバーがその変化に対応する動作を実行できるようにするデザインパターンである。このパターンは、オブジェクト間の依存を減らし、柔軟な通知システムを実現するのに適している。

# 利用目的

– 状態が変わったときに、関連する他のオブジェクトに自動的に通知を行う必要がある場合。
– 監視対象(Subject)と監視者(Observer)間の結合度を低く保ちながら、柔軟な拡張を可能にする。
– イベントドリブンなシステムや、リアルタイムで更新が必要な UI コンポーネントなどに使用される。

# 注意点

– Observer の数が多い場合、通知処理が重くなる可能性がある。
– 通知する内容が多岐にわたる場合、通知内容を効率的に設計する必要がある。
– 循環参照や無限ループを避けるために、適切な管理が必要である。

# 実装

以下に、Observer パターンを Java で実装した例を示す。この実装では、状態を監視する`

【デザインパターン】Strategyパターンについて学習したことの備忘録

# はじめに
Strategyパターンについて学習したことの備忘録です。

# 概要

Strategy パターンは、アルゴリズムや処理の一部をカプセル化し、それらを相互に置き換え可能にするデザインパターンである。異なるアルゴリズムを必要に応じて柔軟に切り替えることができ、条件分岐に依存せずに動作を変更できるように設計する。これにより、特定の機能に対して複数のアルゴリズムを持つ場合、その実装を外部化して管理することが可能となる。
つまり、「やりたいこと」に対して、その「実現方法」が複数ある場合に、その選択、拡張、修正をやりやすくするためのパターン。

# 利用目的

– 実行時に異なるアルゴリズムを切り替える必要がある場合に利用する。
– クラスが複数の異なる動作を持つ場合に、条件分岐を使わずに動作をそれぞれ独立したクラスに分離する。
– アルゴリズムや処理を簡単に追加、変更、削除できるようにし、コードの拡張性を高めることが目的である。

# メリット

– **柔軟性**: アルゴリズムを実行時に容易に切り替えられる。
– **保守性**: それぞれのアルゴリズムが独立しているため、

SpringBoot開発で役に立つVSCode拡張機能

# SpringBoot開発役に立つVSCode拡張機能

Ecripseだけでなく、VSCodeの拡張機能でIDE相当にするために色々と拡張機能を追加しました。
Spring Bootを使用できるような開発機能が諸々ありましたので備忘録として残します。

# 追加した拡張機能

* XML Tools
https://marketplace.visualstudio.com/items?itemName=DotJoshJohnson.xml

* Japanese Language Pack for Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-ja

* Language Support for Java(TM) by Red Hat
https://marketplace.visualstudio.com/items?itemName=redhat.java

* Community Server Connectors

【デザインパターン】Factory Methodパターン学習備忘録

# はじめに

Factory Method を学習した際の備忘録をまとめました。

# 概要

オブジェクトの生成をサブクラスに委ねることで、インスタンス生成のプロセスを柔軟に設計するためのデザインパターン。クライアントコードが具体的なクラスに依存せずにオブジェクトを生成する柔軟な方法を提供する場面で有効。

# 利用目的

– オブジェクト生成のカプセル化
クライアント(利用者)にどの具象クラス(具体的なクラス)がインスタンス化されているかを隠し、依存性を減らす。
– インスタンス生成の柔軟性
サブクラスでオブジェクト生成のロジックを変更することができ、動的にインスタンスを変更することが可能。新しいクラスの追加が容易。新しいサブクラスを作るだけで新しいオブジェクトを生成できる。高い拡張性を持ちながら、クライアントコードが変更されずに済むことが多い。

# 注意点

クラスの数が増えがちで、シンプルなシステムには冗長に感じることがある。

# 実装
“`java:Creator.java
// Factory Methodを持つ抽象クラス
abstract class Cr

classって何?

# Javaにおけるclassの役割

筆者はC言語からプログラミング言語を学習していった人間である。classとは無縁だし、せいぜい作るとしてヘッダーファイルくらいだし、ヘッダーファイルを手動で読み込ませるのもおっくうだなと感じる人間であった。
そんな人間でもクラスとかオブジェクト指向を学ぶとめちゃ便利って感じることが多いように思える。
特に便利だなとか使いやすいなと感じる機会が多かったのがグローバル変数をめったに使わなくなったことでが多いと思う。C言語の場合、多重配列の変数を戻り値に設定する場合出来ず、ポインターで変数を変えるのもと考えるときにグローバル変数で戻してしまうことが多かったように感じるが、Javaだとそれもほぼほぼないと感じる。Javaは実務で書くようになって、C言語は趣味で書いていたというのもあるだろうが。
クラスの一番のメリットは他のクラスへの継承等ができるところであると思う。ヘッダーファイルを作って他のヘッダーファイルにコピーしようと思ったら、ベタ書きで書くなどの方法しか筆者は思いつかない。(あとは継承元のヘッダーファイルを読み込ませるとかはありそうではあるが)。

Java JDKインストール Ubuntu

JDKをUbuntuへのインストール方法を共有いたします。
環境:Apple M1 computer

cat /etc/os-relase
PRETTY_NAME=”Ubuntu 24.04.1 LTS”

システムを更新する。
$ sudo apt update

JDKバージョンを確認する。
$ apt-cache search openjdk

openjdk-17-jdk, openjdk-8-jdk, openjdk-21-jdkがありますけれど、21を選ぶ。

$ sudo apt install -y openjdk-21-jdk
OpenJDK version “21.0.4” 2024-07-16
OpenJDK Runtime Environment
OpenJDK 64-bit Server VM

$ javac -version
javac 21.0.4

テスト用のJavaコード
$ cat Hello.java
public class Hello{
public static void main(String[] args){

【SpringBoot]@Transactionalについて

## Transactionalアノテーションとは
「トランザクション」を利用するために必要なアノテーション。
「トランザクション」とは、データベースを利用する一連の処理を一括で実行する機能であり、処理中に例外が起こった場合は、自動でロールバックしてくれる。

## トランザクションを利用しなかった場合
データアクセス処理中に、途中で外部からデータベースにアクセスされ、データが変更されたりすると、データの整合性に問題が発生してしまう。そうしたトラブルを防ぐためにトランザクションは必要となる。

## 使い方
サービスクラスに「@Transactional」を付与することで、そのクラス内の全てのメソッドにトランザクションが適用される。
※特定のメソッドにのみ適用したい場合は、該当メソッドにのみアノテーションを付与する。

### 例:Controllerクラス
“`java:TestController.java
public class TestController {

@Autowired
TestService testService;

@PostM

言語 Java 17.x
フレームワーク spring boot 3.x
テンプレートエンジン thymeleaf
ビルドツール