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

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

【Spring Batch】~Stepについて~

## 前回の内容
[前回の記事](https://qiita.com/yommy/items/9156e5478c62053b4ba7)ではSpring Batchの簡単な概要とJobについて説明しましたが、今回はStepについて書いていければと思います。

## Stepの役割
まずSpring Batchの基本的な流れのイメージを持つことが大事なので、前回も張った下記の図を頭でイメージしてから読み進めてください。![spring-batch-reference-model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3669426/c3e3d71e-27d7-dad5-4a3c-9ad52dfcdd24.png)

Spring BatchのStepは、Jobの中で実行される一連の処理を定義する単位のことを言います。
Jobは複数のStepから構成され、それぞれのStepが特定のタスクを実行します。

Stepは主に以下の3つのフェーズに分かれます。
“`
1. ItemReader: データを

元記事を表示

Java 不変性 共変性 反変性

Java 11 Gold 取得に向けた学習記録

# 型推論
varによる型推論は、ローカル変数にしか利用できない。

型推論はコンパイル時に代入演算子の右辺の値を元に行われる。

また、配列の初期化時にも型推論が働く。

“`java
int[] array = {1, 2, 3};
“`

## ダイアモンド演算子`<>`による型推論

変数への代入時には、宣言した変数の型による型推論が行われる。

“`java:変数の型による型推論
// 型推論あり
List list = new ArrayList<>();

// 型推論なし
List list = new ArrayList();
“`

ジェネリクスに対して実行時に型引数を与えなかった場合、`Object`型を指定したものとして扱われる。

“`java:ジェネリクスの型推論
// 型引数を与えない
ArrayList list = new ArrayList<>();

// 型引数を与える
ArrayList list = new ArrayL

抽象クラスのメリット

抽象クラスの使いどころと聞いて何を思い浮かべるでしょうか?
インターフェイスを使っていると、抽象クラスの存在は霞んでしまいがちです
しかし、明確なメリットもあります
それは…

* **動的なフィールドを持てる事**

インターフェースには無い明確な個性です
何故なら、抽象クラスに対しインターフェイスは静的なインスタンスであるため、動的フィールドを自身で運用できないためです
抽象クラスは、これを高度に隠ぺいします

コード一覧

“`:Status.java
public abstract class Status{
private int hp,atk;

public Status(int hp,int atk){
this.hp=hp;
this.atk=atk;
}

protected void damage(Status target){
int curr

Javaで「文字列全体が正規表現パターンとマッチするか調べる」の動作を確認してみた

# 概要

Javaで「文字列全体が正規表現パターンとマッチするか調べる」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/string/index19.html

# 実装

以下のファイルを作成しました。
“`JSample19_1.java
class JSample19_1{
public static void main(String[] args){
String str1 = “airplane.png”;
String str2 = “lemon.png”;
String str3 = “apple.jpeg”;
String regex = “a.+png$”;

System.out.println(str1.matches(regex));
System.out.println(str2.matches(regex));
System.out.println(str3.matches(regex));
}
}
“`

以下の

【Java】ラムダ式のスコープ外の変数を参照できるのはどうしてなのか?

# ラムダ式について
## 疑問に思ったこと

* ラムダ式の外で作成した変数をラムダ式内で使えるのはどうして?

例えば下のソースコードを見てみる。

“`
public class DemoApplication {

public static void main(String[] args) {
Dog dog = new Dog();

Runnable runnable = () -> {
dog.call();
};

runnable.run();
}
}
“`
このソースコードは問題なく動くが少し納得いかないところがある。



納得いかないのはこの部分。

“`
Runnable runnable = () -> {
dog.call();
};
“`
ラムダ式はメソッドの中で関数を実装してインスタンスを作成している。

ラムダ式を使わずに書くと下のようになる。

※書き換えのバリエーションはほかにもあります

“`
public class Demo

【Java】double型での数値計算で気をつけること

### 前提
ご存知の方も多いかと思いますが、javaに限らずコンピュータではfloatやdoubleでの数値計算において浮動小数点数を用いているため、以下のように意図する正確な計算結果が得られない場合があります。
これは、計算効率を上げるためコンピュータが10進数から2進数に変換して計算していることが原因です。
小数を2進数に変換すると有限桁では表せないため、結果的に近似計算になるということです。

ref : https://seiai.ed.jp/sys/text/csc/ch12/c12a300.html

“`java
double x = 1.21;
double y = 0.1;
double z = x – y;
System.out.println(z); // 1.1099999999999999
“`
### 問題
計算機シミュレーションなど大規模な計算を行う場合は便利ですが、金額計算など正確な値が必要となる状況においては上のような誤差はできるだけ避けたいです。
例えば異なる通貨を介した計算などで遭遇しがちな問題でしょうか。

### 1. BigDecima

Javaのプロパティファイルのエスケープを使用したい

## Javaのプロパティファイルのエスケープが欲しい
仕事でいくつかの顧客のためのデプロイをする際に設定ファイルを文字列置換ツールを自分で作って使っているのですが、propertiesファイルの値に日本語を入れる必要が生じたときに通常の文字列変換だけやってテキストファイル書き込みをやってしまうと例の
“`
日本語 -> \u65E5\u672C\u8A9E
“`
にならなくてなにか面倒になるかもしれないと思って使えそうなものを色々と調べました。
Apache Commons の **org.apache.commons.text.StringEscapeUtils** クラスの以下のメソッドが
“`java
static String escapeJava​(String input)
static String unescapeJava​(String input)
“`
多バイト文字の問題は解決してくれるのですが、java propertiesファイルはシングルバイトの特殊文字もいくつかエスケープしますし、どの特殊文字がエスケープされるのかを調べるのも面倒だし間違えそうな

Eclipseの作業効率化のためのショートカット一覧

# 投稿経緯
Eclipseを業務で利用しているのでアウトプットとして投稿します。
ショートカットについては随時更新していく予定です。

## ショートカット

### `Ctrl + /` 複数行コメントアウト
複数行をまとめてコメントアウトできる。
コメントアウトした箇所で`Ctrl + /`を押すとコメントアウトを解除できる。

![Eclipse 一斉コメントアウト.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614835/bef6c534-862d-417d-7b47-3d6b155b632b.gif)

### `Ctrl + Shift + R` リソースファイルを開く
検索文字に合致したファイルを選択するとリソースファイルを開ける。

![Eclipse リソースファイル開く.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614835/a101250a-8ca0-bfaf-63b9-6a48521ef

書式指定文字列の不思議な挙動

# これは何?

書式指定文字列に変なこと書いてもエラーにならない事に気づいて、色々試してみた記録

# 各種言語の対応

## go

この現象を発見したのは go。

“`go:go
fmt.Printf(“%d %+d %++d %+++d %++++d\n”, 1, 1, 1, 1, 1)
//=> 1 +1 +1 +1 +1
“`

二個以上書いても意味ないけど、エラーにならない。

`+` を書ける場所には ` ` も書けるが、意味的に共存できない。

戦わせると

“`go:go
fmt.Printf(“[%+d]\n”, 1) // [+1]
fmt.Printf(“[% d]\n”, 1) // [ 1]
fmt.Printf(“[%+ +d]\n”, 1) // [+1]
fmt.Printf(“[% + d]\n”, 1) // [+1]
“`

`+` が勝つ。

後勝ちだろうと予想していたので、予想が外れた。

## ruby

ruby も同様に `”%++++++++++++d” % 1` などはエラーにならない。

戦わせてみると

“`ru

【Java】繰り返し処理のwhile文

## はじめに
Javaの学習中にwhile文を使って繰り返し処理を行おうとしたのですが、上手く結果が出力されませんでした。
調べた際に、単純にwhileの条件式に対する認識が間違っていたので記録しておきます。

## 条件式
whileを使う条件式は以下の通りです。
“`java:text
while (trueになる条件を入れる){
// 実行される処理…()の部分がfalseになったら終了
:
}
“`

“`java
while(true) {
// 実行される処理…無限ループでbreak;を設定して終了させる
:
if(条件式) {
break;
}
}
“`

## 間違えていた内容
以下が間違えていた記述です。

“`diff_java:
package ex;

public class ex_13 {

public static void main(String[] args) {
// 3でも7でも割り切れる数字を10個出力

int count = 0;
int num = 1;
int

[Java]lambdaって【ラムダ】読むんだぜ

# Javaの研修について言いたい
完全に自社の話になりますが、他の企業様はどうなんだろうという興味本位なアレ。

2014年3月にJava8が出てから10年以上も経ってるわけですが、Javaの研修でラムダ式って教えないの?
※今年の新人に聞いたら【調べて使ってもいいよ】って感じだったようで、
 「~~外部研修なのに~~マジで時代おくれてんなぁ、平成か?」ってなったわ。

Javaの研修と言えば、オブジェクト指向から始まって、
class・methods・型(プリミティブ・オブジェクト)などがあり、
if/switchの分岐、for/while/forEachのループ文などの基本構文を覚えた後とかに、
ラムダ式ってやらんのか?(ウチだけ?

そもそも流石に10年も経ってるんだし、
基本構文に含めてもいいんじゃね?位の気持ちでいたんだけど。。。

# じゃあラムダで書くと何がいいんだよ?
例えば、一覧画面でチェックを付けた行だけ一括更新的な処理を想定して、、、
– 画面からのパタメータとしてString配列のidを取得
– 更新先のIDは数値型なのでString→Integer変換が必要

【Java】複数の標準入力から最大値と最小値を取得する方法

エンジニア歴2カ月のyoshidaです。
今回は、某学習サイトでぶつかった「複数の標準入力から最大値と最小値を得る方法」について学んだことをご紹介、、

ご紹介するのは下記3つの書き方

>1. if文
>2. sort()
>3. Math.max/Math.minメソッド

個人的なおすすめはif文、、。if文ってすごい!

## 例題
>標準入力から5つの整数a_1 a_2 … a_Nが与えられます。
>各整数(a_1 a_2 … a_N)は0以上100以下です。
>入力された整数から、最大値と最小値を出力してください。

**入力**
“`
4 3 5 1 2
“`

**期待する出力**
“`
最大値:5 最小値:1
“`

## if文を使って最大値・最小値を取得する
**難易度:★☆☆**
一番シンプルで、原理さえわかってしまえばすぐに書けるはず、、
sortとは、、メソッドとは、、という人におすすめ。ぜひ原点に立ち返ってif文のすごさを味わいましょう((

:::note info
**おすすめPoint**
・とてもシンプル
・2つの入力はもちろん、3

Javaで「文字列の中で指定した文字または文字列が出現するインデックスを取得する」の動作を確認してみた

# 概要

Javaで「文字列の中で指定した文字または文字列が出現するインデックスを取得する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/string/index18.html

# 実装

以下のファイルを作成しました。
“`JSample18_1.java
class JSample18_1{
public static void main(String[] args){
String str = “Hello World”;
System.out.println(str.indexOf((int)’o’));
System.out.println(str.lastIndexOf((int)’o’));
}
}
“`

“`JSample18_2.java
class JSample18_2{
public static void main(String[] args){
String str = “東京都と京都府”;

System.out.p

【Spring Boot】ログイン機能とログインユーザーの取得

Spring Bootを使ってログイン機能を作成しようとしたら思ったより複雑だったので記録(2022時点で動作確認済み)

## 前提
version
“`
java 11
maven 3.6.3
Spring Boot 2.7.0
“`

必要なdependencyの追加
“`pom.xml

org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-security

“`
次のようなアカウントのEntityクラスを使用想定
“`Account.java
@Entity
@Table(name = “accounts”)
@Getter
@Setter
publ

Java初学者へサポートする事を考える

# 概要
会社の人材育成を目的にJavaを知らない人がJava初学者へサポートできることを考える

# 確認事項
## 受験資格はOracle Certified Java Programmer, Silver SE 11(これで間違いない?)
https://www.oracle.com/jp/education/certification/1z0-816-jpn-31705-ja.html
> 関連資格:Oracle Certified Java Programmer, Silver SE 11
> 受験料(税込):37,730 円 価格ポリシーについて
> 出題形式:選択問題
> 試験時間:180 分
> 出題数:80 問
> 合格ライン:63 %

180分の試験なので、きつそうな印象であるが、合格ラインは低い。

## 学習教材
あとで正式名を確認するが、すでに購入済

# 出来る事リスト(案)
1. 希望があれば、なんでもどうぞ。
1. 学習スケジュールを作る。これがないと始まりません。作成に協力することは可能です。スケジュールが厳しければbronzeや他の学習に切り替える

【Java】開発未経験者が10日間でJava Gold SE11に合格した話

# ■はじめに
運よくまとまった時間が取れて10日間でJava Gold SE11に合格出来たので、その時の勉強方法をまとめてみました。
受験時の自分のレベルとしては以下のような感じです。

**・現場での開発は未経験**
**・Spring Bootを使用して簡単なサービスを作ったり個人的にJavaの学習はしていた。**

# ■この記事の対象者
・Java Goldの資格取得を考えている方

※Java Goldを受験するにはJava Silverに合格している必要があります。
 よろしければJava Silverに合格したときの記事もご参照ください。

https://qiita.com/kiiiiiinusu/items/256bd648312536683a24

# ■もくじ
**1.使用教材&試験日までのスケジュール**
**2.学習ロードマップ**
**3.まとめ**

# 1.使用教材&試験日までのスケジュール
**使用教材:**
黒本のみ
Jmeter導入方法

# 概要
負荷試験を行う為、`Jmeter`を使用しました。今回は、`Jmeter`の導入方法について記載します。

# 手順
– [Homebrew](https://brew.sh/ja/)を使用して、[jmeter](https://jmeter.apache.org/)をインストールする
“`sh
brew install jmeter
“`

– jmeterのみでは正常に動作しない為、Homebrewから[Java](https://www.java.com/ja/)をインストールする
“`sh
brew install java
“`

– Homebrewを使用して[OpenJDK](https://openjdk.org/)(オープンソースのJava開発キット)を再インストールする
“`sh
brew reinstall openjdk
“`

– シンボリックリンクの作成とPATH環境変数の設定を行う
“`sh
# シンボリックリンクの作成
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openj

【Spring Batch】Jobについて

## はじめに
Spring Batchを使用した大量データの移行を最近行ったのでアウトプットできればと思います。
1つの記事にまとめるには情報がありすぎるので、まずはJobについて書いていければと思います。
※間違いなどがあれば指摘していただけますと幸いです。

## 想定読者
– Javaの基礎を学習済みの方
– DIやBeanについて理解している方
– これからSpring Batchを学習していきたい方

## 動作環境
言語:Java
フレームワーク : Spring Boot(Spring Batch, Spring JDBC)
ツール : PostgreSQL, VSCode, Git

## 1.Spring Batchってなに?
まずは、そもそもSpring Batchってなに?というところから解説していければと思います。
Spring Batchとは、Spring Frameworkを中心としたSpringプロジェクトのひとつで、バッチ開発用のフレームワークです。SpringがもつDIコンテナやトランザクション管理機能をベースとした、さまざまな特徴を持っています。

Springフレームワークで曲解的アジャイル開発を考えてみる#1 準備編

# 1.曲解的アジャイルとは
造語です。機能を絞って早く機能が使える段階にあればいいよね?という、深みがあるアジャイルを馬鹿にしたような考え方なので曲解と言ってみました。
新人研修4か月目の朝の時間で一つ記事を書いてみようと思います。

# 2.開発環境
・Eclipse IDE(pleiades2023-12)
・jdk:1.7
・tomcat:9.
・mysql:8.

### eclipseでダウンロードするもの
 下記のものはeclipse→ヘルプ→マーケットプレイスからダウンロード
・Spring4
・Spring Tools 3 Add-On for Spring Tools 4

# 3.プロジェクト準備
 https://start.spring.io/ にアクセスしてMaven,Java,3.3.1,Artifactの名前をアプリ名に、ADD DEPENDENICE S…から以下のライブラリを設定。
Spring Boot DevTools
・Lombok
・Spring Web
・Thymeleaf
・My

Javaで「指定した区切り文字で複数の文字列を連結し新しい文字列を作成する」の動作を確認してみた

# 概要

Javaで「指定した区切り文字で複数の文字列を連結し新しい文字列を作成する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/string/index17.html

# 実装

以下のファイルを作成しました。
“`JSample17_1.java
import java.util.List;

class JSample17_1{
public static void main(String[] args){
String str1 = String.join(“-“, “Apple”, “Grape”, “Melon”);
System.out.println(str1);

List strings = List.of(“One”, “Two”, “Three”);
String str2 = String.join(” * “, strings);
System.out.println(str2);
}
}
“`

以下のコマ