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

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

何をテストすべきだろうか?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815412/2e2884d3-f75e-e44d-93b6-9d62a1f9a3ab.png)

## 序論

テストコードに初めて触れるときや、テストコードを書こうとするときに、私の場合、2つの疑問が生まれました。

– どうしてテストを行わなければならないのか?
– 何をテストするべきなのか?

## なぜテストが必要なのか?

> コードの信頼性を確保するために

– 品質保証
– デバッグコストの削減
– ドキュメント化、ドメイン駆動開発、アジャイル方法論、エクストリームプログラミングの実現など ..

しかし、私にはそれほどピンと来ませんでした。そこで、これらを簡単に整理してみました

XPエコシステムから生まれたアジャイル開発論を採用したドメイン駆動開発の観点から説明します。

ソフトウェア開発において最も重要な要素は「ユーザー」です。そして、ユーザーのニーズは常に変化します。プロジェクトを開始する時点では、要件

元記事を表示

【殿堂入りキャンペーン】N倍の文字列 (paizaランク D 相当) Java解答例

# 問題文
https://paiza.jp/works/mondai/d_rank_skillcheck_archive/square

# 解答例
“`java
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int n = scanner.nextInt();
for (int i = 0; i < n; i++) { System.out.print("*"); } System.out.println(); } } } ``` # 補足 特になし。 基本的に*をn個分出力すれば良いだけだが、最後は改行しないといけないようなので`System.out.print`と`System.out.println`を使っているくらい。

元記事を表示

【Java】SQLiteのJDBCドライバを用いる際のデータベース接続文字列に関する注意点

# 環境
– Windows11
– Tomcat9
– OpenJDK11
– SQLite3

# パスは”/(スラッシュ)”で区切る
Mac上のEclipseで開発した後、Windowsマシンにデプロイをした際に、「データベース接続文字列中のパスは、Windowsだから”¥”(実際のコード上ではバックスラッシュで表示される。)で区切るのだろう」とデータベース接続文字列中のスラッシュをバックスラッシュに書き直したところ、データベースに接続することができなかった。
データベース接続文字列は、Windowsにおいてもスラッシュで区切る。
“`diff_java:コネクションオブジェクトの取得部分
– Connection conn = DriverManager.getConnection(“jdbc:sqlite:C:\mydb\sample.db”);
+ Connection conn = DriverManager.getConnection(“jdbc:sqlite:C:/mydb/sample.db”);
“`

元記事を表示

Javaで「文字列の中でパターンとマッチする部分があるか検索する(Matcher.find)」の動作を確認してみた

# 概要

Javaで「文字列の中でパターンとマッチする部分があるか検索する(Matcher.find)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/regex/index4.html

# 実装

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

class JSample4_1{
public static void main(String[] args){
String regex = “[0-9]{2}”;
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(“CODE24-11-75”);
if (m.find()){
System.out.println(“マッチしました”);
System.out.println(m.group());
}
}
}
“`

以下のコマンドを実行しまし

元記事を表示

【初心者向け】SQLクエリの句 抽出順番について

今回の記事は「SQLの抽出順番を理解することでそれぞれの句の意味がすんなり理解できるかも」というお話。

まずSQLの句ってどんなものがあるか見ていきましょう。
上から記載する順番に見ていきます。

“`
句の種類について
①SELECT句: 抽出する列を指定
②FROM句: データを取得するテーブルを指定
③WHERE句: 行のフィルタリング条件を指定
④GROUP BY句: 行をグループ化する列を指定
⑤HAVING句: グループ化後にグループをフィルタリングする条件を指定
⑥ORDER BY句: 結果セットを並べ替える条件を指定
“`

具体的なコード
“`SQL
SELECT 店舗名, SUM(売上) AS 総売上 –「店舗名」と「総売上」を表示する。
FROM 売上テーブル –「売上テーブル」から見つける。
WHERE 地域 = ‘関東’ –「地域」というカラム(列)に「関東」と含まれている場所を見つける。
GROUP BY 店舗名 –「店舗名」の順番でグループ化。
HAVING SUM(売上) > 100000 –「総売上」は「100000」以上という条件。

元記事を表示

Javadocの@throwsタグを記載しなくてはいけない時

Javadocの“`@throws“`タグを記載しなくてはいけないのはどんな時なのかが分からず、[公式サイト](https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html)を見ても知識不足で意味が分からなかったので、ざっくり嚙み砕いてメモしておく。

“`TeX:公式サイトより
Throws Tag

The purpose of the @throws tag is to indicate which exceptions the programmer must catch (for checked exceptions) or might want to catch (for unchecked exceptions).

Guidelines – Which Exceptions to Document

Document the following exceptions with the @throws tag:

・All checked exceptions.
 (These

元記事を表示

検査例外(Checked Exception)、非検査例外(Unchecked Exception)とは?

# 目次
[結論](#結論)
[例外の3つの種類](#例外の3つの種類)
[検査例外(Checked Exception)](#検査例外checked-exception)
[検査例外(Exception)](#検査例外exception)
[非検査例外(Unchecked Exception)](#非検査例外unchecked-exception)
[発生する検査例外を調べる方法](#発生する検査例外を調べる方法)
[実行時例外(RuntimeException)](#実行時例外runtimeexception)
[エラー(Error)](#エラーerror)
[参考サイト、参考文献](#参考サイト参考文献)

# 結論
– javaでは、[Throwable][1]なクラスの中で、[Errorクラス][2]と、[RuntimeExceptionクラス][3]
を継承したクラスのみ非検査例外(Unchecked Exception)で、他は全て検査例外(Checked Exception)

ドメイン駆動設計(DDD)についての整理

## 序論
ドメイン駆動開発(以下、DDDと記述します。)について、誤解していたことや新たに学んだことについて書いてみます。

##ドメインとは何か?
まず始めに、「ドメインとは何か?」という質問に答えられなければなりません。一体「ドメイン」とは何でしょうか?何故それを基にして開発を行う必要があるのでしょうか。

この質問に対する答えとして、エリック・エヴァンスは著書『ドメイン駆動設計』の第1部で次のように述べています。

>「すべてのソフトウェアプログラムは、そのソフトウェアを使用するユーザーの活動や関心事に関連しています。ユーザーがプログラムを使用する対象領域が、そのソフ> トウェアのドメインです。」

これだけではまだピンとこないかもしれません。そこで今度は、「一体ソフトウェアって何なのか?」という疑問が生まれるかもしれません。

著者は続けて本の中で次のように述べています。

> 「ソフトウェアの本質は、そのソフトウェアのユーザーのためにドメインに関連する問題を解決する能力にあります。」

## ドメインモデルを作る過程
そうです。ソフトウェアのユーザー(以下、ユーザーと呼びま

【随時更新】よく使うSpringBoot3アノテーションまとめ

## Springアノテーション
– `@Component`
– Springコンテナに対して、このクラスがコンポーネント(Bean)であることを示し、Beanに登録する
– `@ConfigurationProperties`
– 外部設定ファイル(例:application.properties)からプロパティを読み込むためのクラスに付与する
– `@Repository`
– データアクセス層のBeanを示す

## Lombokアノテーション
– `@AllArgsConstructor`
– すべてのフィールドを引数に取るコンストラクタを生成する
– `@Data`
– @Getter、@Setter、@RequiredArgsConstructor、@ToString、@EqualsAndHashCodeを一括で適用する
– `@EqualsAndHashCode`
– equals()とhashCode()メソッドを生成する
– オプション
– callSuper(デフォルト:false)

Clean Code – Chapter 2: 意味のある名前

# 2章 意味のある名前
[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)の本を整理した内容です

## 概要

## 1. 意図を明確にする

皆さんも経験しているように、

Java Silver:クラスとメソッドの完全一覧

# 1. 基本クラス
java.lang.String
Stringクラスは、Javaで文字列を扱うためのクラスです。以下は、よく使われるメソッドです。

length(): 文字列の長さを返します。
charAt(int index): 指定された位置の文字を返します。
substring(int beginIndex, int endIndex): 文字列の一部を返します。
equals(Object anObject): 文字列が等しいかどうかを比較します。
equalsIgnoreCase(String anotherString): 大文字と小文字を無視して文字列が等しいかどうかを比較します。
compareTo(String anotherString): 辞書順で文字列を比較します。
compareToIgnoreCase(String str): 大文字と小文字を無視して辞書順で文字列を比較します。
startsWith(String prefix): 指定された接頭辞で始まるかどうかを判定します。
endsWith(String suffix): 指定された接尾辞で終

Clean Code の勉強会整理 – Chapter 1: きれいなコード

現在、韓国でJavaバックエンド開発者として働いています。

将来的には日本で働きたいと思っており、会社で進めている勉強会の内容やSpringFrameworkの技術を日本語でまとめていこうと考えています。

その第一弾として [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) の内容を整理しようと思っていますが、すべての章を扱うのではなく、重要だと思う以下の部分だけをまとめようと思います。

– Chapter 1: きれいなコード (Clean Code)
– Chapter 2: 意味のある名前 (Meaningful Names)
– Chapter 3: 関数 (Functio

APサーバーのスレッドダンプをWeb画面からダウンロードする。

# 概要
Javaで実装されているAPサーバーのWeb画面に、スレッドダンプをダウンロードできるボタンを設置します。

# 問題
Javaで動いているAPサーバーのスレッドダンプを取りたいとき、以下の手順を取るケースがあると思います。
1. jpsコマンドでダンプを取得するAPサーバーのプロセスIDを取得する
1. jstackコマンドの引数にプロセスIDを与えて実行
1. ダンプを取得

これはこれで良いと思うのですが、問題が発生しているタイミングで、今すぐスレッドダンプを取得したいということもあると思います。
その場合、対象サーバーにログインして、jps→jstackがちょっとまどろっこしい場合もありうると思います。

# 解決策
この、思い付いたタイミングですぐにスレッドダンプが取得できない、という問題の解決策として、APサーバーの画面上にスレッドダンプを取得できるボタンを設置し、必要なタイミングでボタンを押して、スレッドダンプをダウンロードできるようにします。

# 実装
## ManagementFactoryクラス
ManagementFactoryクラスを使うと、Java

【初心者向け Java】 ScannerとBufferedReaderの違いについて

コーディング初心者あるある。
「Scanner,BufferedReaderのどちらを使えばいいかわからない!」
って題材で書いていく。

①’Scanner’クラスについて
特徴
1.簡単な入力処理が可能
2.close処理が必要

以下に例を記載する。

“`Java
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println(“Enter an integer:”);
int n = scanner.nextInt();

System.out.println(“Enter a string:”);
String str = scanner.next();

System.out.println(“You

Javaで「文字列の先頭からパターンとマッチするか調べる(Matcher.lookingAt)」の動作を確認してみた

# 概要

Javaで「文字列の先頭からパターンとマッチするか調べる(Matcher.lookingAt)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/regex/index7.html

# 実装

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

class JSample7_1{
public static void main(String[] args){
String regex = “[0-9]{2}”;
Pattern p = Pattern.compile(regex);

String[] target = {“AAZ02”, “75PPT”, “ON24KM”};
for (int i = 0 ; i < 3 ; i++){ Matcher m = p.matcher(target[i]); if (m.lookingAt()){ Syst

[備忘録 その10] Java Silver ~クラス定義・オブジェクトの使用 その2~

# コンストラクタ
__コンストラクタ__ とは、クラスのインスタンス(オブジェクト)を生成する際に呼び出される特別なメソッドです。主にオブジェクトの初期化を行うために使用されます。コンストラクタはクラスと同じ名前を持ち、戻り値を持たないのが特徴です。

### コンストラクタの特徴

1 \. __クラス名と同じ名前__ :コンストラクタの名前は、そのクラスの名前と同じでなければなりません。
2 \. __戻り値を持たない__ :コンストラクタには戻り値の型がありません。これはメソッドと異なる特徴です。
3. \. __自動呼出し__ :オブジェクトが作成されるときに、自動的に呼び出されます。
4 \. __オーバーロード可能__ :引数の異なる複数のコンストラクタを定義することができます。

### コンストラクタの用途
* __オブジェクトの初期化__:インスタンス変数に初期値を設定したり、オブジェクトの状態を設定したりするために使用されます。
* __リソースの確保__:ファイル、データベース接続、ネットワーク接続などのリソースを確保する際に使用されます。

#### コンスト

Javaで「文字列の全体がパターンとマッチするか調べる(Matcher.matches)」の動作を確認してみた

# 概要

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

https://www.javadrive.jp/start/regex/index3.html

# 実装

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

class JSample3_1{
public static void main(String[] args){
String regex = “S.*t”;
Pattern p = Pattern.compile(regex);

Matcher m1 = p.matcher(“JavaScript”);
System.out.println(m1.matches());

Matcher m2 = p.matcher(“Script”);
System.out.println(m2.matches());

Matcher m3

Springサービス層の基本: アノテーションとメソッド一覧

# サービス層で使用されるアノテーション
### @Service

サービスクラスをSpringコンテナにサービスとして登録します。ビジネスロジックを実装するために使用されます。
例:
“`java
@Service
public class MyService {
// ビジネスロジックの実装
}
“`
### @Autowired

Springの依存性注入機能を使用して、他のBeanを自動的にインジェクションします。
例:
“`java
@Autowired
private MyRepository myRepository;
“`
### @Transactional

メソッドまたはクラスにトランザクション管理を適用します。トランザクションはデータベース操作の一貫性を保つために使用されます。
例:
“`java
@Transactional
public void performTransaction() {
// トランザクション内で実行する処理
}
“`
### @Qualifier

複数のBeanが存在する場合に、どのBeanをインジェク

複数のRestControllerでswaggerのApiResponseを共有

下記キャプチャのように、swagger-uiにおいて複数の`@RestController`で共通の`@ApiResponse`を定義したい場合は`@ApiResponses`を定義するカスタムアノテーションを作成する。

![customanno.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31934/a5a096ab-9b0a-5d30-6dc8-62bda8858a35.jpeg)

カスタムアノテーションの例は以下の通り。

“`java
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import

Flutterで作る本格的なPongゲーム!スコア表示付き

## Flutterでゲームを作ろう!

こんにちは、Flutter開発者の皆さん!今回は、Flutterを使って本格的なPongゲームを作成する方法を詳しく解説します。スマートフォン向けに最適化され、右上にスコアを表示する機能も実装します。さあ、一緩に作っていきましょう!

### 1. プロジェクトのセットアップ

まずは、新しいFlutterプロジェクトを作成し、必要なパッケージをインストールします。

“`bash
flutter create pong_game
cd pong_game
flutter pub add flame
“`

### 2. main.dartファイルの作成

`lib/main.dart`ファイルを以下のように編集します。

“`dart
import ‘package:flame/game.dart’;
import ‘package:flutter/material.dart’;
import ‘pong_game.dart’;

void main() {
runApp(
MaterialApp(
home