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

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

Javaのprintf機能: System.out.printfメソッドの使い方とフォーマット指定子

Javaでは“`printf“`関数が直接的に提供されるわけではありませんが、“`System.out.printf“`メソッドを使用して同様の機能を実行することができます。 “`System.out.printf“`は“`PrintStream“`クラスのメソッドで、特定の形式に合わせてフォーマットされた文字列を出力する役割をします。

### 基本的な使い方

“`System.out.printf“`メソッドは、次の形式を持ちます:

“`java
javaコードをコピーする
public class Main {
public static void main(String[] args) {
int number = 10;
double doubleNumber = 3.14159;
char character = ‘A’;

// 整数出力
System.out.printf(“整数: %d\n”, number); // 出力: 定数: 10

元記事を表示

Javaで「リージョン(対象文字列の中のパターンと比較する範囲)を設定する」の動作を確認してみた

# 概要

Javaで「リージョン(対象文字列の中のパターンと比較する範囲)を設定する」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

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

class JSample26_1{
public static void main(String[] args){
String target = “dancer singer”;

String regex = “\\b.*?er”;
Pattern p = Pattern.compile(regex);

Matcher m1 = p.matcher(target);
if (m1.find()){
System.out.println(m1.group());
}else{
System.out.println(“no

元記事を表示

Java関連概念まとめ集 (Hibernate, Thread, Lock)

### Javaのオブジェクトレベルロックとクラスレベルロック

**Object Level Locking**(オブジェクトレベルロック)と**Class Level Locking**(クラスレベルロック)は、マルチスレッド環境でデータの一貫性を維持するために使用されるJavaの2つの同期メカニズムです。

#### オブジェクトレベルロック:
– **範囲**: クラスの特定のインスタンス。
– **メカニズム**: 特定のオブジェクトをロックし、そのオブジェクトの同期メソッドやブロックに一度に1つのスレッドのみがアクセスできるようにします。
– **例**:
“`java
public class MyClass {
public synchronized void instanceMethod() {
// 同期インスタンスメソッド
}

public void someMethod() {
synchronized(this) {

元記事を表示

JavaのDIの種類とその違いについて

# はじめに
Javaによるオブジェクト指向開発を行うときに必ず出てくるのがDI(Dependency Injection)です。
DIは依存性の注入と訳され、オブジェクトの依存関係を外部から注入することで、コードの結合度を下げ、テストしやすく、保守性の高い設計を可能にします。

DIにはいくつか種類があってそれぞれ特徴があります。
今回はDIについて説明します。

# 1. コンストラクタインジェクション
コンストラクタを通じて依存性を注入します。

依存するオブジェクトはコンストラクタの引数として渡されるため、オブジェクトが生成されるときに必要な依存性が全て設定されます。

### 特徴:

* 依存性が不変であるため、オブジェクトが一度作成されるとその依存性は変更されません。
* コンストラクタが複雑になる可能性がありますが、依存性が全て揃っていることが保証されます。

“`java
public class Service {
private final Repository repository;

public Service(Repository re

元記事を表示

Oracle Java Silver 学習メモ

## 👋初めまして

プログラミングと日本語の両方を勉強しているSUUSHIと申します。

🎨22年に武蔵野美術大学の大学院を卒業後、留学生支援の学習塾に入社しました。教務管理が大変なところ、プログラミングで何か解決できないかと思い、今年の6月からJavaの勉強を始めました!

🤔Oracle Java Silver資格を一つの目標とすれば、より明確に勉強のスケジュールが組みやすいと感じたので、受験の準備をしています。現在は、Notionというツールで学習についてのタスク管理やメモ整理を行っていますが、今後はその内容をQiitaにもコツコツとアップロードしていきたいと思います。

よろしくお願いします!

## 👇私のNotion風景👇

![截屏2024-08-05 21.07.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3854122/9b635afd-1125-9647-c7a0-f7136bb6b933.png)

![截屏2024-08-05 21.08.31.png](htt

元記事を表示

Javaのプリミティブ型とオブジェクト型の違い

# はじめに
Javaの内容で知らなくてもコードが書けてしまうことがあります。
ただし、知らないことで予期せぬ事態に繋がることはよくあることです。

Javaで知らずに使っていたけど、そういうことだったんだ!とかそうやって使い分けるんだ!というような内容をまとめていきます。

今回は値(プリミティブ)型と参照(オブジェクト)型の違いについて説明します。

# 値(プリミティブ)型
値型(またはプリミティブ型)は、基本的なデータ型であり、Javaでは以下の8つのプリミティブ型が提供されています。

| 型 | 説明 |
|———-|—————————|
| byte | 8ビット整数 |
| short | 16ビット整数 |
| int | 32ビット整数 |
| long | 64ビット整数 |
| float | 単精度32ビット浮動小数点数|
|

元記事を表示

コンパイル型言語とは

# コンパイル型言語とは
人間が書いたソースコードを、コンピュータが分かるように機械語に変換(コンパイル)してからプログラムを実行する言語のこと。インタプリタ型言語とは違い、一度にすべてのソースコードを変換してから実行する。
(インタプリタ型言語は、ソースコードを一行ずつ実行してプログラムを実行する言語である)

### コンパイル型言語の例
Java, C#, Go

### インタプリタ型言語の例
JavaScript, Python, Ruby, PHPなど

元記事を表示

Logback のログローテートにおけるファイルロックの挙動

# 概要

Logback でログローテートを行っている場合、新しいファイルが出力されるまでは、システム日時が切り替わったとしても、古いファイルがロックされ続ける。

例えば、日次ローテートの場合を考える。システム日付が8月5日のときに、8月4日までのファイルを別ディレクトリに移動しようとしたとする。8月5日はまだアクセスがなく、ログファイルが出力されていない。このとき、8月4日のファイルがまだロックされており、移動や削除が行えない。

“`
AccessLog-2024-08-03.log
AccessLog-2024-08-04.log <- 8月5日になっても、次のファイルができない限りロックされたまま ``` 古いログを別の場所に移動するようなバッチを作る際に気をつけた方がよいポイントである。 # 検証 以下の環境でテスト用の Web アプリを作って検証。 * Windows 11 23H2 * Java 17 * Spring Boot 3.3.1 今回は検証のため1分おきにローテートしてみる。logback.xml を以下のように設定。 ```xml

元記事を表示

java

import java.time.LocalDate;
import java.time.DayOfWeek;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

class WeekRange {
private LocalDate startDate;
private LocalDate endDate;
private boolean updateFlg;
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyyMMdd”);

public WeekRange(LocalDate startDate, LocalDate endDate, boolean updateFlg) {
this

元記事を表示

初心者がpaizaのAランク問題を1か月ちょいで解けるようになった話(Aランク問題の解説付き)

## はじめに
どーも筆者です。私はプログラミング未経験でIT企業に就職し、エンジニアとしてキャリアをスタートさせた若造です。
研修でpaizaに出会い、問題を解くのにどはまりし、プライベートでも問題をちょいちょい解くようになりました。
今回はそんな私がAランク問題を解けるようになるまでと、Aランク問題の解説を行いたいと思います。言語はJavaです。
初心者でどうやったら難しい問題解けるようになるのだろうと困っている人の少しでもお役に立てればと思います。

## 私のpaizaとの向き合い方
初めてコードを見たとき、なんだこれ?英語いっぱいでわけわからん。呪文?状態でした。
なのでまず入門編の講座を見たり、並行して簡単な問題を解いたりしてゆっくりと理解を進めていきました。
ある程度理解が進むと**問題を解くことを中心として、わかんないところが出たり、あれ?これなんだったっけ?ていうのが出るたびに調べてまた解く**というスタイルに切り替えます。このやり方が一番理解が進みます。経験上です。数学と一緒です。
わからなすぎたら回答を見るというのも一つの手です。ただそれを見ただけでは何の身にもな

元記事を表示

Spring Boot 3を使った簡単なTODOアプリの作成

# はじめに
この記事では、Spring Boot 3を使って簡単なTODOアプリを作成する方法を紹介します。TODOアプリは、基本的なCRUD(Create, Read, Update, Delete)操作を通じてSpring Bootの基本を学ぶのに最適です。

# 前提条件
* Spring Boot 3.0
* Java 17以上
* MavenまたはGradle

# プロジェクトのセットアップ
1. Spring Initializrを使用してプロジェクトを生成します。以下の依存関係を追加します。

* Spring Web
* Spring Data JPA
* H2 Database
* Spring Boot DevTools


2. プロジェクトの生成が完了したら、IDEにインポートします。

# ディレクトリ構造
“`
src/main/java/com/example/todoapp
|– TodoAppApplication.java
|– controller
| |– TodoController

元記事を表示

Javaで「パターンとマッチした部分文字列の情報を取得する」の動作を確認してみた

# 概要

Javaで「パターンとマッチした部分文字列の情報を取得する」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

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

class JSample5_1{
public static void main(String[] args){
String regex = “.区”;
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(“東京都港区赤坂”);
if (m.find()){
System.out.println(“Start : ” + m.start());
System.out.println(“End : ” + m.end());
System.out.println(“Match :

元記事を表示

古いJavaライブラリ(crawler4j)の依存関係を整理してみた

# はじめに

[Crawler4jを利用した日本語コンテンツの収集](https://qiita.com/YasuhiroABE/items/4df272fcc0c2cccc4173)で利用しているCrawler4jについてです。

Javaの歴史も長くなってメンテナンスされていないライブラリを使い続けることが難しくなってきました。

ライブラリの変更は互換性のある後継ライブラリが存在しない限り、既存コードを大幅に書き換えることが必要となります。

今回はCrawler4jのオリジナルコードをGithubでForkし、依存関係にあるライブラリを最新版にしつつ再コンパイルしてみました。

ついでに作成したコードをMaven Centralにアップロードしたので、それらの顛末をまとめておきます。

## 目的

とりあえず次の2つが目標です。

1. HarborのScannerで重度の警告が出ない程度に依存パッケージを最新版にする
1. Java 21(LTS)を前提とする

## 成果物

* [https://github.com/YasuhiroABE/crawler4j](ht

元記事を表示

Lombokで提供するコンストラクタのアノテーション探求

## Lombokで提供する3つのコンストラクタ

– Lombokでボイラープレートコードを減らすために提供する3つのコンストラクタ関連のアノテーションについて知ろう
> ボイラープレートコードとは? (Boiler Plate)
– ほとんどまたは全く変更せずに、様々な場所で繰り返されるコード
[ウィキペディア ボイラープレートコード](https://en.wikipedia.org/wiki/Boilerplate_code)

### @ RequiredArgsConstructor

“`java/**
* Generates a constructor with required arguments.
* Required arguments are final fields and fields with constraints such as {@code @NonNull}.
*

* Complete documentation is found at time

import java.time.LocalDate;
import java.time.DayOfWeek;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;

class WeekRange {
private LocalDate startDate;
private LocalDate endDate;
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyyMMdd”);

public WeekRange(LocalDate startDate, LocalDate endDate) {
this.startDate = startDate;
this.endDate = end

元記事を表示

【Spring Boot】【Java】定数宣言はfinal staticが良いのか、enumが良いのか

# これまでの記事紹介
| | URL |
|:———–|:————|
| 第1回 | [【Spring Boot】個人的に推奨するディレクトリ/ファイル構成](https://qiita.com/rpc_tk/items/b60adb5e55206585d98a “【Spring Boot】個人的に推奨するディレクトリ/ファイル構成”) |

# はじめに
第1回記事の最後に[domain]-coreについて深堀りしていくと書きましたが、今回はその深掘りの第1弾です。
※[domain]-coreには定数、列挙型を配置するためです

皆さんはJavaで不変な値、いわゆる定数をどのように扱っていますか?
final static修飾子を付けた変数を使うのが良いのか、列挙型を使うのが良いのかを個人的な考えを書いていきます。

# 読者ターゲット
– Java の Web/API アプリケーション開発経験がある方

# 定数とは
定数はある意味で変数ですが、final修飾子を付与することで一度値を代入したら変更できない変数となり、更

元記事を表示

足し算 (paizaランク D 相当) Java解答例

# 問題文
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/addition

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

public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println(a + b);
}
}
}
“`

# 補足
取得した数値を足して出力するだけなので特になし。

元記事を表示

Eメールアドレス (paizaランク D 相当) Java解答例

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

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

public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
String s = scanner.next();
String t = scanner.next();
System.out.println(s + “@” + t);
}
}
}
“`

# 補足
この問題ではローカル部とドメインを@で連結してEメールアドレスとしているが、実際にはなんか細かい仕様があるので実務だとちゃんとその仕様に沿っているか入力チェックしたりする必要がある。
昔居た現場だと単にフォーマットが仕様に沿っているかだけでなく実在しているかどうかまでチェックしていたので、どの程度チェックす

元記事を表示

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

![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`を使っているくらい。

元記事を表示

OTHERカテゴリの最新記事