JAVA関連のことを調べてみた2020年11月25日

JAVA関連のことを調べてみた2020年11月25日

CFRでclassファイルをデコンパイル

## 経緯
javaでカバレッジ上げろと言われてもどこを通ってないのかさっぱりわからなかったので、コンパイル時にどう展開されているのか調べたかった。

## 解決方法
デコンパイルしてclassファイルを確認すればいい。日本語のサイトだとJADというツールが引っかかるが、これは古いので[CFR](https://www.benf.org/other/cfr/)というデコンパイラを使う。

## 試してみる
シンプルなtry-with-resourcesがどう展開されているのかを確認する。

– Hoge.java

“`java
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.stream.Collectors;

public class Hoge {
public String config;
private Hoge() {
try (BufferedReader br = new BufferedReader(

元記事を表示

【Java・SpringBoot・Thymeleaf】バリデーションエラーメッセージを変更(SpringBootアプリケーション実践編4)

ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます?
前回のエラーメッセージ実装に引き続き、**メッセージプロパティファイルを複数用意して切り替える**方法を実装します

前回の記事?
[]()

#ユーザー登録画面用のフォームクラスにバリデーション実装
* **フォームクラスの各フィールドにアノテーションを付けるだけ!**で入力チェックが出来る
* **NotNull・NotEmpty・NotBlankの違い**

|アノテーション|null|空文字|空白|
|:-:|:-:|:-:|:-:|
|@NotNull|NG|OK|OK|
|@NotEmpty|NG|NG|OK|
|@NotBlank|NG|NG|NG|

“`SignupForm.java
package com.example.demo.login.domain.model;
import java.util.Date;
import javax.validation.constraints.AssertFalse;
import javax.valida

元記事を表示

Java テキストファイル(.txt .csv)からの入力 java.io.FileReader

#1,データを文字列としてテキストファイルへ保存する方法
>➊FileReader fr = new FileReader(“ファイル名”);

>➋Buffered br = BufferedReader(br);

>➌String rec; rec = br.readLine();

>➍fr.close()

#2,ソースコード(テキストファイルからの入力)
>テキストファイルから文字の入力をおこなうためには、**read()**メソッドを使う

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/6eaa2cc1-0879-7325-e5b6-0de150ce36c1.png)

>レコード単位(行単位)による効率のよい入力処理 readLine()メソッドを使う

テキストファイル
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/af7b41f9-db8a-c9b5

元記事を表示

【Android】ObjectMetadata.setContentEncoding で文字化け【AWS】

**AWS(s3)** の **Android** サンプルコードを試していたのですが、
アップロードしたファイルの文字化けで手間取ったのでメモ。

“` java:文字化けしたコード
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(“text/plain”);
metadata.setContentEncoding(“UTF-8”); // “utf-8″も”UTF8″も試したけどダメ
“`

“` java:うまくいったコード
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(“text/plain;charset=utf-8”);
“`

**setContentEncoding**なんて、期待しちゃうにきまってるじゃないですか。

元記事を表示

【Java】0で割る割り算の例外処理

#プログラミング勉強日記
2020年11月24日
Javaで電卓のプログラムを組んでいるときに0での割り算でエラーが出てプログラムが強制終了したので、その例外処理の方法を記述する。

#異常終了する場合
 Javaでは条件を見たなさにと起こる例外があり、例外処理をしないとプログラムが異常終了することがある。以下のサンプルコードのように例外処理をしないと、異常終了する。

“`java:異常終了するサンプルコード
public class Main {
public static void main(String[] args) {
int a = 123;
int b = 0;
int c;
c = a / b;
}
}
“`

“`:実行結果
Exception in thread “main” java.lang.ArithmeticException: / by zero
at ZeroDividException.main(ZeroDividException.java:7)

元記事を表示

Java テキストファイル(.txt .csv)への出力 java.io.FileWriter

#1,データを文字列としてテキストファイルへ保存する方法
>➊**FileWirter fw = new FileWirter(“ファイル名”);**

>➋**fw.write(“出力文字列”);**

>➌**fw.close();**

#2,ソースコード(テキストファイルへ出力)
>for文を使って文字列を作り、テキストファイルへ保存

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/75874eac-9efd-5725-363c-4261ef75addc.png)
>キー入力された1行分の文字列を1レコードとしてテキストファイルへ出力

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/14edb24e-d714-c85a-596c-b7bf595be6f5.png)
>csvファイルへの出力方法

![03.png](https://qiita-image-store

元記事を表示

【Java】super ( 一つ内側のインスタンス部分 )

# super
Java の 「 **super** 」について学んだ内容のアウトプットです。

## super とは
「super」は、「今より一つ内側の[インスタンス]部分」を表す予約語です。

これを利用すれば、**親インスタンス部分 の[メソッド]や[フィールド]に、小[インスタンス]からアクセスすることが出来ます。**

## super の記述の仕方
コンストラクタをオーバーライドする際は1行目に「super()」と記述する必要があります。

親インスタンス部分の[フィールド]を利用する時

“`
super.フィールド名
“`

親インスタンス部分の[メソッド]を呼び出す時

“`
super.フィールド名([引数])
“`

## superをつけないと?

例えば、親クラスに「attack()」 という[メソッド]があり、子[インスタンス]からアクセスしようとする場合を例でいうと、結論、、

super をつけないと**「外側で attack() を呼び続ける無限ループ」になってしまいます。**

super をつけないということは**`this.a

元記事を表示

eclipseのJunitテストでjava.lang.NoClassDefFoundErrorが発生した際の対処

#原因
以前に削除した同名のクラスの実行構成が残っていると発生する場合がある。
#対処
eclipseの実行>実行の構成から不要な実行構成を削除。

元記事を表示

Java バージョンアップによる Jenkins 起動不全

Ubuntu をアップデート後、Jenkins が起動しなくなってしまった。

## Jenkins 起動不全

“`
$ systemctl status jenkins.service
● jenkins.service – LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: failed (Result: exit-code) since Sun 2020-11-15 14:20:39 UTC; 19s ago
Docs: man:systemd-sysv-generator(8)
Process: 1591 ExecStart=/etc/init.d/jenkins start (code=exited, status=1/FAILURE)
Nov 15 14:20:39 ip-172-31-83-123 systemd[1]: Starting LSB: Start Jenkins at boot time…
Nov 1

元記事を表示

【Java】ディレクトリ内のファイルのコンパイル・実行

個人用メモ.なので一部表現があいまいです

# javaファイルとclassファイルを別々のディレクトリにまとめたい

カレントディレクトリにて

“`
javac -d /
“`

**class directory** : classファイルを置きたいディレクトリ
**src directory** : コンパイルしたいファイルがあるディレクトリ
**java file** : コンパイルしたいファイル

【補足】
・クラスファイルの出力先ディレクトリを設定
・そのディレクトリはすでに存在している必要がある

【例】
例えば,カレントディレクトリに**src**,**class**のディレクトリがあり,**src**内に
**Foo.java**, **Bazz.java**があるとき,src内のjavaファイルをコンパイルしたい

“`
javac -d class src/Foo.java src/Bazz.java
“`

もしくは

“`
javac -d class s

元記事を表示

JavaFX 環境設定 インストール⇒実行まで

 Eclipce で JavaFX を使ってアプリケーションを開発したときの環境構築手順をまとめてみました。
 使用したソフト等のバージョンは次の通りです。

2020/11/24 現在
 ・OS -> Windows10
 ・JDK -> Java 11
 ・Eclipse -> Version: 2020-09 (4.17.0)
 ・JavaFX -> version=15
 ・SceneBuilder -> ファイルバージョン: 11.0.1.0

 本記事は以下の記事を参考にさせていただきました。
 ・[【超初心者向け】JavaFX超入門](https://qiita.com/tarosa0001/items/05ac653a091b7d1290f9)

 ※本記事では OpenJDK と Eclipse が使用できる環境を想定しています※

#1. JavaFX の 設定#
 JavaFX のインストールからサンプルの実行までを目標としています。
###1.1. インストール###
 まずは、EclipseでJavaFXプロジェクトを作成にするために、プラグインを実装していき

元記事を表示

Java8から実装されたラムダ式とは

Java8から実装されたという「ラムダ式」。
一体どういったものなのか。
Java初心者の目線からまとめてみる。

# 参考サイト
[【Java 8で追加】ラムダ式とは?メリットや使い方をご紹介!](https://www.internetacademy.jp/it/programming/java/introduction-of-java-new-function-lambda-formula.html)
[無名関数 -wikipedia](https://ja.wikipedia.org/wiki/%E7%84%A1%E5%90%8D%E9%96%A2%E6%95%B0)
[徹底解説! Javaのラムダ式はどういうもので、どう使えばいいのか!](https://engineer-club.jp/java-lambda-expression)
[[Java] Java8のラムダに超入門(書き方、関数型インターフェース、独自に定義、ラムダ受け取り処理)](https://www.yoheim.net/blog.php?q=20160410)

# 「ラムダ式」とは
参考サイトによると、

元記事を表示

【Java】オーバーライドメモ

# オーバーライド
オーバーライドとは、[継承]関係において
「**スーパークラスの[メソッド]の処理をサブクラスの同名の[メソッド]で重ねて処理結果を変えること**」です。

[継承]関係以外では、この現象は起こりません が、[継承]するサブクラスを作成するときは、
多少スーパークラスのことを知らないと意図せずオーバーライドしてしまうことがありますので注意してください。

## オーバーライドの仕組み

1. スーパークラスがサブクラスの[インスタンス]に対して[メソッド]を呼び出す
2. サブクラスの中でその[メソッド]を探す
3. 持っていればその[メソッド]を呼び出す。

つまり 「**スーパークラス と同名の [メソッド] がサブクラスにあれば、それが優先的に実行される。**」

つまり**「[メソッド] の内容が 上乗せされた」**ような結果になります。

## サンプルコード
こちらは継承元のスーパークラスです。

“`java
public class SuperOverride {
public void testOverride() {

元記事を表示

Mavenプロジェクトで単体テストを実行する

# 1.環境
前回作成したMavenで構築したJavaプロジェクトに、テストを追加する。
[前回記事](https://qiita.com/fullbatch/items/70232d68e1eeabfbfcf5)

# 2.テストモジュールの作成
以下のフォルダ構成を作成する
C:\
└ maven\
 └ demo\
  └ src\
   └ test\
    └ java\
     └ hello\

VSCodeにて`Ctrl+Shift+@`を入力してターミナル(PowerShell)を起動する
以下のコマンドでフォルダを作成してVSCodeでフォルダを開く

“`powershell
> mkdir C:\maven\demo\src\test\java\hello
> code -r C:\maven\demo
“`

以下のモジュールを作成
– src/test/java/hello/GreeterTest.java

“`java:src/test/java/hello/GreeterTest.java
package hello;

import sta

元記事を表示

【Java】オーバーロードメモ

# オーバーロード
オーバーロードについて学んだことのメモ書きです。
## オーバーロードとは
**「同名だが、引数の型や数が異なる」[メソッド] 又は [コンストラクタ] を 複数記述すること** です。

呼び出す場合は、**「[引数]の型 や [引数]の数 が 同等」** な [メソッド]
又は [コンストラクタ] が呼ばれ処理を行います。

## オーバーロードのメリット
攻撃を行う「 attack 」、足し算を行う「 Plus 」など、[メソッド]の名前をわかりやすく、短く命名したかったり、適切な [メソッド]名が思い浮かばくてもともとあるメソッド名を使いまわしたい場面がでてくるとおもいます。

ですが、「**原則的に同名の[メソッド]は定義することが出来ません。**」
例えば、「 計算 」を行う名前の同じ[メソッド]が存在すると、コンピューターが 「どの計算メソッドだよ!」ってわからなくなってしまうためです。

ただし、[引数]の型や個数が違う場合は同名のメソッドがあっても、引数が違えばどれを呼べばいいのかコンピュータが判断できるようになり、同名の[メソッド]を定義すること

元記事を表示

MavenでJavaプロジェクトを構築する

# 1.環境
Windows10
JDK8以降
開発環境:VSCode

# 2.プロジェクトのセットアップ
## 2.1.プロジェクトディレクトリの作成
以下のフォルダ構成を作成する
C:\
└ maven\
 └ demo\
  └ src\
   └ main\
    └ java\
     └ hello\

VSCodeにて`Ctrl+Shift+@`を入力してターミナル(PowerShell)を起動する
以下のコマンドでフォルダを作成してVSCodeでフォルダを開く

“`powershell
> mkdir C:\maven\demo\src\main\java\hello
> code -r C:\maven\demo
“`

## 2.2.モジュールの作成
以下2つのモジュールを作成

“`java:src/main/java/hello/HelloWorld.java
package hello;

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

元記事を表示

【Java】継承についてメモ

# 継承

## 継承とは
**「もともとある[クラス]を利用して、新しいクラスを生み出すこと」**です。
[オブジェクト指向]の勉強でもやりましたが、「この[クラス]はほとんど同じだけど、ここだけちがいます」っていう[クラス]をつくるときに使います。

## スーパークラスとサブクラス
[オブジェクト指向]的にポケモンで考えてみます。
ポケモンという、「身長、体重、名前、タイプなどのデータをもったもの」の[クラス]を継承して、ハガネール という[クラス]を生み出した場合だと

– **スーパークラス(親クラス)** = Pokemon [クラス]
– **サブクラス(子クラス)** = Haganeel [クラス]

ということになります。

## 継承する方法

サブクラスを作成する時、以下のように「 **extends スーパークラス名** 」を記述して作ります。
そのあとで、以下のように「**サブクラス にしか持っていない機能**」を記述していきます。

“`
class サブクラス名 extends スーパークラス名 {
親クラスと違う処理

元記事を表示

【Java・SpringBoot・Thymeleaf】エラーメッセージを実装(SpringBootアプリケーション実践編3)

ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます?
前回のデータバインドに引き続きバインド失敗時のエラーメッセージを実装します

前回の記事?
[]()

#エラーメッセージを実装
* src/main/resouces配下に**`messages.properties`**というファイルを作成
* その内に、**各フィールドに対応するメッセージを設定**する

##パターン1
* **`typeMismatch..<フィールド名>=<エラーメッセージ>`**

“`src/main/resources/messages.properties
typeMismatch.signupForm.age=数値を入力してください
typeMismatch.signupForm.birthday=yyyy/MM/dd形式で入力してください
“`

##パターン2
* **`typeMismatch.<フィールド名>=<エラーメッセージ>`**
* 複数のオブジェクトでageやbirthday

元記事を表示

モンティ・ホール問題をJavaで実験してみる

最近統計学に関する本を読んでいます。
その中に[モンティ・ホール問題](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C)という問題を紹介しています。

ちょっと直感に乖離しているの問題なので、プログラミングで実験してみよと思いました。
そのまま書くのもつまらないので、
[FunctionalInterface](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/FunctionalInterface.html)や[Strategy Pattern](https://en.wikipedia.org/wiki/Strategy_pattern)を使って遊びました。

## 1 問題について軽く

そのままウィキからコピーします。

– (1) 3つのドア (A, B, C) に(景品、ヤギ、ヤギ)がランダムに入っている。

– (

元記事を表示

【Java】オブジェクト指向メモ

# オブジェクト指向

## オブジェクト指向とは
「複雑な問題を効率よく解決するため」に生まれた考え方です。

具体的には、、

**「作りたいもの(オブジェクト)を、一つ一つの部品に分けて作っていくこと。」**

オブジェクト指向を、「ポケモン」に例えてみます。
オブジェクト指向によるゲーム設計をした場合、ポケモンを捕まえる流れを考えると

– **草むらで敵のポケモンと遭遇する**
– **自分のポケモンを召喚する**
– **戦って体力を減らす**
– **アイテム欄から「モンスターボール」を使う**
– **捕まえたらポケモン図鑑に登録される**

とそれぞれ **作業や処理を分担させて、一連の流れを完成** させます。

つまり、「 オブジェクト指向プログラミング 」は、**「作業を分担して、様々な処理やデータの組み合わせで一つのものをつくったり、問題の解決を目指したプログラミング」**という意味です。

反対に、オブジェクト指向によらない場合は、上記の作業を **これら一連の流れをワンセットの処理として作ります。**

どちらもそれぞれメリットデメリットがありますが、**

元記事を表示

OTHERカテゴリの最新記事