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

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

【Java】final修飾子 ( 定数化・継承禁止、オーバーライド禁止 )

# final修飾子

final修飾子 は「**変数 を 定数 に変えたり、元のクラスや[メソッド]の機能を変えないための修飾子。**」です。

具体的に言うと

– **[クラス]に付けた場合その[クラス]を[継承]することができなくなる**
– **[メソッド]に付けた場合、その[メソッド]を[オーバーライド]することができなくなる**
– **変数に付けた場合、その変数は 定数 となる**

といった使い方ができます。

## 固定にする理由

– 後から修正がかかった際、一か所を直せば済むから
– ソースの可読性が高まるから
– 変更されたくない値を変更されない様にするから

## 固定にするもの

[メソッド]のパラメーターや、[メソッド] のローカル変数 において、
条件分岐ごとの処理による値の書き換えの可能性が無いような場合は、 final で定義するほうがよいです。

具体的に「どんなものを定数にするか」ということですが、例を上げると

– 固定の文字列
– ダイアログなどのメッセージ
– サイトのURL
– 税率のような基本的に変わらない値

などがパッと思いつきま

元記事を表示

【Java・SpringBoot・Thymeleaf】エラーメッセージを個別に表示(SpringBootアプリケーション実践編6)

ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます?
前回の日本語でのエラー表示に引き続き**エラーメッセージを個別に表示する実装**をします

前回の記事?
[【Java・SpringBoot・Thymeleaf】日本語でエラーを表示(SpringBootアプリケーション実践編5)
](https://qiita.com/suema0331/items/a76817e28de9baaac2d8)

##エラーメッセージを個別に表示
* htmlファイルを修正して、エラーの場合だけCSSを変更して、テキストボックスを赤くします

###エラー用CSSの追加
* **th:classappend属性**でCSSのclassを追加する

“`html

“`
* エラー時だけclass属性にhaserrorを追加
* haserrorはBootstrapの

元記事を表示

JavaSilver合格体験記(1Z0-808)

#はじめに
JavaSilverはプログラミング初級者向けの資格です。
IT業界には5年ほどいますが、資格を持っていなかったため
自分の自信に少しでもなればと今回挑戦しました。
今更とか関係ないと思います。自慢をするための資格ではなく、自信をつけるための資格です。
この記事については合格するまでの勉強の過程を載せています。
合格当日の話や、合格後の証明書の話については別の方が記事してくれていますのでそちらをご参考ください。

#対象読者
 JavaSilverの資格取得を目指している方

#勉強に使用した書籍
 黒本
  [徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応](https://tinyurl.com/y25lel4l “徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応”)
 白本
  [オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問題集 ](https://tinyurl.com/y5g53rgg “オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問

元記事を表示

【Java・SpringBoot・Thymeleaf】日本語でエラーを表示(SpringBootアプリケーション実践編5)

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

前回の記事?
[【Java・SpringBoot・Thymeleaf】バリデーションエラーメッセージを変更(SpringBootアプリケーション実践編4)](https://qiita.com/suema0331/items/dd91d21168080b747c8d)

#英語のメッセージを編集
* バリデーションのエラーメッセージを編集するには、`messages.properties`にエラーメッセージを設定
* **エラーメッセージ設定方法**
* ①:**<アノテーション名>..<フィールド名>=<エラーメッセージ>**
* ②:**<アノテーション名>.<フィールド名>=<エラーメッセージ>**
* ③:**<アノテーション名>.<フィールドのデータ型>=<エラーメッセージ>**
* ④:**

元記事を表示

【Java】this と super 復習(エラー・コーディング規則)

# this と super の復習

## this と super の使い方を知る
基本的には [this] と [super] を使用する際の軸となる考え方は一緒で、主に下記のような場合に使用します。

自[クラス]の [インスタンス] の [フィールド変数] / [メソッド] の前に付与して

– **自 または 親 [クラス] の [フィールド] や、メソッド( [コンストラクタ]含 )を優先的に参照する場合**
– **自 または 親 [クラス] の [フィールド] や、メソッド( [コンストラクタ]含 ) の [引数] や、[メソッド] 内で 一時的に使用するローカル変数を区別する場合**

## this と super の挙動
こちらのコードをもとに、見ていきます。

【GroupWorker.java】

“`java
package practiceThisAndSuper;

//「団員」という概念のクラス
public class GroupWorker {
/** empId: 団員番号 */
private int groupId;

元記事を表示

【Java】URLを入力するとそのページが使っているWordPressのテーマ名を表示するプログラムを作ってみた

##はじめに
28歳業界未経験、プログラミング素の人です。

Qiita初投稿!!

現在Javaの研修を受けているので学んだことの備忘録として、
あと同じプログラミング初心者の方々のお役に少しでも立てればと思いQiitaに投稿することにしました。

お見苦しい点多々あるかと思いますが、生暖かい目で見てやってください。

##この記事について
webページ見てたら「このサイトwordpress使ってんのかな?」「何のテーマ使ってるんやろ?」って思うことが結構あるので、勉強がてら自分なりにJavaで書いてみました。
コマンド上で動く、ブラウザからURLをコピペして実行するだけで結果が表示される簡単な奴です。

##方法を考える
HTMLソースコードの\内にwp-contentという文字列が含まれているかでWordPressを使っているかチェックします。
テーマ名はwp-content/themes/の後に書かれているので、ソースコード内の一番初めに出てくるwp-content/themes/の部分を取得すれば分かりそうです。

html取得 → Listに代入

元記事を表示

Google App Engine Java 8 から Java11への移行 実践編

# はじめに
この記事は、[Google App Engine Java 8 から Java11 移行対策](https://qiita.com/hiroa2/items/e5b124aba1a828b14879) の続きです。
Java11からサーブレット非対応になったGoogle App Engine / Java (GAE/J)でJava8のサーブレットをGAE/J Java11 でも稼働可能なSpring Bootアプリへ置き換える具体的な方法を記述している。

# Java8 サーブレットから Java11 Spring Bootへ
今回はサンプルとして、GAE/J Java8のガイドに記載されているHello World サーブレットを [Spring Boot](https://spring.io/projects/spring-boot)化してGAE/J Java11にデプロイしてみることにする。
## 前提条件
この記事は、Java8版のGAE/JのソースをJava11版に書き換えることを主眼とするため、Java 11やCloud SDKのインストールは終了しているも

元記事を表示

SpringBootことはじめ 2.gradleで実行可能なwarファイルを作る

# はじめに
[前回](https://qiita.com/suganury/items/a7f33d0a3994a90bd3f0)、SpringMVCでHelloWorldのREST APIを作成したので
これを実行可能なwarにアーカイブし、実際に実行してみるところまでやってみる。

# 環境

|ソフトウェア|バージョン|
|:–:|:–:|
|OS|Windows10 Pro|
|Java|JDK12|
|Eclipse|2020-12 M1|
|SpringBoot|2.4.0|
|Spring Tool Suite (STS) |4.8.1|

# 実施

## 0. 前回作成したHelloWorld REST API アプリ

“`java:HelloController.java
@RestController
public class HelloController {

@RequestMapping(“/”)
public String home() {
return “Hello World!”;
}

@Requ

元記事を表示

【Java】インターフェイスを実装するimplementsについて

#プログラミング勉強日記
2020年11月25日
インターフェイスを継承してクラスを定義するときに必要なimplementsについてまとめる。

#implementsとは
 implementsの説明をする前にインターフェイスの説明を簡単にする。インターフェイスは、メソッドの戻り値とメソッド名、引数といった使用のみを定義したもので、実際の処理を持たないクラスのようなものである。intefaceを使って型宣言を行うことはできるが、メソッドの定義がないとプログラムは実行できないので、そこでimplementsを使う。つまり、インターフェイスに定義されているメソッドを定義しているクラスであると指定する。
 仕様を言い換えると約束事で、約束通りの使い方をすると約束通りの結果になるということをあらかじめ決めておくことで、そのメソッドを使う側は実際の作りを気にしなくてよく、そのメソッドを作る側は仕様さえ守ればいつでも好きなように実装を変えることができる。

#implementsの書き方
 あるクラスにインターフェイスを実装するには下記のように、クラス名の後ろにimplementsを書き、さらに

元記事を表示

CASE式を使って検索項目が空欄の場合の条件無視にする

#if文を使わず、SQLのCASE式でnullを無視した検索を実行する
以下のような形で検索に使用する入力項目がいくつもあった場合に、コントローラー側でif文を使って空欄時とそうでないときの場合分けをするとコードが汚くなるので、SQLでどうにかできないかといろいろ調べてみたところ、SQLのCASE式を使えばif文を使わなくてよりスマートにコードがかけることがわかったので備忘録として残します。
![スクリーンショット 2020-11-25 20.12.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637360/a1530747-9ecd-9c85-a940-b6b36ae823f7.png)

“`repository.java
@Query(value = “SELECT * FROM mst_asset”
+ ” WHERE id = CASE WHEN :id = 0 THEN id ELSE :id END”

元記事を表示

【Java】アスタリスクのピラミッド

# アスタリスクのピラミッド
Javaを使って入力した数の団だけアスタリスクでピラミッドを作成する、「 **アスタリスクのピラミッド** 」プログラムを作ったメモ。

完成品はこちら

“`
【10段分のピラミッド】
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************

“`

## 共通点を探す
このピラミッドがどのように作られているかを考えるために、「**ピラミッドが何段になっても変わらない共通点**」や、どういう規則で作られているかを考えるため、上記の10段のものに加え、3段で作ったピラミッドを作成して比較してみます。

“`
【3段分のピラミッド】
*
***
*****
“`
ピラミッドの段数が10段でも、3段でも変わらない部分を考えてみると

– アスタリスクの数は何段になっても奇数
– 最上段は アスタ

元記事を表示

【Effective Java】抽象概念に適した例外をスローする

Effective Javaの独自解釈です。
第3版の項目73について、自分なりにコード書いたりして解釈してみました。

# 概要
– 下位レイヤーの例外はそのまま出力させるのではなく、上位レイヤーの概念に応じた例外に翻訳することで以下のメリットが得られる。
– ログ調査しやすくなる
– さらに上位のレイヤーでの例外ハンドリングがしやすくなる
– 実装で例外発生を確実に防げるなら、翻訳は考えず例外発生そのものを防ぐ。

# 説明
以下の環境で実装したコードで説明する。

– Java 11
– Doma 2.19.2
– Spring Boot 2.3.3
– MySQL 5.7

## DB挿入時における例外出力の例

DBに`USER`テーブルがあるとし、レコードを新規追加することを考える。
`USER`テーブルには主キーとして`id`カラムを持っている。

Java側の関連クラスは以下の通り。(importなど略)

**Entity**

“`java
public class User {

private String id;

private S

元記事を表示

State Pattern

あるオブジェクトの状態をクラス化する。サンプルでは、水クラスの状態を、氷、液体、気体という状態を想定し、水クラス、液体クラス、気体クラスとする

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|Water.class|水を表すクラス
水の状態は、固体、液体、気体の3つとする|
|waterState.interface|水の状態を共通化するインターフェイス|
|Ice.class|状態が固体であることを表すクラス|
|Liquid.class|状態が液体であることを表すクラス|
|Air.class|状態が液体であることを表すクラス|
|user(Main.class)|乱数で水の状態を変化させる|

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

“`java:Water.class
class Water{
w

元記事を表示

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での開発について勉強していきます?
前回のエラーメッセージ実装に引き続き、**メッセージプロパティファイルを複数用意して切り替える**方法を実装します

前回の記事?
[【Java・SpringBoot・Thymeleaf】エラーメッセージを実装(SpringBootアプリケーション実践編3)](https://qiita.com/suema0331/items/75aacb4c9632978731a1)

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

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

“`SignupForm.java
package com.example.

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事