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

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

mockito基本

# 基本

## Mockしたクラスのメソッドが呼ばれることのテスト

“`java
@ExtendWith(MockitoExtension.class)
public class IndexSelectScanTest {
@Mock
private User user; // mockしたいClass

@Test
public void testMock() {
Example expl = new Example(user);
expl.doSomethingForUser(); // ExampleのdoSomethingForUser()メソッドをコール
verify(user).doSomething(); // userのupdateIdメソッドも呼ばれたことをテスト
}
}
“`

## Mockしたクラスで返す値をセットしておく

“`java
@ExtendWith(MockitoExtension.class)
public class IndexSelectScanTest {
@Mock
pr

元記事を表示

var

varは型推論
Objectに存在しないtestメソッドを定義することで
Objectではない別のクラスを推論して宣言する

“`java
public class Outer {
public static void main(String[] args) {
var obj = new Object() {
public void test() {
System.out.println(“i am test method”);
}
};
obj.test();
}
}
“`
“`
i am test method
“`
Objectで宣言するとエラー。
“`java
public class Outer {
public static void main(String[] args) {
Object obj = new Object() {
public void test() {
System.

元記事を表示

local classをほかのメソッドから利用する

“`java
interface SampleInterface{
void method();
}
public class Outer {
public static void main(String[] args) {
Outer o = new Outer();
o.method().method();
}
SampleInterface method() {
String name = “sato”;
class SampleLocalClass implements SampleInterface {
@Override
public void method() {
System.out.println(“name:” + name);
}
}
return new SampleLocalClass();
}
}
“`
“`
name:sato
“`

元記事を表示

【自作アプリ 収支アプリ】その1 〜設計書編〜

## 自作 収支アプリ

#### 要件定義
システム:株式投資集計ソフト
期間:3ヶ月半
言語:Java
人数:1人
DB:h2database
server:apache

#### 基本設計
画面数:9
CAN:ログイン機能・ユーザー登録削除・TOP画面(収支)・銘柄別画面・グラフ画面・収支追加画面・PDF化画面、、、
#### 詳細設計書
したいこと:日時週次月次で収支を確認できるアプリケーション
言語:Java、servlet、jsp

#### CD
期間:1月上旬~2月中旬
#### UT
期間:3日
#### IT
期間:3日
#### ST
期間:3日
#### リリース
時期:3月末

## 背景
友人から収支アプリを作ってほしいとの声があった為。Javaの学習を深めるのに良い機会だと感じた。

#### ☆画面詳細 機能

###### ログイン機能
ボタン:ログイン・新規登録
###### ユーザー登録、削除
ボタン:登録・削除・戻る
###### TOP画面(収支)
ボタン:ログアウト・登録情報確認・銘柄別画面
###### 銘柄別画面
ボタン:戻る
#

元記事を表示

未経験からのエンジニア転職に向けてSpringBootでREST APIを作成してみた

# 概要

[API仕様書](https://tomoroltuto.github.io/Business-management-application-document/dist/index.html)を元に業務管理アプリケーション用REST APIを作成しました。下請業者との作業内容を共有し業務改善することを目指し、主な機能は以下の通りです。

* 作業予定・作業実績を登録・編集・削除できる
* 作業予定・作業実績の一覧表を表示できる
* 過去の作業予定・作業実績の履歴を検索できる

[記事元のGitHubと全体仕様書は別のREADMEにまとめております](https://github.com/tomoroltuto/business-management.git)

# 作成背景
現在、電気設備工事の現場監督(サブゼネコン)として働いています。建築(ゼネコン)との業務管理はアプリケーションで管理しておりますが、サブゼネコンとの下請け業者とはアナログ管理でしています。

組織構成図

![業務管理体制](https://user-images.githu

元記事を表示

Spring bootでTomcatのリクエスト情報をログへ出力する

# 背景

Spring bootで開発したAPIに対して脆弱性テストを実施した際に、tomcatのエラーページが表示されるケースがあった。
調べた限りでは、Controllerまで到達せずにtomcatのエラーページがHTMLでレスポンスされるようになっており、設定による変更が不可能。エラーページを出力する処理をオーバライドしてカスタマイズすることで回避する方法が提案されていた。
[参考のGithub issue](https://github.com/spring-projects/spring-boot/issues/21257)

#### エラーページが表示される例
– URIに使用できない文字が含まれている
“http://localhost:8080/api/get/%aaa“
– ヘッダに使用できない文字が含まれている
“(request): test“

# 実施したいこと

エラーページのカスタマイズは本投稿下部の参考情報をもとに実現できたが、このようなリクエストがあっても必ずしも例外が発生するわけではないようで、エラー時の情報が取得できない。
– リクエス

元記事を表示

各言語のコンテナ

# これは何?

コンテナクラスとかコレクションライブラリとか呼ばれるものの各言語の対応について知りたくなったので、調べた。

# コンテナの色々

思いつく限り書いていくと。

* 配列・vector・slice
* リンクリスト
* 双方向リスト
* 単方向リスト
* deque
* ring buffer
* 辞書 / 集合 / マルチ辞書 / マルチ集合
* 順序がないやつ
* 順序があるやつ
* 挿入削除が速いやつ
* 挿入削除が遅いやつ

当然全部網羅とかはありえないわけだけど、これぐらいで。

## 配列・vector・slice

要素をダラダラ並べた感じ。
インデックスアクセスが速い。末尾への追加もたいてい速い。
末尾以外に追加削除すると時間がかかる。

配列 (Array) と呼ばれることもあるし、vector と呼ばれることも Slice と呼ばれることもある。

List と呼ばれることもある。私はリンクリストを先に想像するのでそう呼びたくはないんだけれども。

## リンクリスト

「次はここ」という情報で要素をたどる。
双方向

元記事を表示

Javaのstatic修飾子:クラス変数(static変数)、クラスメソッド(staticメソッド)

## static修飾子とは
static修飾子は変数(フィールド)やメソッドにつける修飾子でクラスのオブジェクト(インスタンス)を生成しなくても呼び出す事が出来る様になる。
static修飾子をつけた変数は「クラス名.変数名」、static修飾子をつけたメソッドは「クラス名.メソッド名」の様に「クラス名.」の後に記述する事が出来るため、それぞれを**クラス変数(static変数)**、**クラスメソッド(staticメソッド)** と呼ぶ。
“`:サンプルコード
public class Sample{
//クラス変数(static変数)
public static int num = 0;
//クラスメソッド(staticメソッド)
public static void sampleMethod{
:
}
}
“`

## クラス変数(static変数)とは
staticキーワード(修飾子)を付けて宣言される変数であり、すべてのオブジェクト(インスタンス)で共有される共通の情報となる。あるオブジェクトからクラス変数

元記事を表示

Eclipseでサーブレットのプロジェクトをインポートするとエラーだらけになる

久しぶりに書きたくなったので約半年ぶり記事書きます!

最近Eclipseでサーブレットを使っているんですが、ローカルでプロジェクト保存してインポートしたり、Githubのリポジトリからインポートしたりした際に大量のエラーが吐かれて「なんじゃこりゃ!」ってなりました…。

調べてもなかなかこのような解決策が出てこなかったので、同じような人の助けになれば幸いです!

プロジェクトは、**スッキリわかるサーブレット&JSP入門**に載っている**dokoTsubu**プロジェクトを使用しています。
[スッキリわかるサーブレット&JSP入門の商品サイト](https://sukkiri.jp/books/sukkiri_servlet2)

## 開発環境
Windows11 home
Eclipse 2022
Java17
Tomcat9

Mac版のEclipseでも同様の手順で解決できます。

## エラーの症状

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2712147/6196

元記事を表示

Javaのオーバーロード

## オーバーロードとは
一つのクラス内に同じ名前で引数の型や数が違うメソッドを複数定義する事を**オーバーロード**という。
同じ名前で定義するだけなのでメソッドの内容(処理)は違う内容にする事が出来る。
オーバーロードするメリットは
・同じデータを設定する為のメソッドなので同じ名前にする事でプログラム自体がわかりやすくなる。
・同じ名前を付けていいので名前をつけるのが楽になる。
・メソッド名が変わらないので呼び出す際に使いやすい。
などがある

“`:例文
class Student{
String name;
int engScore;
int mathScore;

void setData(String n){
name = n;
}
void setData(String n, int e, int m){
name = n;
engScore = e;
mathScore = m;
}
}
“`
上記のStudentクラスではsetDataメソッドを二つ定義(オーバーロード)している。
片方のsetDataメ

元記事を表示

Javaのコンストラクタ

## コンストラクタとは
オブジェクトやフィールドの初期化(変数の宣言と同時に適切な値を格納することで「最初から有効な値が入っている」状態にする)の為に使われる特殊なメソッド。
オブジェクトの生成(インスタンスの生成)とともに自動的に呼び出され、クラスのオブジェクトを生成するタイミング(new クラス名 ())で動作する。

**インスタンスの生成と同時に値が代入できるメリットがある。**
またインスタンス生成時に自動的に呼び出されるので、最初に変数を定義しておくことが出来、初期化のために別のメソッドを呼ぶ必要がなくなるので、その分コードが簡単になる。

コンストラクタもメソッドの一種なのでオーバーロード(同じ名前のメソッドを複数定義する事)が出来る。
“`:コンストラクタのオーバーロード
class Student{
:
Student(String n){
:
}
Student(String n, int e, int m){
:
}
}
“`

**コンストラクタを定義するには**
・名前がクラス名と同じにする

元記事を表示

Javaの例外処理2:throws キーワードとthrowとの違い、スタックトレース

## throwsキーワード
メソッドの中で例外が発生した場合、同じメソッドの中でキャッチせずに、メソッドの外へ投げることができる。
例外を送出する可能性のあるメソッドを作成する場合、メソッドの宣言で次のように**throwsキーワード**を使う。
“`
戻り値 メソッド名(引数) throws 例外オブジェクトの型 {
例外を投げる可能性のあるメソッドの内容
}
“`
例外処理をメソッドの中で行わず、呼び出し元で対処してほしいときに使用する。

**throwとの違い**
・throwは、例外を意図的に発生させて、例外処理を実行させることができる。
・throwsは、メソッド内で例外が発生した場合、自身のメソッド内でcatchするのではなく呼び出し元に例外を投げる。(呼び出し元でtry-catch文の準備をしておく必要があり)

### 例文
“`:例外クラス
class InvalidAgeException extends Exception{
InvalidAgeException(String message){
super(message);
}

元記事を表示

Javaの例外処理1:例外オブジェクト(例外クラス)、例外のスロー(throw)

## 例外処理
**コンパイルエラー**
プログラムコードの中のづつりの間違いや文法の誤りは、コンパイル時に検知され、コンパイルエラーという形で知らされる。

**ランタイムエラー**
コンパイルは問題なくできたものの、プログラムを実行させたときに発生するエラー

プログラムを実行している途中に発生するこのようなトラブルや、それを表すものをJava 言語では**例外(exception)** と言う。
例外が起きたことは「例外が発生する」のほか、**「例外が投げられる」「例外がスロー(throw) される」** などと表現される。

例外が投げられる原因はさまざまだが基本的には、「想定外のことが起きて、そのまま処理を継続できない」という状況が発生したときに例外が投げられる。

“`:例文
public class ExcepentionExample{
public static void main(String[]args){
int a =4;
int b =0;
int c = a /b;
System.out.println(“cの値は”

元記事を表示

Java 継承2:抽象クラスとポリモフィズムとは

継承には
①スーパークラスを元にフィールドやメソッドをサブクラスに引き継がせて**機能追加**をする方法
②サブクラスが共通して持っているフィールドやメンバ変数、メソッドを元にスーパークラスに**共通点をまとめて**他のサブクラスに継承させる方法
がある。

②の様な方法で継承させる際に共通のメソッドの定義のみをスーパークラスに継承させたメソッド( System.out.printlnなどの実装内容を持たないメソッド)を**抽象メソッド**、抽象メソッドを一つでも含むクラスは**抽象クラス**と呼ぶ。

また、異なる実装内容を持つオブジェクトを、同一のメソッドで扱うことができること**ポリモフィズム**をと呼ぶ。
ポリモフィズムは、・多様性・多態性・多相性ともいう。

## 抽象クラスと抽象メソッド
・メソッドの定義だけを書いて実装内容(処理の中身)を持たないメソッドを抽象メソッドと呼び、修飾子に**abstract**をつけて定義する。

・クラスの中に一つでも抽象メソッドが含まれているクラスを抽象クラスと呼び修飾子に**abstract**をつけて定義する。
“`
アクセス修飾子

元記事を表示

Java 継承1:オーバーライド、thisとsuper

## 継承とは
既存のクラスを元に変数やメソッドなどの新しい処理や機能を追加したクラスを作る事。
継承関係にある親のクラス(既存のクラス)を**スーパークラス**、子のクラス(既存のクラスを元に変数やメソッドを追加したクラス)を**サブクラス**と呼ぶ。
![スクリーンショット 2022-11-06 10.55.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2785154/6834ef52-50b0-5a1a-f213-19b57e41e8cf.png)
上の写真ではPersonクラスがスーパークラス、SutudentとTeacherクラスがサブクラスになる。

Personクラスでは名前などを扱う変数やメソッドを定義しているとする(斜線の部分が変数やメソッドのイメージ)。Personクラスから継承を行うことでサブクラスであるSutudentとTeacherクラスでPersonクラスが持っている変数やメソッドが使える様になり、さらにSutudentとTeacherクラス独自の変数やメソッドを追加し

元記事を表示

Javaのキューとスタック:sortメソッドによる並び替え

## キューとスタック
コレクションに格納された要素の取り出し方としてデータを一時的に格納し、それを順番に取り出す方法として、**Queue(キュー)** と **Stack(スタック)** と呼ばれる2とおりの方法があり、データの処理の最も基本的な方法として広く用いられる。

・**キュー**:複数のオブジェクトを管理する方法の1つ。先に追加されたオブジェクトから順番に取り出すことができる。
・**スタック**:キューと対になる、複数のオブジェクトを管理する方法の1つ。後に追加されたオブジェクトから順番に取り出すことができる。

## Queue(キュー)
キューは「先入れ先出し(First In FirstOut:FIFO) 」と呼ばれるオブジェクトの管理方法で、追加した順番にオブジェクトの取り出しを行う。
パッケージjava.utilのインタフェースQueueになる。
![スクリーンショット 2022-11-12 14.46.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2785154/19

元記事を表示

JavaのMVCモデル

## MVCモデルとは
MVCモデルとは、Webサーバ内のプログラムを、M(Model)、V(View)、C(Controller)の役割に分ける設計手法。
**・Model**:アプリケーションにおけるデータの保持や業務処理の実行などの処理ロジックを担当する、いわばシステムの本体部分にあたるモノ。モデルは入出力や表示といった処理を行うことはできない。
**・View**:表示処理や入出力処理などの画面表示の部分を担当。
**・Controller**:アプリケーションの実行の制御を担当。自分自身では表示を行ったり、ロジックの実行は行わず、リクエストからの入力に応じて、必要なロジックの実行をModelに依頼し、その結果表示をViewに依頼する。

開発する側としては「M」「V」「C」で分割されているため、開発作業の効率が高くなり、独立性が高いため他の要素とのやり取りが少なくすみ、依存性が抑えられる

Javaでは**ModelはJavaのクラス(BeanやDaoなど)、ViewはJSP、ControllerはServler**がそれぞれ担当している

### MVCの処理の流れ
・ブラ

元記事を表示

static class

inner class of non staticでstatic field/methodはコンパイルエラーになる
non inner class of non staticでstatic field/methodはコンパイルエラーにならない

“`java
public class Outer {
static int i;
class Inner {
static int j; //compile error
}
public static void main(String[] args) {
}
}
“`
“`
com/mycompany/mavenproject1/Outer.java:[21,20] 内部クラスcom.mycompany.mavenproject1.Outer.Innerの静的宣言が不正です
修飾子’static’は定数および変数の宣言でのみ使用できます
“`

inner class of staticにしてエラー解消
“`java
public class Outer {

元記事を表示

Java 入出力と例外

・入出力とは

 多くのプログラムは、そのプログラム単体で完結することが少なく、多くの場合は、データをプログラムの外から受け取り、そのデータを処理した結果をプログラムの外に出力する。さらに外部とのやりとりでは、プログラムが想定しないデータが入力されたり、そもそもデータが見つからないことがあります。これらの場合は例外として対応します。

・ファイルアクセスと例外

・ファイル書き込みの方法

  ファイル書き込みのためにまず、ファイルを読み込む必要があります。そのために使われるメソッドは`Path.of`メソッドである。使い方としては引数に作りたいファイルのファイル名を指定します。ここに指定したファイル名のファイルがJavaのフォルダに作成されます。

  次にファイルを書き込みしていきます。ファイル書き込みは`Files.writeString()`を使います。このメソッドは、ファイルに文字列を保存するメソッドです。引数の1番目にどのファイルに保存するか(Path.ofで設定する)、引数の2番目に書き込む文

元記事を表示

Javaでハッシュ値を生成する

JavaでSHA1, SHA256のハッシュ値を作成するには、[MessageDigestクラス](https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/security/MessageDigest.html)を使用します。

## byte配列を16進数文字列で出力する

Java17から標準クラスライブラリである[HexFormatクラス](https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/HexFormat.html)でbyte配列を16進数文字列で変換することが出来るようになりました。

## サンプルプログラム

SHA1, SHA256アルゴリズムでハッシュ値を生成し、出力するプログラムです。

“`java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HexFormat

元記事を表示

OTHERカテゴリの最新記事