JAVA関連のことを調べてみた2023年07月28日

JAVA関連のことを調べてみた2023年07月28日

初心者がJava WebアプリケーションをAzureにデプロイした話

勉強の一環で、Servlet/JSPを使ったWebアプリケーションをチーム開発で制作中です。その際実践したAzureへのデプロイ手順をまとめてみました。

# やりたいこと
1. Eclipseで作った動的WebアプリケーションをAzureにデプロイしたい
→ [Azure Toolkit for Eclipse](https://learn.microsoft.com/ja-jp/azure/developer/java/toolkit-for-eclipse/)で解決

2. WebアプリケーションからJDBCでAzureに建てたDBサーバに接続できる状態にしたい
→ [Azure SQL Database](https://learn.microsoft.com/ja-jp/azure/azure-sql/database/?view=azuresql-db)を作成することで解決

3. 勉強目的なので、無料ですべて済ませたい
→ [Azureの無料アカウント](https://azure.microsoft.com/ja-jp/free)を作ることができるっぽい(**※筆者未確

元記事を表示

[Java] Char型の文字比較

# はじめに
今回は参考にしている書籍のあるコードを疑問に思ったので理解するまでの課程です
“`java
public class Check {
public boolean isValidPlayerName(String name) {
if (name.length() != 8) {
return false;
}

char first = name.charAt(0);

if (!(first >= ‘A’ && first <= 'Z')) { System.out.println("最初の文字に数字は使えません"); return false; } for (int i = 1; i < 8; i++) { char c = name.charAt(i); if (!((c >= ‘A’ && c <= 'Z') || (c >= ‘0’

元記事を表示

【JavaGold】Connectionインタフェース

## 概要
DBMS(DataBaseManagementSystem)[^1]との接続を管理するインタフェース。
主な役割は、以下のようなデータベースとの接続に関連する操作を提供することである。
[^1]:多くのデータが集まった時にデータを管理し、操作するためのソフトウェア。

#### 主な役割
1. データベースへの接続の確立と切断
2. SQLクエリの実行
3. トランザクションの制御

`java.sql.Connection` インタフェースは、データベースの種類に関係なく、共通のメソッドを提供するため、異なるデータベースへの接続を簡単に切り替えることができる。

データベースへの接続を確立するには、通常 **`DriverManager.getConnection()`メソッド**を使用する。
`DriverManager`は、クライアントプログラムに代わって、クラスパス上にあるDBMSベンダーから提供されたドライバ[^2]を検索し、DBMSに接続する。
[^2]:インタフェースを実装したクラスを指す。

##### 例

“`java
import java.sql.

元記事を表示

【JavaGold】FilesクラスのwalkFileTreeメソッド

## 概要
指定されたディレクトリから再帰的に全てのファイルやサブディレクトリを走査する。

シグネチャは以下である。

“`java
Path walkFileTree(Path start,Set,int maxDepth,FileVisitor visitor)throws IOException
“`

– `start`:再帰的な走査を開始するディレクトリの`Path`インスタンスを指定する。

– `options`:走査オプションを含む`Set`である。
主なオプションとして`FileVisitOption.FOLLOW_LINKS`があり、シンボリックリンク[^1]をたどるかを指定できる。
[^1]:ディスク上で扱うファイルなどを本来の位置とは別にファイルを作成し、それを通じてアクセスできるようにする仕組みのこと。Windowsでいうショートカットのイメージ。

– `maxDepth`:再帰の深さの最大値を指定する。
– `0`を指定:
`start`

元記事を表示

java基礎:java文字化けと解決のまとめ

最近、たまに仕事に文字化けの現象が発生しましたので、javaの文字化けを整理してみます。

# コンパイル不備の文字化け
## 例1:
単純なjavaサンプルですが、保存時の文字コードの設定を出力結果への影響を試します。
“`java
public class helloTokyo{
public static void main(String[] args){
System.out.println(“hello tokyo”);
System.out.println(“hello東京”);
}
}
“`
まず、MS932で保存してコンパイルしてテストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476221/b2f98fc1-ea78-5bcb-dbf8-4d43f347b785.png)
文字化けなし。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476

元記事を表示

Javaのメソッドについて学習してみた

# 概要
Javaのメソッドについて学習してみました。以下のページを参考にしました。

メソッドの利用

https://www.javadrive.jp/start/method/

メソッドの使い方

https://www.javadrive.jp/start/method/index1.html

メソッドの定義

https://www.javadrive.jp/start/method/index2.html

引数を使ってメソッドに値を渡す

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

引数に配列やクラスオブジェクトを渡す

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

戻り値を使ってメソッドから値を返す

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

戻り値として配列を返す

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

return文

http

元記事を表示

java勉強メモ1

Javaのプログラムの構造

Javaのプログラムは次のような構造になっています:

大括りにクラスがあって、その中に
フィールド、コンストラクタ、メソッドを配置する。
## Javaのデータ型
Javaのデータ型は大きく2つに分けられます

基本データ型 (プリミティブ型)

整数型:

byte: 8ビット符号付き整数 (-128 から 127 までの範囲)
short: 16ビット符号付き整数 (-32,768 から 32,767 までの範囲)
int: 32ビット符号付き整数 (-2,147,483,648 から 2,147,483,647 までの範囲)
long: 64ビット符号付き整数 (-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの範囲)
小数型:

float: 32ビット単精度浮動小数点数 (約 7桁の有効数字を持つ)
double: 64ビット倍精度浮動小数点数 (約 15桁の有効数字を持つ)
真偽型:

boolean: 真 (true) または 偽 (false) の2つの値を

元記事を表示

ArrayListのcapacityを使いこなしてパフォーマンスを向上させる

## はじめに

Javaでリストを作成するとき、以下のように`new ArrayList<>()`と書いてインスタンスを作成する例をよく目にするかと思います。

“`java
List list = new ArrayList<>();
“`

しかし、以下のように`new ArrayList<>()`の()内に数値を記述してインスタンスを作成することもできます。

“`java
List list = new ArrayList<>(500);
“`

上記例の500にあたる部分が、`initialCapacity`と呼ばれる引数です。この`initialCapacity`を利用することで、リストの操作のパフォーマンスを向上させることができます。
この記事では、`initialCapacity`に関する情報と、その使い方について解説します。

## まとめ

記事が少し長くなってしまったので、先に結論を記載します。詳細については以降で説明していきます。

– **initialCapacityとは**
– ArrayListインスタンスは

元記事を表示

React + SpringBootアプリ 簡易まとめ

# 初めに

今回の記事ではReact、SpringBootを用いた旅行予約管理アプリケーションの作成を行った際に使用したコードを復習も兼ねて簡単にまとめていこうと思います。
今まではEclipseでコード編集を行っていましたが今回のアプリケーション開発ではフロントのコード編集にVC CodeとバックにはIntellijを使用しました。
環境構築などは[YouTube](https://www.youtube.com/watch?v=4LZKnegAm4g&list=LL&index=8&t=3405s)を参考にしました。

## フロント(React)からバック(Java)のAPI呼び出し
SpringBootを使用してアプリケーションを作成する際に使用するControllerに`@CrossOrigin`を使用します。
今回のReactアプリケーションではデフォルトのURL`http://localhost:3000`を使用しているのでControllerには`@CrossOrigin(“http://localhost:3000”)`とすればフロント側から指定のAPIのURLをた

元記事を表示

Javaの文字列の学習をしてみた(後編)

# 概要
Javaの文字列の学習をしてみました。以下のページを参考にしました。

文字列の先頭と末尾から空白文字を取り除く(String.trim,String.strip)

https://www.javadrive.jp/start/string/index8.html

文字列に含まれる文字を大文字または小文字に変換する(String.toUpperCase、String.toLowerCase)

https://www.javadrive.jp/start/string/index14.html

文字列の最後に別の文字列を連結する(String.concat)

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

文字列の一部を別の文字や文字列に置換する(String.replace)

https://www.javadrive.jp/start/string/index16.html

指定した区切り文字で複数の文字列を連結し新しい文字列を作成する(String.join)

https://www.javadriv

元記事を表示

java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverterエラーがでる

# はじめに

ビルドをする際に突然エラーが出てしまったのでまとめていきます

# 問題

以下のエラーが発生するようになりました

“`
Exception in thread “main” java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter, compiling:(server.clj:1:1)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3700)
at clojure.lang.Compiler.compile1(Compiler.java:7609)
at clojure.lang.Compiler.compile1(Compiler.java:7599)
at clojure.lang.Compiler.compile(Compiler.java:7676)
at clojure.lang.RT.compile(RT.java:413)
at clojure.lang.RT.load(RT.java:458)
a

元記事を表示

gauge installでReason: Invalid plugin name or there’s a network issue while fetching plugin details.エラーが出る

# はじめに

時々、gauge javaのバージョンを変えるのですが、自分の記事に書いていなかったので自分用にまとめます

# 問題

以下のエラーが発生します
理由は謎ですので、直接バージョンを変えていきます

“`
$ gauge install java
Failed to install plugin ‘java’.
Reason: Invalid plugin name or there’s a network issue while fetching plugin details.
“`
# 解決方法

以下からほしいバージョンを取得します (javaで今回はやります)

https://github.com/getgauge/gauge-java/releases

ダウンロードしたら解凍します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/f8b07b34-623e-ea06-fc6c-e6f198f55c72.png)

3つありました
これを必要

元記事を表示

RestTemplateで外部のWeb APIにアクセスするクラスのテストを、MockRestServiceServerを使って書く

# やりたいこと
Springの`RestTemplate`で外部のWeb APIにアクセスするクラスのテストを書きたいです。しかしその場合、アクセス先のサーバーをどうやって用意するかが問題になります。

[WireMock](https://wiremock.org/)など、モックサーバーを用意するためのライブラリも存在します(個人的には使ったことないので詳しくは分かりません)。

今回はSpringで用意されている`MockRestServiceServer`を使ってみます。`MockRestServiceServer`は名前の通りモックサーバー機能を持つクラスです。`RestTemplate`と連携することができます。

# 環境
– JDK 17
– Spring Boot 3.1.2

> 将来のバージョンアップにより、内容が正しくなくなる可能性もあるので注意してください。

# サンプルコード
https://github.com/MasatoshiTada/mock-rest-service-server-sample

# Web APIの仕様
## GET /api/

元記事を表示

[Java] 文字列の連結

# 文字列の連結とは
* 2つ以上の文字列をつなげること
* 文字列の連結(concatenation)
“`java:例
String s = “日本語で” + “あそぼ”;
“`
* +演算子を使用する他にも連結する方法はある
* しかもその方が圧倒的に処理速度が高速
# +演算子が遅い理由
* Stringインスタンスが保持する文字列情報は、インスタンス化した際に初期化され、以後`二度と変化しない`
* 例えば「s = s + “World”;」が実行されたとして、String型変数sのサイズが大きくなり「”HelloWorld”」とはならない
* +演算子による連結が行われた瞬間、`古いインスタンスは捨てられ`連結後の情報を持つ`新しいインスタンがnewにより生成`、格納される
* 結果、+演算子による数万回の文字列連結は内部で数万回newすることを意味する(だから遅い)
# StringBuilderを用いた連結
## StringBuilderクラス
* StringBuilderクラスは可変(mutable)
* StringBuilderインスタンスは、内部に連結し

元記事を表示

オーバーライド

# オーバーライド

:::note
オブジェクト指向言語において、**サブクラス(派生クラス)が親クラスのメソッドを再定義して上書きすること
→サブクラスは親クラスのメソッドの振る舞いを変更したり、新しい機能を追加したりできる**
:::

## オーバーライドで重要な点

– **メソッドのシグネチャが親クラスと一致していること**
シグネチャ : メソッド名、引数の型、戻り値の型

– **サブクラスでオーバーライドするメソッドは、親クラスのメソッドと同じメソッド名と引数を持ち、戻り値の型も同じである**必要がある
→メソッドの処理内容や振る舞いはサブクラスで変更可能

## オーバーライドの例

“`java
class Animal {
void makeSound() {
System.out.println(“Animal makes a sound.”);
}
}

class Cat extends Animal {
// 親クラスのmakeSoundメソッドをオーバーライド
@Override
void ma

元記事を表示

【JavaGold】Filesクラスのlist、walk、findメソッドの比較

## 比較

以下の観点で比較する。

– 対象のファイルまたはサブディレクトリ
– 使用方法

#### 対象のファイルまたはサブディレクトリ
– `list()`:指定されたディレクトリ内の直下のファイルまたはサブディレクトリをリストアップする。**サブディレクトリは再帰的には走査しない。**

– `walk()`:指定されたディレクトリ内のファイルやサブディレクトリを**再帰的に走査し、全てのエントリをリストアップする。**

:::note info
`maxDepth`パラメータを使用して、再帰の深さを制御することができる。
:::

– `find()`:指定されたディレクトリ以下で**特定の条件に合致するファイルを再帰的に検索する。**
検索条件は`BiPredicate`インタフェースを使用して指定する。

#### 使用方法
– `list()`:**直下の**ファイルまたはサブディレクトリをリストアップしたい場合に使用する。

– `walk()`:ディレクトリ以下の**全ての**ファイルまたはサブディレクトリ

元記事を表示

【JavaGold】StandardOpenOption

## 概要
Java NIO.2(New I/O)パッケージでファイルの書き込み時に指定するオプションを定義する列挙型(Enum)である。
ファイルの書き込み時に特定のオプションを指定することでファイル操作の動作を制御することができる。

#### 主な定数

– `READ`:読み取りモードでファイルを開く。
ファイルを読み取るために使用する。
– `WRITE`:書き込みモードでファイルを開く。
ファイルに書き込むために使用する。
既存のファイルを開く場合、既存の内容を上書きする。

– `APPEND`:追記モードでファイルを開く。

– `CREATE`:ファイルが存在しない場合に、新しいファイルを作成する。

– `CREATE_NEW`:ファイルが存在しない場合に新しいファイルを作成する。
既にファイルが存在する場合は例外がスローされる。

– `DELETE_ON_CLOSE`: ファイルを閉じる際に、ファイルを自動的に削除する。

– `TRUNCATE_EXISTING`: ファイルをオープンする際に、既存の内容を削除する。

– `SYNC`:書き込んだデータをディ

元記事を表示

【JavaGold】resolveメソッド

## 概要
`java.nio.file.Paths`クラスの`resolve()`メソッドは、2つの`Path`インスタンスを結合して新しい`Path`インスタンスを作成する。
このメソッドは、パスの絶対・相対の関係にかかわらず、2つのパスを連結して新しいパスを作成する。

シグネチャは以下のようになっている。

“`java
public Path resolve(Path other)
“`

引数として結合したいもう一方の`Path`インスタンス(`other`)を受け取り、それらを結合した新しい`Path`インスタンスを返す。

##### 例
例えば、次のようなディレクトリ構造があったとする。

“`
root
├── dir1
│ └── file1.txt
└── dir2
└── file2.txt
“`

以下は、`Paths.resolve()`メソッドを使用して2つの`Path`インスタンスを結合している。

“`java
import java.nio.file.Path;
import java.nio.file.Paths;

pub

元記事を表示

操車場アルゴリズムを Java で実装してみた

# 操車場アルゴリズムとは
 我々人間に分かりやすいように書かれた数式(中置記法)を、プログラムで処理しやすい数式の形(後置記法)へ変換するアルゴリズム。
ダイクストラ法でお馴染みのエドガー・ダイクストラが考案したもの。

例として中置記法で `3 + 4` と示される式は、後置記法で `34 +` と表記することが出来る。

# 実装例
“`java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

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

元記事を表示

ディープコピー(だと思い込んでいたもの)

“`java
List a = new ArrayList<>();
a.add(“AAA”);

List b = a.subList(0,a.size());
b.add(“BBB”);

List c = new ArrayList<>(a.subList(0,a.size()));
b.add(“CCC”);

System.out.println(a);
System.out.println(b);
System.out.println(c);

/*
* [AAA, BBB]
* [AAA, BBB]
* [AAA, CCC]
*/
“`

~~普通に subList -> シャローコピー
subList したものをコンストラクタに渡す -> ディープコピー(もどき)~~
**subListは指定範囲の見かけを返すだけで、切り出してコピーしたりするわけじゃない。**
(追って更新します)
(@yoshi さんコメントでのご指摘ありがとうございます!)

元記事を表示

OTHERカテゴリの最新記事