JAVA関連のことを調べてみた2021年05月27日

JAVA関連のことを調べてみた2021年05月27日

try-catch-finally文を利用した例外処理について

# try-catch-finally文を利用した例外処理について
Javaでは実行に発生したエラーを例外と呼びます。
例外が発生した場合、Java上で例外に対する処理を記述していない場合、プログラムはそこで強制終了します。
下記のコードは意図的に例外を発生させ、実行結果を確認しています。

“`JAVA
public class Main {
public static void main(String[] args) {
int[] test = {1,2,3};
for(int i = 0; i <= 3; i++){ System.out.println(test[i] + "回目のループ") } System.out.println("ループ終了"); } } ``` 実行結果 ``` 1回目のループ 2回目のループ 3回目のループ Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExceptio

元記事を表示

[競プロ]ダイクストラ実装【Java】

競技プログラミングで頻出のダイクストラ法について実装してみました。
例題も解いて解説していきます。

# ダイクストラ法とは
経路の最短距離を求めるアルゴリズムです。

wikipediaより引用
> ダイクストラ法(だいくすとらほう、英: Dijkstra’s algorithm)はグラフ理論における辺の重みが非負数の場合の単一始点最短経路問題を解くための最良優先探索によるアルゴリズムである。辺の重みに負数を含む場合はベルマン-フォード法などが使える。辺の重みが全て同一の非負数の場合は幅優先探索が速く、線形時間で最短路を計算可能である。また、無向グラフで辺の重みが正整数の場合は、Thorupのアルゴリズム[1]によって線形時間での計算が可能であるが、実用性はあまり高くない[要出典]。

– 辺の重みがない(単一の)場合はBFSが早い
– 辺の重みに負数を含む場合はベルマン-フォード法

が使えるようです。
今回は辺の重みがすべて非負整数であるグラフについてのダイクストラ法を実装していきます。

# 求め方

ダイクストラでの最短経路の求め方は以下のとおりです。

1. 始点に0を設定

元記事を表示

GitHub × Azure Pipelines で Dockerized Java アプリを Azure にデプロイしてみる

最近 Java に力を入れがちなマイクロソフトですが、Dockerized Java アプリを Azure にデプロイするのがどれくらい簡単なのか試してみたいと思います。

#ソースコード
今回使用する Java アプリケーションですが、Tomcat のアプリを使用します。以下 GitHub にコードを配置しているのでご活用ください。
https://github.com/komiyasa/TomcatCICDsample

#Azure Pipelines で CI 作成
まずは Azure Pipelines で CI を作成してみましょう。Azure DevOps の Pipelines にアクセスして `New Pipeline` から新しい Pipeline を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/4112ce64-107d-93ff-7fd6-d1439d87f882.png)
YAML ベースで作成するのが最近の主流ですが、せっかく Az

元記事を表示

Spring Boot 自作アノテーションを作成して複数項目にvalidationをかける

## やりたいこと

リクエストクラスでは以下`@NotNull`や`@Size`のような
`@`のついたアノテーションで入力チェックをすることができる。
用意されているアノテーションは一つの項目のみしかチェックを行うことができない。
複数の項目を検証するアノテーションが欲しいため、独自に作成したアノテーションで入力チェックを行いたい。

#### リクエストクラス

“`.Java
public class SampleRequest {

// nullは不可
@NotNull
private Integer id;

// 1〜50文字
@Size(min = 1, max = 50)
private String name;

private String name1;

private String name2;

private String name3;

public Sample convert() {
Sample sample = new Sample();
sample.setId(id);

元記事を表示

SpringBoot 2.5 WebfluxでI/Oが発生するシステムの性能テストしてみた

![springwebflux.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143552/125536df-0ba3-5c46-c5f5-217217bd6797.png)
Spring WebfluxはノンブロッキングI/Oな処理を提供するフレームワークです。
このフレームワークについては、何度か使用したことはありますが性能面にテストしたことがなかったので、軽くテストしてみます。

## テスト結果
先に結果から言っておきます。

スレッドが4つ起動しているSpring上で、40リクエストを同時に実施した場合以下の結果となります

| 手法 | 応答時間(s) |
| —- | —- |
| mvc | 11.041 |
| Webflux | 2.016 |

IOが発生した場合、mvcの場合はスレッドを専有したままIOが終わるのを待ち続けますが、webfluxの場合はIOが発生したら、他のリクエストを待ち受けるようになり、メモリ効率がよくなります。

## Webfluxが解

元記事を表示

Java PowerPointでテキストを取得

今回はSpire.Presentation for Javaという無料のライブラリを使用して、PowerPointでテキストを取得する方法を紹介します。

 下準備

1.E-iceblueの公式サイトからFree Spire. Presentation for Java無料版をダウンロードしてください。

f:id:lendoris:20210526155656p:plain

元記事を表示

オーバーライドについて

# オーバーライドについて

## オーバーライドの説明
オーバーライドとは、サブクラス内で、スーパークラスで定義しているメソッドと目的が同じであるが、
処理が異なるメソッドを定義する場合に使用します。

## オーバーライドのルール

実際にコードをみてみましょう。

“`
class Parents { //親クラス
A method(int a){}
}

class Childs extends Parents { //サブクラス
A method(int a){}
}

“`

オーバーライドは、**メソッド名、引数リストがまったく同じであること**、
戻り値は**スーパークラスと同じ型もしくは、その型のサブクラス型でなければいけません。**

また、アクセス修飾子は**スーパークラスと同じものか、それよりも公開範囲が広いものを使用**しなければいけません。

・アクセス修飾子
*public(広い) ⇨ protected ⇨ デフォルト ⇨ private(狭い)*

## @Override(アノテーション)について
Java言語では@Ov

元記事を表示

Java DecimalFormat NumberFormat を簡単にまとめました。

|0|数値1桁を表します。数値が無い場合は「0」を表示させます。|
| —- | —- |
|#|数値1桁を表します。数値が無い場合は何も表示させないです。|
|,|カンマ区切りを表します。|
|%|パーセントで表示します。|
|–|マイナスを表します。|
|.|小数点を表します。|

“`java
// NumberFormatクラスを利用したパターン (表示形式が既定のフォーマットでOKな場合)
NumberFormat perFormat = NumberFormat.getPercentInstance(); //パーセント
NumberFormat comFormat = NumberFormat.getNumberInstance(); //カンマ区切り
NumberFormat curFormat = NumberFormat.getCurrencyInstance(); //通貨

System.out.println(perFormat.format(1.234));
System.out.println(co

元記事を表示

Microsoft Build OpenJDK の正式リリースを発表

この記事は ”[Announcing General Availability of Microsoft Build of OpenJDK, May 25th, 2021](https://devblogs.microsoft.com/java/announcing-general-availability-of-microsoft-build-of-openjdk/?WT.mc_id=java-0000-yoterada) ”の翻訳記事です

## Microsoft Build の OpenJDK の一般提供開始を発表

マイクロソフトは Microsoft Build の OpenJDK の一般提供開始を発表できることを嬉しく思います。
Microsoft Build の OpenJDK は、オープンソースで、どこにでも、どなたでも無料でご利用いただける OpenJDK の新しいディストリビューションです。
マイクロソフト社内でも Java は数多く利用されており、50万を超える Java VM が社内で実行されています。Java Engineering Group は、Ja

元記事を表示

jstatコマンドでjvmのガベージコレクションの様子を見てみよう

本記事では、jstatコマンドを使って、jvmが動的にガベージコレクションを行う様子を確認する。
java歴1週間の人間が自分用のメモとして書いた記事です。内容自体はn番煎じであること、考察も一部不完全であることをご承知おき下さい。

本記事の作成にあたって、以下の記事を大いに参考にさせていただきました。

[JavaのGCの仕組みを整理する](https://qiita.com/e_tyubo/items/48398391a8ef0f24c1be)
[jstatを使用したJavaアプリのメモリ計測](https://qiita.com/N_G/items/2dab8694fdebce2de868)
[Javaのメモリ設定と、jstatの出力結果に関するメモ](https://qiita.com/sengoku/items/03939ce47363f2b69803)
[Javaのメモリ調査ことはじめ](https://qiita.com/nkoseki/items/79ab050351e08c319832#jstat%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%

元記事を表示

Java屋さんのMaven使うのなんでを考察する

## これはなんですか?
タイトル。

この記事を読むとよいかもしれない対象者は「なんでMavenとGradleでビルドツールが2分化されているのか」について疑問に思っている人に対してJava屋さんが一つの考察を開示するものです。

ここ2年間で5回位聞かれたことなので、記事になるかなーと、考えを記すことにしました。

## 本題

メリット。
1. 昔から使ってるのでやりたいことの9割以上のことがMavenで**かんたんに**できてしまう
1. 資産として溜め込んだプラグインの使い方をGradleに移植するのが面倒
1. Gitで公開していあるそこそこ歴史あるプロジェクトはビルドツールにMavenを使っていることが多く、絶滅するおそれが少ない
1. やりたいことのプラグインも探せばだいたい出てくる

デメリット。
1. XMLだるい
1. 初心者がとっつきにくい
1. Java以外の言語だと最適ではない場合がある

長くJavaと寄り添ったツールとして発達し、支持されているため、その世界最強ですが、kotlinやgroovyのプロジェクトではgradle使うべきかなーとも思います。

元記事を表示

ストップウォッチ

activity_main.xml

“`

元記事を表示

Spring BootとPostgreSQLで時間計測 powered by AMD Ryzen7 4800H(8core/16thread)

##検証環境

– Spring Boot環境
– v2.5.0
– OS Windows10
– OpenJDK 16.0.1
– PostgreSQL環境
– v10.15
– OS Red Hat Enterprise Linux 8.4
– 仮想化環境 vmware workstation player 16.1.2 4core/メモリ8GB割り当て
– JMeter環境
– v5.4.1
– OS Windows10(Spring Bootと同居構成=本当はよくない。)
– jdk-8u291-windows-i586(最新版だと動かないので意図的に古い版を利用)

##検証コード

“`
package com.example.demo.controller;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Map;
import org.springframework.beans.f

元記事を表示

フィールドのアクセス修飾子について

# フィールドのアクセス修飾子について

JavaSilverの学習とマッチングサイト制作時に、フィールドのアクセス修飾子はprivateにするのが基本だということを知ったのをきっかけに、フィールドのアクセス修飾子について調べてまとめてみました。



# フィールドのアクセス修飾子の定石
フィールドはすべてprivateに指定するのが基本とされています。

privateでフィールドを指定することで外のクラスからは直接アクセスすることを阻止できます。

【privateフィールドの宣言(構文)】

`クラス名.staticフィールド名
`


# privateフィールドにアクセスする方法
privateフィールドにアクセスする方法は、フィールドのある場所が同じクラスのメソッドと他クラスのメソッドで異なります。

## 同じクラスのメソッドからアクセスする方法

同じクラスのメソッドからは「this」を用いてアクセスします。

コード例

“`Java
pub

元記事を表示

業務用コードの書き方(ver1.0)

# はじめに
初心者から中級者になるためには可読性の高いコードを書く、一般的に業務で製品としてつくるコードが書けることが初心者を脱出する第一歩になります。**製品を提供する**、**納品する**、**保守性の良い**、**誰がみてもわかりやすい**、**バグが出にくい**コードを**高速**で書けますか??本章では一般的にできて当たり前なコードを書くお約束と、わかりやすいコードってなんだろう?をお伝えしていきます。

# コメントを書くということ

保守性、可読性といった観点でコメントは重要です。自分のためにではなく、次にこのソースコードを触るひとのために書きます。たまにラップ調で*XXを呼び出す*、*YYを返却する*といったコメントを見かけますが、正直そんなの見ればわかりますよね笑 ぱっと見で次の人のために、なにをするためにあるかを書くくらいでもいいのではないでしょうか。コメントは多ければいいというものではありません。
クラスやメソッドにはブロックコメントを書きますよね。なぜなら後からPHPDOCやJAVADOCといった自動で出力することができるし、IDEによってはマウスオーバーでそ

元記事を表示

C++で作成したDLLとC#/Javaとで文字列を授受する

# 目的

諸事情あってC++で作成したライブラリ(DLL)をC#, Javaでも使用したい。
またその処理の都合上、文字列を引数で授受したい。

# 方法

ソースコード全体は[GitHub](https://github.com/kurukuruz/demo-common-dll)に配置。

## 前提

– C++, C# のビルドにはVisual Studio 2019を使用
– Java は Open JDK 11 を使用
– 各ソースコードはShift-JISで記述

## 呼び出される関数

### 定義

今回呼び出される関数(C++で作成)の定義を示す。

“`cpp:my_common_lib.h
#define MY_COMMON_FUNC_DECL_KWD __declspec(dllexport)
extern “C” MY_COMMON_FUNC_DECL_KWD bool __stdcall my_func_a(
const char* in_str,
char* out_str
);
“`

仕様上のポイントは以下の通り。

– 入力

元記事を表示

Scanner.nextLine()で一行目の文字列を取得した後に、配列にして、目的の文字を要素で取得する方法

“`
// 入力例:System.in = {A B C}
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String[] params = line.split(” “); // 配列にしてしまう

System.out.println(params[0]); // A
System.out.println(params[1]); // B

// 蛇足
System.out.println(params); // オブジェクト名が表示される(例:[Ljava.lang.String;@5f184fc6)
“`

元記事を表示

SpringBoot+JUnit+DBUnitで超簡潔なテスト

以前に作成した[SpringBoot + MyBatis + Thymeleaf + MySQL で超簡潔なCRUD処理](https://qiita.com/hhujk5/items/a35fab16614164c99718)でテストコードを書いてみたので自分用のアウトプットとして投稿させていただきます。
誤りがございましたらご指摘いただけますと幸いですm(_ _)m

##環境
macOS Big Sur
Java 11
Spring Boot 2.4.5
SpringToolSuite4
Maven
MySQL
MyBatis

##テスト対象
①GETリクエストで正しくページが表示される(HTTPステータスコード200が返される)こと。
②GETリクエスト時に、Modelのattributeに文字列”hello”が渡されていること。
③GETリクエスト時に、select処理によりModelのattributeにデータベースのUserListが格納されていること。
④ユーザーのIDを引数とした1件のselect処理が成功していること(DBUnit利用)。
⑤データベース全体のse

元記事を表示

JavaのTreeMap

Javaの連想配列の使い方の記事です。データベースのデータの受け取り処理、ファイルを読み込む処理の時に良く使います。今回は標準入力、標準出力でのサンプルプログラムです。

“`Java
package sakamichi;

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Sample1 {
public static void main(String[] args) {
Map data = new TreeMap();
Scanner sc = new Scanner(System.in);
System.out.println(“データの個数を入力してください”);
String line = sc.next();
int N = Integer.parseInt(line);
for(int i=0;i

元記事を表示

標準入力のScannerを1度closeしたら、2度と標準入力できない理由を調べた

#概要

Javaで標準入力ストリームのScannerを1度close()すると、再度Scannerクラスのインスタンスを生成しても標準入力ができなくなります。

“`Java:Sample.java
Scanner sc1 = new Scanner(System.in);
sc1.close();
Scanner sc2 = new Scanner(System.in);
String input = sc2.nextLine(); // NoSuchElementException
“`

理由は、「標準入力ストリームはプログラム開始時に開き、sc生成時に開くわけではない。一方で、sc.close()すると標準入力ストリームが閉じてしまうため」です。

「当たり前じゃん」と思ったらそれでOK。
以下、もう少し詳しく説明します。

#私が誤解していた点
私は上述のエラーについて、「Scannerクラスのインスタンスを新しく生成しているんだから、読み込めてもいいのでは?」と思っていました。
これは、Scannerクラスとストリームの関係があいまいだったゆえの誤解です。

実際は

元記事を表示

OTHERカテゴリの最新記事