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

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

【デザインパターン】Singletonパターンについて学習

# はじめに

デザインパターンの Singleton を学習した際の内容を整理しました。

# Singleton パターン

シングルトンパターンは、クラスのインスタンスが 1 つしか存在しないことを保証するデザインパターン。

# 利用目的

アプリケーション全体で一つのインスタンスだけが必要な場合に使用する。
具体的な利用例は次に掲げるものなど。

– 設定管理や構成データの共有
例えば、アプリケーション設定や環境変数を一つのインスタンスで管理し、全体で共有する場合。
– データベース接続の管理
データベース接続プールを1つのインスタンスとして保持し、それを複数の部分で再利用する場合にシングルトンパターンを使う。こうすることで、無駄な接続が作成されることを防ぎ、リソースを効率的に利用できる。
– グローバルにアクセスするリソース
グローバルにアクセスされるリソース、例えばプリンターやファイルシステム、外部 API のクライアントなどを 1 つのインスタンスで共有し、管理する際に使用する。

# 注意点

– テストが難しい
シングルトンはグローバルな状態を持つた

元記事を表示

Thymeleafのバリデーションエラー時にIllegalStateException発生した

## 解決法
`th:object`に入れる変数を、バリデートを設定しているクラス名(キャメルケース)に合わせる

## 事象
– 以下1~3を実装し、バリデートにかかる状態で「登録」を押すと例外が発生してしまった
– 例外は `java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name ‘newForm’ available as request attribute`(newFormがダメなようなエラー)

## 修正前の実装

### 1. Formクラス
– nameに「1以下のサイズを許可」するバリデートを設定
“`Java
@Data
public class SampleForm {
@Size(max = 1)
private String name;
}
“`
### 2. Controllerクラス
– 1.のFormクラスを使って画面表示と入力内容の取得をしている
– Formクラスは「newForm」という属性名になっている
“`

元記事を表示

Java 23の新機能「JEP 467: Markdown Documentation Comments」の内容を確認してみた

# はじめに

ちょっと前の話ですが、いつもみてるPublickey[^1] に以下の記事がでました。
[「Java 23」正式リリース。JavaDocのコメントでマークダウンが使えるように、ジェネレーショナルZGCがデフォルトになど新機能](https://www.publickey1.jp/blog/24/java_23javadoczgc.html)

「へえー、マークダウン使えるようになったんだ」ぐらいにしか思ってなかったのですが、せっかくなので具体的にどうなるのか調べてみた内容をメモがてら書いておきます

# 概要について

本件はJava 23で正式にリリースされた
[Markdown Documentation Comments](https://openjdk.org/jeps/467)
の内容となります。

# Markdown Documentation Commentsについて

本機能の目的は

> Enable JavaDoc documentation comments to be written in Markdown rather than solely

元記事を表示

JavaSilver取得もといJavaの学習に役立った勉強法

## 目次
– [前提](#前提)
– [初心者時代の勉強法3選](#初心者時代の勉強法3選)
– [YoutubeやUdemyの動画教材](#youtubeやudemyの動画教材)
– [Paizaラーニングのようなプログラミング学習サイト](#paizaラーニングのようなプログラミング学習サイト)
– [MineCraftのMOD制作](#minecraftのmod制作)
– [現在プログラミング関連で取り組んでいること](#現在プログラミング関連で取り組んでいること)
– [まとめ](#まとめ)

## 前提
インフラエンジニアになった私ですが、8月4日にJavaSilverに合格いたしました。
合格レポートとして記事を書こうとも思いましたが、「それだとあまり面白くないかな…?」とか「[大先輩の偉大な記事](https://qiita.com/ist-a-ku/items/9ddd264303f34fb65e16)があるので二番煎じかな?」などと思いが巡り、なかなか記事が書けておりませんでした。

ということで趣向を変え、この記事では参考書を使ったJavaSil

元記事を表示

Javaで「UnrecoverableKeyException」エラー

Javaでの「UnrecoverableKeyException」エラーは、一般的にキーストア(Keystore)やトラストストア(Truststore)から秘密鍵や証明書を取得しようとする際に、パスワードが不正確な場合に発生します。このエラーは、以下のような原因によって引き起こされることが多いです。

## 主な原因:
#### 1. キーストアまたはトラストストアのパスワードが間違っている
キーストアファイル(例: .jks や .p12)にアクセスする際に使用するパスワードが誤っていると、秘密鍵を読み取ることができず、このエラーが発生します。

#### 2. エントリのパスワードが間違っている
キーストア内の個々のキーや証明書エントリには、キーストア自体とは別のパスワードが設定されていることがあります。キーストアのパスワードが正しい場合でも、特定のエントリを読み取るためのパスワードが間違っていると、同様にエラーが発生します。

#### 3. キーストアが壊れている
キーストアファイルが破損していたり、フォーマットが正しくない場合も、このエラーが発生する可能性があります。

#

元記事を表示

MacBookにJDKをインストール~設定確認まで

MacBookでJavaを利用するためにJDKをインストールし、設定確認まで行います。
※今回はHomebrewでインストールしていきます。

### 手順1 Homebrewを使用してJDKをインストールします。
MacBook標準搭載のターミナルに以下のコマンドを入力します。
“`
$ brew install –cask adoptopenjdk/openjdk/adoptopenjdk8
“`

### 手順2 JAVA_HOMEの設定
システムが適切なJava実行環境を利用できるようにするため、JAVA_HOMEを設定します。
まず以下のコマンドでインストールしたJDKのパスを確認します。
“`
$ /usr/libexec/java_home -V
“`
※この際、出力されたパスにJavaAppletPluginという文言がある場合、それはWebブラウザ用のプラグインで通常の開発環境で利用するためのJDKとは異なります

出力されたパスがJDKのものであることを確認したら、そのパスを使って.zshrcにJAVA_HOMEを設定します。
※.zshrcは隠しファイル

元記事を表示

ラムダ式とメソッド参照 – 備忘録

## ラムダ式
簡単に言うと「短くかける関数」

### ラムダ式の構文
“`:ラムダ式の構文
(引数) -> {実行したい処理}
“`
・`->`は「~を使って実行する」というイメージ

#### 例 : 値を受け取って処理をする
“`java:引数で受け取った値を2倍にする
(int a) -> { return a * 2; }
“`

### ラムダ式を使う場所
ラムダ式は、関数型インタフェースという「メソッドが一つだけあるインタフェースを実装する」場合に使われる。
[関数型インタフェースチートシート](https://qiita.com/nakayamasou00/items/8052bff62d6fe2b0a3bb)

#### 例 : Runnableインターフェースの実装
Runnableインタフェースはメソッドが1つ (runメソッド) だけの関数型インタフェース

“`java:Runnableインタフェースの匿名クラスでの書き方
Runnable r = new Runnable() {
@Override
public void run

元記事を表示

関数型インタフェースのチートシート

関数型インタフェースのチートシート
チートシートというより備忘録…のほうがいいかも…

### Runnable
メソッド:`void run()`
引数を取らずに何かを実行するためだけの処理を作るのに使用
“`java:Runnable
Runnable r = () -> System.out.println(“Hello”);
r.run(); // Helloが表示
“`

### Consumer\
メソッド:`void accept(T t)`
引数を1つ受け取り、何かを実行するが、戻り値は返さない処理を作るのに使用
“`java:Consumer
Consumer con = str -> System.out.println(str);
con.accept(“Hello”); // Helloが表示される
“`

### Supplier\
メソッド:`T get()`
引数を取らずに、何かを返す処理を作るのに使用
“`java:Supplier
Supplier sup = () -> “return

元記事を表示

JBossEAP上のアプリケーションでlog4jからlog4j2にバージョンアップ

# はじめに

JBoss EAP 7.4上のWebアプリケーションをlog4jからlog4j2にバージョンアップした。

# 環境
* java11
* Windows 11
* JBoss EAP 7.4.0
* TERASOLUNA Server Framework for Java 5.7.3.RELEASE (5.5からバージョンアップ)
* log4j 2.20.0 (1.2.17からのバージョンアップ)

mavenでビルドしている。

# やったこと
## loggerの変更
log4j2を使用するにあたり、loggerをLogManagerから取得するよう変更しました。

importするライブラリの変更
“`java
// import org.apache.log4j.Logger;
// ↓
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
“`
コード変更
“`java
//private static Logger logger = L

元記事を表示

Spring Boot備忘録

# Spring Boot主要アノテーション
・@RestController API作成
・@Configuration 色々設定する。外部APIもここで設定
・@Service 処理を作る
・@Dataを使い、データ型指定するだけでsetterとgetterを自動生成
・@Errorhandler エラー処理を渡すことができる
・@RequierdArgsConstructor インターフェースを引数付きコンストラクタで持ってくる
・@BeanでDI 自動管理させる
・@PostMapping データ追加
・@Transactional 別クラス呼ばれる時にDBトランザクション処理を行う
・@Qualifier Beanに登録する名前

Mybatisを使った場合
・@Mapperを使いデータベース接続
・@Select,@Update,@Insert,@Deleteを使ってデータベース操作出来る
恐らく2つ以上のコネクションを排他制御しないで使っているのが原因。

JPA使った場合
・@Entityでデータを持ってくる
・@Tableでテーブルを指定
・@IdでPrimar

元記事を表示

IBM SDK, Java Technology EditionとIBM Semeru Runtimeで使用可能なCharsetの差について

## IBM SDK, Java Technology Edition、IBM Semeru Runtime、IBM Semeru Runtime Certified Edition for z/OSのCharsetの一覧

IBM Semeru Runtimeのガイドには以下の記述があり、IBM SDKで使用できたCharsetの一部が使用できなくなっています。また、IBM Semeru Runtimeでも分散系とz/OS版でガイドの記述が異なるため、実機にて使用可能なCharsetを抽出して比較してみました。

Semeru Runtimes migration guide
/ Changes resulting from IBM deprecations and removals
https://www.ibm.com/support/pages/semeru-runtimes-migration-guide#changes-resulting-from-ibm-deprecations-and-removals
> The following codepages that we

元記事を表示

Libertyで Spring Boot 3 を動かす

# 目的

Libertyで Spring Boot 3 のプログラムをテストします。

# Spring Boot 3 プログラムのベースを入手

いつものDockerに用意するのではなく、Spring Boot 3 プログラムのベースを作成するところから説明します。
Spring Initializerで指定をしてプロジェクトをダウンロードします。

[Spring Initializer](https://start.spring.io/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262366/b3f8ea6c-06ad-f2cc-904a-83620e57006f.png)

画像のように指定して GENERATE ボタンを押してダウンロードします。
PackagingはWarにします。

# Eclipseにプロジェクトをインポート

ダウンロードした zip を Eclipseにインポートします。

zip は unzip しておきます。インポートするとそこがプロ

元記事を表示

【Java】StringUtilsのメソッドが便利だった件

# 概要
こんにちは!
本日はコードレビューで教わったJavaのtipsを書いてみます。

Javaを数年書いてるのに知らなかったので、
その念も込めた記事です笑

## StringUtilsについて
StringUtilsはString型の文字列操作で様々な操作ができるメソッドです!

レビューで教わった際もそうだったのですが、例えば
nullチェックが不要になる考慮があったりします。

公式サイト↓

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

### ChatGPTにも聞いてみた
文字列操作ってのは上記と同様で、「Apache Commons Lang」
というライブラリにて提供されているようですね。

:::note info
StringUtils は、一般的に 文字列操作 を行うための便利なメソッドを
提供するクラスやライブラリを指します。

特に、Javaの Apache Commons Lang ライブラリの一部として

元記事を表示

import文のjavaxとjakartaのちがいは?

**javaxとjakarta**の違いは、主にJavaのエンタープライズ技術における名前空間やプロジェクトの管理に関連しています。以下で詳しく説明します。

## 1. javaxとは?
##### 【歴史的背景】
 javaxは、かつてのJava EE(Java Platform, Enterprise Edition)で使用されていたパッケージ名です。Java EEは、エンタープライズ向けアプリケーション(特にサーバーサイドアプリケーション)の開発に用いられる標準化されたAPIセットで、Oracleが主導していました。
##### 【主要な技術】
Java EEには、javaxパッケージ内にサーブレット、JSP、JPA、EJBなど、エンタープライズ向けの重要な技術が含まれています。例として、javax.servletやjavax.persistenceなどがあります。
## 2. jakartaとは?
##### 【歴史的背景】
 2017年、OracleはJava EEの権利をEclipse Foundationに移管しました。この移管により、Java EEはJakarta E

元記事を表示

Javaにおける2進数の具体的な活用例

# Javaにおける2進数の具体的な活用例

システム開発において、2進数(バイナリ)の理解は非常に重要です。Javaでは、ビット演算やビットフィールドを活用することで、効率的なコーディングや低レベルの操作が可能になります。以下に、Javaでの具体的な2進数の活用例をいくつか紹介します。

## 1. ビットフラグの管理

ビットフラグを使用すると、複数の状態やオプションを1つの整数値で管理できます。これにより、メモリの節約や処理の高速化が図れます。

### 例: ユーザー権限の管理

“`java
public class BitFlagExample {
// ビットフラグの定義
public static final int READ_PERMISSION = 0b0001; // 1
public static final int WRITE_PERMISSION = 0b0010; // 2
public static final int EXECUTE_PERMISSION = 0b0100; // 4
pub

元記事を表示

Java環境の設定とH2データベースサーバーの起動方法

# Java環境の設定とH2データベースサーバーの起動方法

この記事では、Windows環境におけるJavaの環境変数設定方法と、H2データベースサーバーの起動方法について詳しく解説します。特に、`JAVA_HOME`や`PATH`の設定方法、クラスパスの重要性、そしてH2サーバーをコマンドラインから起動する際の手順に焦点を当てます。

## 目次

1. [Java環境変数の設定](#java環境変数の設定)
– [`JAVA_HOME` の設定](#java_home-の設定)
– [`PATH` 変数の更新](#path-変数の更新)
2. [H2データベースサーバーの起動](#h2データベースサーバーの起動)
– [コマンドの詳細](#コマンドの詳細)
– [実行例](#実行例)
3. [クラスパスと参照設定の関係](#クラスパスと参照設定の関係)
– [クラスパスとは?](#クラスパスとは)
– [参照設定との類似点](#参照設定との類似点)
4. [バッチファイルの作成と実行](#バッチファイルの作成と実行)
– [バッ

元記事を表示

10月なので言語のサ終を確認しましょう

そろそろ10月.
iPhoneが出るような季節には,言語のバージョンも確認するのをルーティンにしたいですね….
サ終している環境でリリースや構築して面倒なことにならないために….

よく使う3種の言語について個人的にまとめておきます.

## Python

2024年10月のイベント

* 3.8 系が end-of-life(サポート終了)
* 3.13 系が prerelease

3.12 は9月末まで bugfix だったので,3.11 あたりをメインの開発環境に据えたいところ….

https://devguide.python.org/versions/

|version|status|firstRelease|end-of-life|
|:–|:–|:–|:–|
|3.13|prerelease|**2024/10/01**|2029/10|
|3.12|bugfix|2023/10/02|2028/10|
|3.11|security|2022/10/24|2027/10|
|3.10|security|2021/10/04|2026/10|
|3.9|se

元記事を表示

JavaでPDFの表データをテキスト、CSV、およびExcelファイルに抽出する方法

PDFに埋め込まれた表データを正確に抽出し、テキスト、CSVファイル、またはExcelワークシートなど、より分析しやすく操作可能な形式にシームレスに変換することは、重要なドキュメント処理のスキルです。Javaを使用して、このプロセスを簡単に実現できます。本記事では、**Javaを使ってPDF文書から表データを抽出**し、**テキストファイル、CSVファイル、Excelワークシートに書き込む**方法をご紹介します。

– **[JavaでPDFの表をテキストファイルに抽出](#javaでpdfの表をテキストファイルに抽出)**
– **[JavaでPDFの表をCSVファイルに抽出](#javaでpdfの表をcsvファイルに抽出)**
– **[JavaでPDFの表をExcelファイルに抽出](#javaでpdfの表をexcelファイルに抽出)**

この記事で使用する方法は、主に無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)ライブラリを必要とします。

元記事を表示

BLE初心者へ、AndroidのBLE機能を実装する上で知っておくと良いこと

## BLE実装の全体の流れは、以下のとおりです
1. `スキャン`を開始する
1. `アドバタイズ`しているBLE機器を発見する
1. `ボンディング`または`ペアリング`を行う
1. `Gatt`を介してBLE機器に`コネクト`する
1. `Gatt`を介して通信する
1. `サービス`を`ディスカバー`する
1. `キャラスタリスティック`を取得する
1. `コマンド`を送信する
1. `通知`を有効にする
1. 受け取ったデータで何かする

BLEの実装が初めての人は、何のことがわからないですよね。
以下を流し読めば、最後には処理の流れが理解できるようになっていると思います!
それでは、BLEの実装について説明していきます。

## BLE
– Bluetooth Low Energy のこと
– アプリ開発のBluetoothには、BLEの他に「Bluetooth Classic」がある

## Gatt(BluetoothGatt)
– スマートフォンと、BLE機器を接続するための、スマートフォン側がBLE機器に対して作る道のこと
– スマートフォンは、Gattを介して、B

元記事を表示

メモ オブジェクト、インスタンス、インスタンス変数とか

# インスタンス変数
“`
class Dog {
String name; // インスタンス変数
int age; // インスタンス変数

// コンストラクタでインスタンス変数に値を設定
Dog(String name, int age) {
//this.nameはインスタンス変数 thisは、現在のオブジェクトを指すキーワード
//nameは引数として受け取ったname
this.name = name;
this.age = age;
}
}
“`
インスタンス変数: 各インスタンスに属する変数で、オブジェクトの状態を表す。例: nameやage

# コンストラクタ

オブジェクトの初期化を行う
“`
// コンストラクタ
Car(String color, String model) {
this.color = color; // 引数で受け取った色をプロパティに設定
this.model =

元記事を表示

OTHERカテゴリの最新記事