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

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

Intellij IDEAとDockerでAmazon corretto17 open jdkでの開発環境を作ってみた

## はじめに
大学の課題でeclipse+amazon corretto17という開発環境の指定が入ったjava開発をやらなきゃいけなくなりました。
IntelliJで慣れてしまっている自分にeclipse(しかも大学のLinuxに入っている英語版)での開発は地獄だったので、いっそのこと自前の開発環境を最近習ったdockerを使って構築してみようと思った次第です。
仮想環境での開発については初心者すぎる筆者が行き当たりばったりで環境構築したので間違いだらけだと思います。積極的にコメント等で指摘していただけると助かります。

## Amazon corretto 17 でDev Containerを作成
IntelliJを今回使うPC(今年新調したばかり)に入れるのが初めてだったので、以下のようなwelcome画面から始めることができました。すでにプロジェクトを作成したことがある場合にはどうすればいいか、有識者の方教えていただけますと幸いです。

以下の画面でDev Containerを選択し、新規Dev Container作成。

![image.png](https://qiita

元記事を表示

Singletonパターンにご注意を

## Singletonパターンとは
Singleton(シングルトン)パターンは多くの問題の解決に役立つパターンです。

このパターンでは、クラスのインスタンスは必ず1つしか生成されません。そのインスタンスは使用前に必ず初期化され、シングルトンをグローバルアクセスポイントとすることで、設計をシンプルにできます。

こう書いていくと良いことずくめのようですが、この「古典的な」デザインパターンに何か短所はあるのでしょうか。

## Singletonにご注意を
実はたくさんあります。

確かにシングルトンパターンは魅力的ですが、実はこのパターンには利点よりも弊害の方が多いと言えます。
まずテストの妨げになります。そして保守性の点でも不利です。残念ながらその事実は広く知られているとは言えないため、多くのプログラマを焚き付けているのです。つい使いたい誘惑にかられますが、その誘惑に抵抗しなくてはなりません。
### 具体的な問題例
– **「必要なインスタンスは1つだけ」という要望は、多くの場合推測にすぎない**

アプリケーションの設計段階では「インスタンスは絶対に1つしかいらないだろう

元記事を表示

【Java】抽象クラスの継承を覚える

通常のクラスの継承に対して、抽象クラスの継承は何が違うのか、覚えるための自分用メモです。

# 抽象クラスとは?
抽象クラスでは、一部のメソッドを抽象メソッド(“`abstract“`)として記述することで、継承したサブクラスでのオーバーライド(実装)を強制します。
“`java:Animal.java
public abstract class Animal {
private String name;
public Animal(String name) {
this.setName(name);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
// 話す
public abstract void talk();
}
“`
以下のようにオーバーライドすれば問題ありませんが、オーバーライドしなかった場合

元記事を表示

Javaで「配列の長さを取得する(length)」の動作を確認してみた

# 概要

Javaで「配列の長さを取得する(length)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/array/index6.html

# 実装

以下のファイルを作成しました。
“`JSample6_1.java
class JSample6_1{
public static void main(String[] args){
double[] num = new double[3];

num[0] = 5.24;
num[1] = 8.0;
num[2] = 12.375;

for (int i = 0; i < num.length; i++){ System.out.println("num[" + i + "] = " + num[i]); } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample6_1.java $ java JSample6_1 num[0] = 5.24

元記事を表示

Spring Thymeleaf type=”date”で過去の日付を選択できないようにする方法 備忘録#3

# type=”date”で、過去の日付を選択できないようにする方法

### 初めに

今回は、WEBサイト開発の中で、`「予約時に過去の日付は選択させたくない!!」`と思い調べても見つからず、周囲の賢い方に教えてもらったので、記録として残したいと思います。

###画像イメージ

![スクリーンショット 2024-06-13 22.43.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807467/e0b78fa3-ae4e-0d72-2646-33895becd1df.png)

↑このように、カレンダーで選択画面が表示され、過去の日付を押そうとすると現在の日付になります。
※Windowsでは、過去の日付が全てグレー色になって、選択できないようになります。

:::note info
このように、日付を選択させないやり方は、thymeleafの機能だけで行うことができます!
:::

###HTML

“`diff_html

元記事を表示

Thymeleaf式の参照プレフィックス

JavaのフレームワークであるSpringBootを用いてアプリ開発について学習している過程で、HTMLをテンプレートを動的に生成するテンプレートエンジンであるThymeleafの参照プレフィックスをいくつか使用したので、備忘録として記録したいと思います。
## 参照プレフィックスとは
参照プレフィックスはテンプレート内で特定の種類のデータや機能を示すために使われる記号のことです。この記号を使うことで、参照プレフィックスの後に続く要素が特定のデータや機能を参照することができます。
## 具体的な参照プレフィックスの例
今回は学習の過程で使用した3つの参照プレフィックスについて説明します。
## ‘@’:URLや静的リソースの参照
‘@’プレフィックスはURLや静的リソースを参照するために使用します。下記のその2通りについて説明します。
### URLの生成
下記は’@’を用いてURLを生成した例です。例では’@’プレフィックスを用いることで、’@{/home}’がテンプレート処理時に’/home’というURLに変換され、該当部をクリックすると生成したURLに遷移できるようになっています

元記事を表示

Java switch文のアロー演算子を用いた構文ついて

## switch文でのアロー構文
switch文でアロー演算子を用いたコードを初めて見たのでメモとして残しておく。

アロー演算子「->」を使うことでswitch文の「:」と[break;]を省略することができる。
{}でブロックを作れば複数行の処理も書ける。
String str = “B”;
switch(str){
case “A” -> System.out.println(“A”);
case “B” -> System.out.println(“B”);
case “C” -> {System.out.println(“C”);
      System.out.println(“D”);
      System.out.println(“E”);
      }
}

### 普通の書き方
String str = “B”;
switch(str){
case “A”: System.out.println(“A”);
    break;
case “B”: System.out.println(“B”);
    break;
case “C”: System.o

元記事を表示

Javaを勉強してみよう!

# なぜJavaなのか
 自分が業務で使っている以外の言語で、どの言語を学びたいかと考えたときに、ゲームを作れると聞いてやってみようと思ったから。

# Javaとは
 そもそも、Javaとはどういう言語なのかというと、
20年前に開発されたにもかかわらず、現在でも人気のプログラミング原語。その理由として、WindowsなどのOSやプラットフォームに関わらずJavaインタプリタがインストールされた環境ならどこでも実行できる点。また、オブジェクト指向プログラミング言語である。Javaで開発されたアプリは有名どころでいうとSpotifyやX(旧twitter)、ゲームはmincraftがある。Javascriptとは別の言語でWEB以外でも使われる。(https://azure.microsoft.com/ja-jp/resources/cloud-computing-dictionary/what-is-java-programming-language より要約)

# よし!簡単なゲーム作れるぐらいになるぞ!
3日坊主で終わりそう😅

元記事を表示

なぜデザインパターンを学ぶのか?

# デザインパターンとは?
### 当時の達人が考えた設計思想
デザインパターンとは、状況ごとのシステム設計のカタログです。
「こういう状況であれば、こう設計した方が良いよ」というものが記載されたものになります。

従ってデザインパターンを知っておくと、状況に応じた最適な設計をすることができるようになります。

デザインパターンは、過去のエンジニアの集合知になるので、自分でゼロから考えるよりも、良い設計が可能になります。

### GoFのデザインパターン
デザインパターンの一般的な意味は上記の通りなのですが、
システム開発においてデザインパターンと言うと、ほぼ**GoFのデザインパターン**のことを言います。

**GoFのデザインパターン**とは、書籍『[オブジェクト指向における再利用のためのデザインパターン](https://amzn.to/3QRNuCO)』に記述された、オブジェクト指向プログラミングに関するデザインパターンです。

書籍は4名の共著なのですが、その4名が「Gang of Four」と呼ばれておりそこから「GoFのデザインパターン」と言われています。

#

元記事を表示

GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる。つづき。関連のあるデータの取得

こんにちは。@masatomix です。

最近、現場でGraphQLとRESTサーバを構築する機会があったので、そのとき得られた[ナレッジを備忘としてまとめている](https://qiita.com/masatomix/items/53003a34d413206bb619)のですが、その続きです。

前回の初期状態から、すこし手を入れていきます。

## TL;DR

– Spring Data RESTが自動生成するRESTサービスについて、リンクになっているところを微調整します。
– ついでに、よけいなSQL文を発行しないよう微調整します
– GraphQL がQueryで指定するプロパティに応じて、必要なときだけBackendにデータを取りに行くようにする

## Spring Data RESTが自動生成するRESTの戻り値について、FKがオブジェクトじゃなくてリンクになっている

今回もこのデータ構造です。

![image-20240610114259607.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

デザインパターン Builderパターン

# Builder パターン
**オブジェクトの生成、初期化を簡潔にする**ためのデザインパターン。

通常、オブジェクトの生成(インスタンス化)にはコンストラクタを用いるが、コンストラクタに必ず受け取るわけではないオプショナルな引数があったり、要求に応じて引数のバリエーションを選択する必要がある場合、コンストラクタが複雑化してしまう。

そのような場合にBuilderパターンを利用することで、複雑になりがちな初期化処理が隠蔽され、クライアントにとって簡潔に利用できるようになる。

オブジェクト作成の詳細を隠蔽すると言う点ではFactoryパターンと似ている。両者の違いとして、Builderパターンにおけるクライアントは、Factoryパターンを使用する場合よりもより多くのオブジェクトに対する知識が必要とされる点などがある。

Factoryパターンについてはこちらにまとめています。

https://qiita.com/AsahinaKei/items/3a1f17b728769bab95b7

## 構成要素

### Target
生成対象のオブジェクト。

設定値を保持するデー

元記事を表示

Javaで「配列の要素の初期化と規定値」の動作を確認してみた

# 概要

Javaで「配列の要素の初期化と規定値」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample5_1.java
class JSample5_1{
public static void main(String[] args){
int[] i = new int[1];
System.out.println(“int : ” + i[0]);

long[] l = new long[1];
System.out.println(“long : ” + l[0]);

double[] d = new double[1];
System.out.println(“double ; ” + d[0]);

boolean[] b = new boolean[1];
System.out.println(“boolean : ” + b[0]

元記事を表示

Spring Bootstrap テーブルを中央揃えする方法 備忘録#2

# テーブルを中央揃えする方法

#### 初めに
今回は、Springbootを使って、掲示板機能を作成した際に、テーブルを中央揃えの仕方を調べて扱ったので、備忘録として残したいと思い記述しました。

テーブルだと、**text-center**や**justify-content-center**を使用してもなかなか中央に行ってくれないので、私はこれを試しました。

###完成図(イメージ)

![スクリーンショット 2024-06-12 19.48.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807467/9697ab5a-cd3e-8501-6c00-f4c43a0c3884.png)
↑このような感じでテーブルを真ん中に持っていきます!

###HTMl

“`diff_java

+

2つのCSVファイルを取り込み差分を抽出する

カラム名を動的に取り込み、CSVファイルをSQLiteに格納する方法を以下に示します。ここでは、CSVの最初の行をカラム名として使用します。

### 必要なライブラリ
1. SQLite JDBCライブラリ
2. OpenCSVライブラリ(CSVファイルの読み書きに使用)

### ステップ1: 必要なライブラリを追加

Maven依存関係




org.xerial
sqlite-jdbc
3.34.0



com.opencsv
opencsv

Javaとは・JVM(Java Virtual Machine)とは・3つのエディション・Javaの開発環境

# Javaとは
**【動画URL】** https://youtu.be/7tZ7wK-Xt1Y

◆1995年にSun Microsystemsから最初にリリースされたプログラミング言語

◆オブジェクト指向という考え方でプログラミング出来る

◆スマートフォン向けアプリを作成する事も出来る

# JVM(Java Virtual Machine)とは
**【動画URL】** https://youtu.be/nQjtkX5tsJg

◆Javaのプログラムを動かすために必要なソフトウェア

◆一度書いたらどこでも動く(Write Once,Run Anywhere)

![](https://storage.googleapis.com/zenn-user-upload/78390c380780-20231009.png)

# 3つのエディション
**【動画URL】** https://youtu.be/O0PjPZO_l9o

◆JavaSE(Java Standard Edition) 基礎となる標準的な機能をまとめたもの

◆JavaEE(Java Enterprise

【初心者】モックという概念

# モックとは何か
テスト対象クラスで使用している外部オブジェクトの代わりに模擬の外部オブジェクトを作成することです。
モックを利用することで外部オブジェクトの動作に影響されずにテスト対象クラスの動作をテストすることができます。
※モックフレームワークによって違いがあるため、この記事ではMockitoを例として説明します。

以下のコードでは、`ExampleServiceImpl` クラスの `method01` メソッドが `ExampleRepository` からデータを取得しています。この `ExampleRepository` をモックに置き換えることで`ExampleServiceImpl` クラスの `method01` メソッドが正しく動作するかを、`ExampleRepository` の実装に依存せずにテストすることができます。
### サービスのサンプルコード
“`java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ster

Javaで「配列要素へのアクセスとインデックス」の動作を確認してみた

# 概要

Javaで「配列要素へのアクセスとインデックス」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample4_1.java
class JSample4_1{
public static void main(String[] args){
int[] num = new int[4];

num[0] = 10;
num[1] = 8;
num[2] = 16;
num[3] = 5;

for (int i = 0; i < 4; i++){ System.out.println("num[" + i + "] = " + num[i]); } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample4_1.java $ java JSample4_1 num[0] = 10 num[1] = 8

GraphQLサーバとRESTサーバをさっと立ちあげて、実際に触ってみる

こんにちは。@masatomix です。

最近、現場でGraphQLとRESTサーバを構築する機会があったので、そのとき得られたナレッジを備忘としてまとめておこうと思います。

## TL;DR

– RESTサーバとGraphQLサーバを構築します
– EntityとRepositoryから RESTサービスを自動生成します(Spring Data RESTの機能)
– EntityからDDLを実行してテーブルの作成、データ投入を行います(SpringBootとJPAの機能)
– JPAとSpring Data RESTの機能を使って
– ManyToOneの関連があるRESTサービスを自動生成します
– Swggger(OpenAPI)を有効にします。API仕様書のJSONもダウンロード出来ます
– openapi-generator をつかってRESTにアクセスするプロキシ(TypeScript)を自動生成します
– Apollo Serverの機能を使って
– GraphQLのリクエストを受け取って、RESTからデータを取得してGraphQLで返却しています。

S

build.xmlにXmaxerrsオプションを追加したい

# はじめに
Antを使っているプロジェクトで一時的に大量のエラーが表示される状況下において、そのエラー内容を見たいというケースがありました。
ビルド実行時に「もっと見たければ-Xmaxerrsオプションを付けてね!」と教えてはくれるのですが、Antが下火なこともありbuild.xmlで指定する方法がすぐには見つけられなかったので、備忘録としてメモしておきます。

# build.xmlでの指定方法
`javac`要素の子要素として`compilerarg`を記述すれば良いだけです。
“`xml:build.xml






“`

# 参考サイト
– [Anatomy of a simple Ant build.xml file](https://bedr

文字列チェック

“`java
public class StringChecker {
public static void main(String[] args) {
String[] testInputs = {
“Example@123”, // 大文字, 小文字, 数字, 記号 – 4種類
“EXAMPLE123”, // 大文字, 数字 – 2種類
“example123”, // 小文字, 数字 – 2種類
“Example”, // 大文字, 小文字 – 2種類
“123456”, // 数字のみ – 1種類
“example!”, // 小文字, 記号 – 2種類
“EXAMPLE@”, // 大文字, 記号 – 2種類
“123!@”, // 数字, 記号 – 2種類