- 1. [Java] 素数判定プログラム
- 2. 【備忘録】Java言語でyyyy/MM/ddを最速で取得する
- 3. オブジェクト指向
- 4. πをJavaで求めてみる(約500桁)
- 5. 仮想スレッドのスレッドダンプ採取方法
- 6. Clean Code – Chapter 7: Exceptionハンドリング
- 7. 【デザインパターン】Singletonパターンについて学習
- 8. Thymeleafのバリデーションエラー時にIllegalStateException発生した
- 9. Java 23の新機能「JEP 467: Markdown Documentation Comments」の内容を確認してみた
- 10. JavaSilver取得もといJavaの学習に役立った勉強法
- 11. Javaで「UnrecoverableKeyException」エラー
- 12. MacBookにJDKをインストール~設定確認まで
- 13. ラムダ式とメソッド参照 – 備忘録
- 14. 関数型インタフェースのチートシート
- 15. JBossEAP上のアプリケーションでlog4jからlog4j2にバージョンアップ
- 16. Spring Boot備忘録
- 17. IBM SDK, Java Technology EditionとIBM Semeru Runtimeで使用可能なCharsetの差について
- 18. Libertyで Spring Boot 3 を動かす
- 19. 【Java】StringUtilsのメソッドが便利だった件
- 20. import文のjavaxとjakartaのちがいは?
[Java] 素数判定プログラム
# 素数とは
そもそも素数とは何なのか(ほとんどの人はわかっていると思いますが)素数(そすう、英: prime あるいは prime number)とは、2 以上の自然数で、正の約数が 1 とその整数自身のみであるもののことである。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
# Javaで素数判定プログラム書いてみた
・**自然数以外が入力されるのを防ぐ**ために、入力を求める文言を”自然数を入力してください”としました
・**1は自然数ではないので最初にif文で除外**しました多くの素数判定プログラムでは、自然数が入力されるのが**暗黙の了解**みたいになっていますが、”自然数を入力してください: “のように指定してあげると親切?だと思います。
Pythonですが、下のリンク先内の実装例では、 n = int(input(‘素数判定したい3以上の整数nを入れてね。n=’))と親切に書かれていました。
私が書いたコードはこちらです。
~~~Java:PrimeNumber.j
【備忘録】Java言語でyyyy/MM/ddを最速で取得する
### 結論
“`java
import java.time.LocalDate;
LocalDate.now().format(DateTimeFormatter.ofPattern(“yyyy/MM/dd”))
“`### 前提
#### ・Java 1.8以降
### 使うメリット
:::note info
SimpleDateFormatを使う場合に比べ、ちょっとコードが短い
:::
:::note info
日付を加算・減算したい場合においては、SimpleDateFormatを使う場合に比べ、遥かにコードが短い
:::#### ソースコード(Java 23を体験したかったので、Java 23用のコードです)
“`java:Java23_LocalDate.java
import java.time.LocalDate;void main() {
// 現在日を出力
println(LocalDate.now().format(DateTimeFormatter.ofPattern(“yyyy/MM/dd”)));// 7日前
オブジェクト指向
1、Javaオブジェクト指向についてまとめてみました。
かみ砕いた用語バージョン
オブジェクト指向って何?
オブジェクト指向は、プログラミングの考え方の一つで、身の回りのものをそのままプログラムで表現しようという方法です。オブジェクトって何?
「オブジェクト」は日本語で「物」や「対象」という意味です。
例えば、ゲームを作るときに「キャラクター」や「アイテム」を考えますよね。これらがオブジェクトです。
属性(attribute):オブジェクトの特徴です。例えば、キャラクターの「名前」や「体力」など。
動き(メソッド):オブジェクトができることです。例えば、キャラクターが「攻撃する」や「ジャンプする」など。クラスとオブジェクトの関係
クラス:オブジェクトの設計図やひな型です。例えば、「犬」というクラスを作ると、そこから「ポチ」や「コロ」という具体的な犬(オブジェクト)を作れます。
オブジェクト:クラスをもとに作られた実際のものです。なぜオブジェクト指向が便利なの?
分かりやすい:現実のものと同じように考えるので、頭の中でイメージしやすい。
使い回せる:一度作ったクラスは何度
πをJavaで求めてみる(約500桁)
## PI の求め方
tan(45度) = tan(π / 4) =1 は、ご存知かと思います。
tanの逆関数を arctanとすると
π / 4 = arctan(1) となります。
両辺を4倍すると
π = 4 * arctan(1) となります。## arctanの求め方
テーラー展開により求める事ができます。
私は、こちらのページを参照しました。## ところが、arctan(1)は収束が遅い
WikiPediaによると、色々な公式が考案されています。
https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%81%E3%83%B3%E3%81%AE%E5%85%AC%E5%BC%8F
マチンの公式は有名ですが、これでもまだまだ収束が遅いので、このページの下の方にある公式を、あさります。
3項以上の公式のうち、一番左の計算が遅いので、
これが小さな値のものを探します。ガウスによる公式 ==> 一番左が (1 / 18)
スト
仮想スレッドのスレッドダンプ採取方法
# 仮想スレッドのスレッドダンプ採取方法
JDK21で仮想スレッドが導入されました。
この仮想スレッドのスレッドダンプを採取するには jcmd の Thread.dump_to_file コマンドを使用します。
Thread.dump_to_file コマンドは以下の形式で指定します。
“`
jcmd <プロセスID> Thread.dump_to_file [-overwrite] [-format={text,json}] <ファイルパス>
“`オプション -overwrite は出力ファイルを上書きします。
このオプションをつけない場合、出力ファイルが存在するとエラーになります。
オプション -format は出力形式をテキスト形式(text)、またはJSON形式(json)にします。デフォルトは text です。従来のスレッドダンプ採取方法である kill -QUIT や jcmd
Thread.print では採取できません。スレッドダンプは出力されますが、仮想スレッドに関する情報は出力されません。 ## 出力例
テキスト形式での出力例(抜粋
Clean Code – Chapter 7: Exceptionハンドリング
[Clean Code アジャイルソフトウェア達人の技](http://www.amazon.co.jp/Clean-Code-%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%81%94%E4%BA%BA%E3%81%AE%E6%8A%80-Robert-Martin/dp/4048676881)の本を整理した内容です
# 7 章 エラーハンドリング
実務でサービスを開発していると、様々な状況に対してエラーを予想し例外処理を行いますが、実際にユーザーがサービスを使用する際には予期しないエラーが発生することもあります。
したがって、開発者はさまざまな場合を考慮してエラーを防止する必要があります。しかし、だからといって無闇に例外処理を行うべきではありません。この章では、よりクリーンで堅牢なコードに適用できるように、エレガントで上品なエラーハンドリングの技法と考慮事項をいくつか紹介します。
## 1. エラーコードより例外を使
【デザインパターン】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
Consumercon = str -> System.out.println(str);
con.accept(“Hello”); // Helloが表示される
“`### Supplier\
メソッド:`T get()`
引数を取らずに、何かを返す処理を作るのに使用
“`java:Supplier
Suppliersup = () -> “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