- 1. Javaで「Matcherオブジェクトをリセットして位置情報をゼロへ戻す(Matcher.reset)」の動作を確認してみた
- 2. 依存関係にあるJar内のパッケージ名を取得する
- 3. 続:.next()と.nextLine()の違いと、初心者向けのScannerの解説
- 4. [備忘録 その11] Java Silver ~クラス定義・オブジェクトの使用 その3~
- 5. Java gold 例題 enum ストリームAPI
- 6. lombokでよく使うアノテーション
- 7. Java ORM(Object-Relational Mapping)の比較
- 8. Javaの強みを徹底解説②:JITコンパイラ
- 9. Javaのprintf機能: System.out.printfメソッドの使い方とフォーマット指定子
- 10. Javaで「リージョン(対象文字列の中のパターンと比較する範囲)を設定する」の動作を確認してみた
- 11. Java関連概念まとめ集 (Hibernate, Thread, Lock)
- 12. JavaのDIの種類とその違いについて
- 13. Oracle Java Silver 学習メモ
- 14. Javaのプリミティブ型とオブジェクト型の違い
- 15. コンパイル型言語とは
- 16. Logback のログローテートにおけるファイルロックの挙動
- 17. java
- 18. 初心者がpaizaのAランク問題を1か月ちょいで解けるようになった話(Aランク問題の解説付き)
- 19. Spring Boot 3を使った簡単なTODOアプリの作成
- 20. Javaで「パターンとマッチした部分文字列の情報を取得する」の動作を確認してみた
Javaで「Matcherオブジェクトをリセットして位置情報をゼロへ戻す(Matcher.reset)」の動作を確認してみた
# 概要
Javaで「Matcherオブジェクトをリセットして位置情報をゼロへ戻す(Matcher.reset)」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/regex/index29.html
# 実装
以下のファイルを作成しました。
“`JSample29_1.java
import java.util.regex.*;class JSample29_1{
public static void main(String[] args){
String regex = “AA|BB|CC”;
Pattern p = Pattern.compile(regex);Matcher m = p.matcher(“AA BB CC”);
if (m.find()){
System.out.println(m.group());
}if (m.find()){
System.out.println(m.group());
依存関係にあるJar内のパッケージ名を取得する
# やりたいこと
あるプロジェクトが依存しているJarファイルは次のような構成をしていると仮定します。
“`
com ─ sample ┰ hoge
└ fuga
“`
hogeパッケージとfugaパッケージの配下にはいくつかクラスがあります。今回はクラスについては関係ないので省略します。いま、com.sampleという入力に対して配下にあるパッケージ名を全て取得するような処理を作成したいです。
つまり、例で言うならばcom.sample.hogeとcom.sample.fugaを`List`で返却するメソッド`collectPackageNameFromJar(String rootPackage)`というメソッドを実装したい場面がありました。 ## サンプルプログラム
“`java
public static ListcollectPackageNameFromJar(String rootPath) {
Listpackages = new ArrayL
続:.next()と.nextLine()の違いと、初心者向けのScannerの解説
## 前書き
超初心者向けのScannerの話です。
[.next()と.nextLine()の違いと、初心者向けのScannerの解説](https://qiita.com/hot-mock/items/08894e027cf0f8a0cb23)の記事の続きとなりますので、未読の方はこちらもご参考いただけると嬉しいです。それでは、前回コメントアウトしていた部分のコメントアウトを外し、実行してみましょう。
▼コード
“`
import java.util.Scanner;public class ScannerNextMethod {
public static void main(String[] args) {
Scanner scNext = new Scanner(System.in);
String a = scNext.next();
String c = scNext.next();
String d = scNext.nextLine();System.out.println(“a:” + a);
Sys
[備忘録 その11] Java Silver ~クラス定義・オブジェクトの使用 その3~
# static変数とstaticメソッド
クラスに関連付けられており、インスタンスではなくクラス自体によって共有されます。これにより、すべてのインスタンス間で共通のデータや振る舞いを持つことができます。## static変数(クラス変数)
* 定義:クラスレベルで宣言された変数であり、クラスに一度だけメモリが割り当てられます。クラスのすべてのインスタンスで共有され、どのインスタンスからでもアクセスできます。
* 特徴:
* クラスがメモリにロードされるときに一度だけ初期化されます。
* インスタンス変数(非static変数)とは異なり、各インスタンスごとに異なる値を持つのではなく、すべてのインスタンス間で同じ値を共有します。
* クラス名を通じて直接アクセスできます。
“`java
public class Example {
public static int staticVariable = 0; // static変数public void increment() {
staticVariable++;
}
}
Java gold 例題 enum ストリームAPI
“`java
enum Alphabet {
A, B, C, D;
}public class EnumTest {
public static void main(String[] args) {String result = Arrays.stream(Alphabet.values())
.map(Enum::toString)
.collect(Collectors.joining(” – “));System.out.println(result);
}
}“`
上記のコードの出力結果は?
1. コンパイルエラー
1. 実行時エラー
1. Alphabet
1. A – B – C – D
1. ABCD
1. 何も表示されない解答
↓↓
↓
↓
↓
↓
↓
↓
↓
↓
4: A – B – C – D
`Alphabet.values()`は列挙した値をすべて配列で返す。
Arraysの`stream(String[] array)`は
lombokでよく使うアノテーション
## はじめに
今回は、業務で実際によく見かけるアノテーションをまとめるよ。この記事でまとめるアノテーションは、`@Data`、`@Value`, `@NoArgsConstructor`, `@AllArgsConstructor`, `@RequiredArgsConstructor`の5つだよ。## `@RequiredArgsConstructor`
finalなフィールドを初期化するコンストラクタが生成されるよ。逆にfinalをつけないとインジェクションされないよ。
実際にコードを書くよ。`@RequiredArgsConstructor`を利用して作成したクラスは以下のようになるよ。
“`java
@RequiredArgsConstructor
public class Student {
private final Integer id;
private final String name;
private String club;
}
“`
これは、以下のようなコードと同じになるよ。
“`java
public class Stude
Java ORM(Object-Relational Mapping)の比較
## はじめに
Javaには多くのORM(Object-Relational Mapping)ツールがあり、プロジェクトの要件やチームのスキルセットに応じて適切なものを選ぶことが重要です。ここでは、主要なORMツールであるMyBatis、JDBC Template、Hibernate、JPA(Java Persistence API)について比較します。
## ORMとは?
ORM(Object-Relational Mapping)は、データベースのテーブルとオブジェクト指向プログラミングのオブジェクトをマッピングする技術です。これにより、データベース操作をより直感的に行うことができ、SQL文を直接書かずに済むことが多くなります。
## MyBatis
### 概要
MyBatisは、SQL文をXMLファイルまたはアノテーションで管理し、オブジェクトとSQLのマッピングを行うフレームワークです。JPAとは異なり、SQLの記述を自由に行えるため、複雑なクエリやパフォーマンスチューニングが必要な場合に適しています。### 特徴
* SQLの自由度: 複雑なSQLクエリをそ
Javaの強みを徹底解説②:JITコンパイラ
こんにちは NSS の江口と申します。
[前回の記事(Javaの強みを徹底解説①:Javaのいいところ)](https://qiita.com/NSS_FS_ENG/items/4bc1b17080bd82ace104) に引き続き`Java`の話となります。
今回は`JITコンパイラ`について話していこうと思います。
なお、今回記載している内容は **Java21** に準拠しております。# JITコンパイラとは
**JIT** とは **Just In Time** の略で言葉の通り **必要に応じたコンパイラ** という意味になります。
`Java`もいわゆるコンパイル言語なのですが、`Write once, run anywhere`を実現するために以下のようにコンパイルコードから動的にネイティブコードによる実行に変換しています。![JITコンパイラ(概要).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799996/fc28eefb-f4dd-c3ea-9fda-cad10d3d6
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 :