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

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

Java Goldを3週間で取得した勉強法

## まえおき
Java Silver SE11の資格取得から2カ月経過後に勉強をスタートしました。
基本的なJavaの文法は理解してるくらいな状態でした。
(Silverは83%で合格でした。)

### 自己紹介
+ エンジニア歴 2年目
+ 受験時にはJavaの開発経験なし
+ フロントエンドの開発経験あり

## 学習時間と正答率
+ Java Silver:39時間、正答率:83%
+ Java Gold:72時間、正答率:79%

## Java Goldについて
Silverと比較して難易度はかなり上がります。
覚える量がSilverの倍くらいある印象でした。
ただ参考書などは充実しているので、勉強時間を確保できたら取得できる資格です。

コード読解の練習にもなるので、個人的には学習してよかったです。
Javaを使わなくても、資格の知名度や他の言語学習にも流用できる点を考えるとおすすめです!

### 要点
https://qiita.com/Anest_Doi/items/eebc8d19743330a612ed

とてもまとまっていたので、参考にさせていただきまし

元記事を表示

継承よりインターフェース・委譲を使ったほうがいい話

## はじめに
この記事は僕が技術本や記事で得た知見の理解を深める目的で作成しました。
間違っている箇所や、感想等ありましたらコメントいただけると嬉しいです。

## 対象読者層
– 抽象クラス・インターフェースは知っているけど、使い分けがわからない
– 委譲の仕組みは何となく知っているけど、具体的にどう使えばいいかわからない

## 結論
可能な限り、抽象クラスの継承は避ける。
インターフェース・委譲を積極的に使おう。
どうしても継承を使うなら、**慎重に**設計しよう。

## 継承のNGパターン
はじめに、継承を用いたNGパターンを見てみましょう。

### 実装例
以下のサンプルコードは決済処理を表現したコードになります。

#### クラス図
“`plantuml
@startuml
package Payment {
class PaymentProcessor {
+payment(amount: int): void
#addPoints(points: int): void
+processPayment(am

元記事を表示

Javaで「CASE_INSENSITIVEフラグ(大文字と小文字を区別しない)」の動作を確認してみた

# 概要

Javaで「CASE_INSENSITIVEフラグ(大文字と小文字を区別しない)」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

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

class JSample17_1{
public static void main(String[] args){
String[] target = {“apple”, “Apple”, “APPLE”};

String regex = “apple”;
Pattern p1 = Pattern.compile(regex);

for (int i = 0; i < target.length ; i++){ Matcher m = p1.matcher(target[i]); System.out.println(target[

元記事を表示

【Java】recordでCustom Constructorを実装する際に「Non-canonical record constructor must delegate to another constructor」のエラーが発生

## 概要
JavaのrecordでCustom Constructorを実装する際、[【Java】コンストラクタ](https://zenn.dev/miya_akari/articles/bdcf90b497ee69)の記事にあるように、classと同様の形式で以下のように実装したとします。

“`java
public record LatLonResponse(double lat, double lon) {
// Custom Constructorの実装
public LatLonResponse(Double[] lonLat) {
this.lat = lonLat[1];
this.lon = lonLat[0];
}
}
“`

ただ、この実装だと`Non-canonical record constructor must delegate to another constructor`というエラーになります。ではどう実装すればよいかのメモ書きです。

## 前提
* 今回使用したJDKは`Corret

元記事を表示

【Spring Security】認証トークンって何?

## はじめに
SpringSecurityの認証トークンについて、トークンってなに?何ができるの?みたいなところ解決していければと思い記事を書いていきます。
間違いなどございましたらご指摘いただけますと幸いです!

## (まずSpring Securityとは)
認証や認可、およびその他多くのセキュリティ対策を簡易に実装できるSpringのフレームワークです。
認証:ユーザーが誰であるかを確認する(ログインのこと)
認可:認証された(ログインした)ユーザーが特定のページにアクセスできるかを決定する方法(権限があるかないか)

## よく聞くトークンってなんなの?
トークンは、認証や認可のプロセスにおいてユーザーの認証情報を安全にやりとりするための文字列です。
このトークンはユーザーは見れないものになっています。
ちなみに、今回は認証トークンについての説明ですがトークンにはさまざまな種類があります。
下記にどんなトークンがあるのか書いておきます。
“`
1. 認証トークン
– JWT(JSON Web Token)
ユーザー認証に使用されるトークンの一種で、セッションの代わりに使用

元記事を表示

Paiza×Qiitaキャンペーン 全問Javaで解説してみた【D 足し算 編】

# はじめに
学習する為に使用したJavaの教科書によっては難易度が変わるかもしれません。

# 問題へのリンク

https://paiza.jp/works/mondai/d_rank_skillcheck_sample/addition

# 解答コード

~~~

import java.util.Scanner;

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

final int A = scanner.nextInt();
final int B = scanner.nextInt();

System.out.println(A + B);
scanner.close();
}
}

~~~

# 解説

1行空白区切りで入力値を受け取るので、scanner.nextLine()しか知らない場合には少し難易度が上がります。

元記事を表示

Paiza×Qiitaキャンペーン 全問Javaで解説してみた【D 一番小さい値編】

# はじめに
D Rankの問題をただ解くだけだと初心者専用記事になってしまうので、通常の解法とは別に、Stream APIも使って解いてみました。

# 問題へのリンク
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/min_num

# 解答コード

通常

~~~
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final int NUMBER_OF_INPUTS = 5;
int min = Integer.MAX_VALUE;

for (int i = 0; i < NUMBER_OF_INPUTS; i++) { int input = scanner.nextInt(); min = Math.min(min, in

元記事を表示

[備忘録 その17] Java Silver ~モジュールシステム~

# モジュールシステム
コードをモジュールという単位で構成し、管理するための仕組みです。モジュールシステムは、大規模なアプリケーションの開発やライブラリの再利用を容易にし、依存関係の管理を強化することを目的としています。
## 1\.モジュールシステムの基本概念
#### モジュール
モジュールは、クラスやパッケージをグループ化し、明確に定義された境界を持つ単位です。各モジュールは、他のモジュールに対して何を公開するか(エクスポートするか)を指定できるため、アクセス制御が可能です。
__module-info.java__
モジュールシステムの中心にあるのが、__module-info.java__ というモジュール定義ファイルです。このファイルは、モジュールの名前、依存関係、およびエクスポートされるパッケージを定義します。__module-info.java__ はモジュールのルートに配置されます。
## 2\.module-info.javaの構造
module-info.javaの基本構造は次の通りです。
“`java
module com.example.module {

元記事を表示

Java Gold 例題 同期制御2

“`java
class StudentExamination {

private static final int NUM_STUDENTS = 3;
private static final int NUM_QUESTIONS = 5;
private static final int MAX_TIME_PER_QUESTION = 10;

public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(NUM_STUDENTS);

CyclicBarrier barrier = new CyclicBarrier(NUM_STUDENTS, new Runnable() {
private int currentQuestion = 0;
@Override
public void run() {
currentQuestion++;
if(currentQuestion <

元記事を表示

Java Gold 例題 ZonedDateTime

“`java
import java.time.Duration;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Test {
public static void main(String[] args) {

ZoneId tz = ZoneId.of(“Asia/Tokyo”);
ZoneId lz = ZoneId.of(“America/Los_Angeles”);

ZonedDateTime t = ZonedDateTime.of(
2024, 8, 14,12, 0, 0, 0, tz);

Duration d = Duration.ofHours(10).plusMinutes(20);
ZonedDateTime at = t.plus(d).withZoneSameInstant(lz);

System.out.println(t);
System.out.println(at);
}
}
“`
本コードの目的

元記事を表示

Javaで「先読みと後読みを使ったパターンの記述」の動作を確認してみた

# 概要

Javaで「先読みと後読みを使ったパターンの記述」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

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

class JSample15_1{
public static void main(String[] args){
String regex = “smart(?=phone)”;
Pattern p = Pattern.compile(regex);

String[] target = {“smart”, “smartphone”, “smartwatch”};

for (int i = 0; i < target.length ; i++){ Matcher m = p.matcher(target[i]); System.out.print(target[i

元記事を表示

[備忘録 その16] Java Silver ~例外~

# 例外
Javaの例外処理は、プログラムの実行中に発生するエラーや異常な状況を処理するためのメカニズムです。例外が発生すると、通常のプログラムの流れが中断され、その例外を処理するためのコードが実行されます。これにより、プログラムが予期しない動作をすることを防ぎ、適切なエラーハンドリングを行うことができます。

### 1\.例外の基本
例外とは、プログラムの実行中に発生する異常な状態を示すオブジェクトです。Javaの例外はすべて、java.lang.Throwableクラスのサブクラスであり、主に2つのタイプに分類されます。
#### 例外にタイプ
__1\. チェック例外:__
* コンパイル時にチェックされる例外です。チェック例外が発生する可能性のあるコードは、必ず例外を処理するか、メソッドシグネチャにthrowを使って宣言する必要があります。
* 例:IOException, SQLException

__2\. 実行時例外:__
* 実行時に発生する例外で、コンパイル時にチェックされません。プログラムのロジックの問題やバグによって引き起こされることが多く、例外処理は任意です

元記事を表示

[備忘録 その15] Java Silver ~継承とポリモフィズム その4~

# ジェネリックス
ジェネリックスは、Javaにおいてクラスやメソッドに型引数を使用する機能です。ジェネリックスを使用することで、型の安全性を確保しつつ、再利用性の高いコードを記述できます。これにより、コンパイル時に型のチェックが行われ、不適切な型が使用されるのを防ぐことができます。

## ジェネリックスの基本
ジェネリックスを使うと、クラスやメソッドを定義する際に、特定のデータ型に依存しないコードを書くことができます。例えば、リストのようなデータ構造において、ジェネリックスを使うことで、格納される要素の型を指定することができます。
#### ジェネリックスクラス
以下は、ジェネリッククラスの例です。Tは型引数(ジェネリック型)を表しており、任意の型を指定できます。
“`java
public class Box {
private T item;

public void setItem(T item) {
this.item = item;
}

public T getItem() {
return ite

元記事を表示

DbUnitのXMLに指定した値がテーブルに登録されない

DbUnitのFlatXmlDataSetBuilderに渡すXMLで1行目にカラム省略すると2行目設定できなくなる

も~どんな仕様なの。。。
何度も忘れて、何度も困って。。。

こちらの方が詳しく記載してくださっています。

https://qiita.com/opengl-8080/items/c92b6b687c9b5e277995#1%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E7%9B%AE%E3%81%ABnull%E5%80%A4%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E6%B3%A8%E6%84%8F

> 属性を省略した場合、そのカラムには null が設定される

> FlatXmlDataSet では、1行目のレコードが持つカラムでテーブルの定義が決まる
このため、1行目で value を省略して null にすると、 foo_table には id カラムしか存在しない扱いになり、残りのレコードでは value 属性が無視

元記事を表示

Java Gold 例題 nio move

“`java

import java.io.IOException;
import java.nio.*;

public class FileMoveTest {

private static final long MINIMUM_SIZE = 100 * 1024; // 100KB
private static final long MEDIUM_SIZE = 500 * 1024; // 500KB

public static void main(String[] args) throws IOException {

Path sourceDir = Paths.get(“src”, “images”);
Path minimumDir = sourceDir.resolve(“minimum”);
Path mediumDir = sourceDir.resolve(“medium”);
Path largeDir = sourceDir.resolve(“large”);

Files.creat

元記事を表示

解いてみた。「Bランク:名刺バインダー管理」

# 問題
[「Bランク:名刺バインダー管理」](https://paiza.jp/works/mondai/b_rank_skillcheck_archive/name_card)

# コード
Javaで解いてみました。

“` Java
import java.util.*;

public class Main {
public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int nN = sc.nextInt();
int nM = sc.nextInt();

// nM 番目の名刺が何枚目のファイルにあるか?
int nK = (nM + (2 * nN – 1)) / (2 * nN);

// nK 枚目のファイルの名刺番号の表、裏を足すと
// 一定の値になることから。
// mK番目のファイルにある

元記事を表示

Paiza×Qiitaキャンペーン 全問Javaで解説してみた【D 文字の一致編】

# はじめに
私はIT講師をやっています。
Paizaは初心者や、新しく言語を学んだ後の軽いコード練習用に丁度いい難易度の問題が多いサイトです。
せめて生徒には”Rank Bくらいまでは解けた方がいいよ”という形でやらせているのですが、今まで一切プログラミング的思考に触れてきていなかった方には難しいですね。
Rank Bあれば最低限、日本語による指示の理解及び、コードに変換できる能力が保証されますので、有象無象だらけの未経験の中ではマシということになりますので。

というわけで、折角のキャンペーンですので解説を記事にまとめてみました。
一度自力で解いてみてから読む方がいいかとは思います。
対象ランクへ挑戦する方向けの記事ですので、あえて解説していない部分もあることはご了承願います。

# 問題へのリンク

https://paiza.jp/works/mondai/d_rank_skillcheck_sample/diff_str

# 解答コード

~~~
import java.util.Scanner;

public class Main {
public

元記事を表示

Java Gold 例題 nio copy

“`java
public class FileCopyTest {
public static void main(String[] args) {

Path sp = Paths.get(“food.jpg”);
Path dp = Paths.get(“food_copy.jpg”);

try {
if(Files.exists(dp)) {
System.out.println(“file already exists”);
} else {
Files.copy(sp, dp, StandardCopyOption.REPLACE_EXISTING);
System.out.println(“copy sucucess”);
};
} catch(IOException e) {
System.out.println(“IOException”);
}
}
}
“`
food_copy.jpgは存在しない。
このコードを2回実行した時に表示される出力結果はどれでし

元記事を表示

[備忘録 その14] Java Silver ~継承とポリモフィズム その3~

# 参照型の型変換
## 暗黙型変換
暗黙型変換は、コンパイラが自動的に行う型変換です。主にプリミティブ型と参照型の変換で使用されます。暗黙型変換は、型が互換性があり、データの損失がない場合に行われます。

#### プリミティブ型の暗黙型変換
Javaでは、あるプリミティブ型からより大きな範囲を持つプリミティブ型に変換する場合、暗黙的に変換が行われます。

“`java
public class Main {
public static void main(String[] args) {
int i = 10;
double d = i; // intからdoubleへの暗黙型変換
System.out.println(d); // 出力: 10.0
}
}
“`
ここでは、int型からdouble型への暗黙的な変換が行われます。intの値がdoubleに変換されても、データが失われることはありません。

#### 参照型の暗黙型変換
参照型では、サブクラスのインスタンスをスーパークラスの型として扱うことができ

元記事を表示

Java11

for文
for(式1;式2;式3){
処理分;
}

式1は文
int a = 0, b = 0でもよい
a++
a+=1
varでもよい

元記事を表示

OTHERカテゴリの最新記事