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

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

【AndroidStudio】【Java】学習メモ&リンク集

※AS=AndroidStudio

| No | 種別 | 用語 | 自分の言葉で簡潔に | 参考記事 |
|:–:|:—-:|:—-:|:—–|:——–|
| 1 | AS | View
(Object) | VBで言うとControlに当たる。ボタンやテキストボックスなどのUI部品を指す。
例:`view.getId()` | [**Android Viewとは(ViewとViewGroupの関係性)**
-ANDROIDろいど- プログラム開発入門](https://androidroid.info/android/view/482/) |
| 2 | AS | R
(Class) | 画面に配置したViewのIDを管理しているクラス。AndroidStudioにより自動生成される。
※ver4.0.1では「R.java」というファイルはプロジェクトフォルダ内に見つけられず。
例:`findViewById(R.id.myButton)` | [**

元記事を表示

Log4j 2ログシステムの基礎となる概念の理解

この記事では、Apache Log4j上に構築された新しいログシステムである**Log4j** 2のソースコードを分解して、その基礎となる概念について深く掘り下げていきます。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/exploring-the-secrets-of-java-logs-log4j-2-log-system_594821)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#概要
Log4j 2は、Logbackアーキテクチャを参照してApache Log4j上に構築された全く新しいログシステムです。これは、Log4jが基本的にLogbackによって非推奨になっているからだと思います。

Log4j 2の利点については、公式ドキュメント[Apache Log4j 2](https://logging.apache.org/log4j/2.0/index.html?spm=a2c65.11461447.0.0.15d965

元記事を表示

【Java】finalのオーバーライドのエラーはコンパイル時には表示されない

###パッケージ化してる場合

親クラスにfinal修飾子を設定したメソッドを子クラスでオーバーライドしても、コンパイル時にはエラーが表示されず、コンパイル後の実行の段階でエラー表示される。

###パーケージ化していない場合
コンパイル時にエラーが表示されるみたい。

教材と挙動が違ったのでメモしておきます。

元記事を表示

Spring Bootを試す1(環境構築 ~ Tomcat起動)

# はじめに

Spring Bootでサンプルプログラムを書きたいと思います。
参考にするのは、[Spring徹底入門](https://www.amazon.co.jp/Spring%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Spring-Framework%E3%81%AB%E3%82%88%E3%82%8BJava%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BENTT%E3%83%87%E3%83%BC%E3%82%BF/dp/4798142476)です。
こちらで紹介されている会議室予約システムを作っていきます。

# Javaのインストール

Javaをインストールしましょう。
バージョンはいろいろありますが、今回はOpenJDK 8でいきます。
WSL2を利用している方は、以下のコマンドでダウンロードできます。

“`:WSL2
$ su

元記事を表示

【Java】二つ以上の引数をsuperに渡す場合の書き方

###superって何?
これがそもそもわかっていないと何のこっちゃという感じです。

どうやらイメージ的には`メソッド`ですかね。

正しいのかどうかはわかりませんが、調べても`〜ときに使われます`とかそういう説明しか見当たらなかったです。

###メソッドだと思えば、引数の書き方がイメージしやすい。

superを使いと何がどうなるのかわからないので、こんな風に書いてエラーになります

“`java
public class Oya {
private String name;
private int score;

// コンストラクタ
public Oya(String name, int score) {
this.name = name;
this.score = score;
}

// 子クラスから変数の値を読み込めるようにするgetter
public String getName() {
return this.name;
}

// 子クラスから変数の値を読み込めるようにするgetter
pub

元記事を表示

今使っているElasticsearchのバージョンはJava11に対応しているのか?

というお話です。
いや、JDK11(OpenJDK)のリリースが2018年9月と2年も前やし、当たり前やろーっ!と思う人もいるかもしれませんが、、
製品によってはそうでない可能性もある(実際、AWSのElastic BeantalkがJava11に完全対応(GA)したのが2020年4月 – この記事を執筆した2020年9月時点の約5ヶ月前とわりと最近だった)ので、念のため調べてみました。

## 事の発端

事の発端となったのが公式サイトの以下のページ

– [Compatibility | elastic](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-compatibility.html)

> The Java High Level REST Client requires Java 1.8 and depends on the Elasticsearch core project. ・・・

なぬ? Java1.8だと・・・?
今動かしている環境がJav

元記事を表示

Spring バリデーションエラーを@ControllerAdviceで一括ハンドリング

# 結論
[@ControllerAdvice](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/ControllerAdvice.html)を付与したハンドラクラスを用意すれば、各コントローラのバリデーションエラーのハンドリングを一括で処理できる。

# 環境
`Java 11`
`SpringBoot 2.3.3`
# 解説
以下、検索パラメータを指定してユーザー一覧を取得するRESTコントローラにて解説する。
リクエストの入力バリデーションを設け、バリデーションエラー検出時には所定のレスポンスボディと併せて400エラーを返すようにする。

※package、import文など省略しています。

## コントローラクラス

引数に`@Validated`を付与し、バリデーションが実施されるようにする。
エラー時のハンドリングはここでは特にしない。

“`java

@RestController
@Requi

元記事を表示

インターフェースと抽象クラスの違い

#インターフェースと抽象クラスの違い

#抽象クラス
抽象クラスはabstractメソッドを付ける事で強制出来る、メソッドは通常通り作れる
⇒継承させることで、サブクラスのメソッドを強制的に付ける事が出来る。
 つまり、派生したクラスに同一のメソッドを持たせる事と強制的にメソッドを作らせる事で
 強制力を持たせるクラスが作れる

 チームには、Aというクラスの中にはみんなが使う税率メソッドをつかって共通化されているけど
 地域の税金は、地域によってちがうから個々の派生したクラスでメソッドを作ってね。

#インターフェース
⇒インターフェースをimplementしたクラスは、インターフェースの箱に入れる事ができるつまり、インターフェースをimplementしておけば、条件によってAとBと切り替えが出来る。

サンプル(インターフェース)

“`
public interface ControlPanelIf {
void play();
void pause();
void stop();
void forwardFast();
void b

元記事を表示

今さらだけど! AndroidのNotificationをJavaで実装してみる(初級編)

# はじめに

Androidの通知(Notification)に関する基本的な使い方を記します。
内容は初心者向けの簡単なものになっています。サンプルアプリをベースに説明したいと思います。

サンプルアプリの環境は以下のとおりです。
– Android Studio 4.0.1
– MacOS 10.15.6
– Android Virtual Device – android10.0 / 1080 x 2160

# Notificationとは
[公式ページ](https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ja)によると以下のような記述があります

> 通知は、アプリの UI 以外で Android が表示するメッセージであり、リマインダー、他の人からのメッセージ、アプリからのタイムリーな情報などをユーザーに提供します。ユーザーは通知をタップしてアプリを開いたり、通知から直接操作したりできます。

うーん、難しいですね・・・
要するにスマホのステータスバーに表示されるアレですね

元記事を表示

Java バッファリング処理

#【Java バッファリング処理】

業務内で使用する Javaのバッファリング処理のメモです。
開発時に使用しているのでまとめました。

##バッファ

バッファは、文字列を格納する変数である。
bufferは、「緩衝材」の意味を持つ。

プリミティブ型のデータを保存するための入れ物。
boolean型以外のすべてのプリミティブ型がある。

##バッファリング処理

バッファリング処理とは、
書き込み時であれば、データを一旦メモリー(バッファ)に蓄積し、いっぱいになったところで、ファイル出力する処理。
読み込み時であれば、バッファにまとめてデータを読み込み、いっぱいになったところで、データを処理。
→データをまとめて処理が出来て、読み書きが効率化する。

元記事を表示

Java 文字列

#【Java 文字列】

業務内で使用する Javaの文字列のメモです。
開発時に使用しているのでまとめました。

##StringBuilder

StringBuilderクラスは、インスタンス生成してから使用可能
文字列操作を行うためのクラスである。

文字列結合では、appendメソッド、引数を利用し結合したい文字列を使用する。

多数の文字列を連結する場合、最も高い性能を発揮するStringBuilderの使用を試みるべき。

“`java
//業務内で使用している形式の一部を抜粋

//インスタンス生成
StringBuilder sb = new StringBuilder();

//SQL生成
sb.append(“SELECT”);
sb.append(“Sample”);
sb.append(“Sample2”);
sb.append(“Sample3”);
sb.append(“FROM”);
sb.append(“SampleTable”);

//※365日24時間、バッチ処理を行っているので、処理速度が遅くならないように使用している。
“`

##S

元記事を表示

Spring Data JPAのsaveのselect-insertをinsertだけにする

# 現象
spring-data-jpaでidを明示的に指定して“`save“`する場合、以下のログのようにselectしてからinsertになる。

“`java
Sample newEntity = new Sample(1L, “name”);
repository.save(newEntity);
“`

“`sql
Hibernate: select sample0_.id as id1_0_0_, sample0_.name as name2_0_0_ from sample sample0_ where sample0_.id=?
Hibernate: insert into sample (name, id) values (?, ?)
“`

idがすでに永続化済みかどうかをselectしてからinsertするのはjpaの挙動である。しかし、ある種のバッチ処理などでは、仕様としてそのidが存在しない事が明らかな場合がある。この場合はselectは単に無駄となるので防ぎたい。以下はこの事前selectを防ぐ方法について。

# ソースコード

“`grad

元記事を表示

【Java Bronze】学習メモ(インターフェース,staticメソッド,型変換など )

Java Bronze学習にあたり、よく間違える箇所のまとめ。

##インターフェース

・フィールドは定数のみ
フィールドは全て、final staticで暗黙的に修飾される。(修飾子は省略可能)
staticでフィールドを修飾することができる
(※staticで定義された値はインスタンスを作成しなくても実行できるため)

・メソッドは全て、public abstractで暗黙的に修飾される
staticでメソッドを修飾することはできない。
(※staticメソッドはインスタンスを作らなくても実行できてしまうため、抽象的なメソッドを修飾することはできない)

##staticメソッド
staticメソッドから、自クラスに定義されたインスタンスフィールドにアクセスすることはできない。
→コンパイルエラー発生!

staticメソッドはインスタンスを作らなくても実行できる。
インスタンス作成前にstaticメソッドからインスタンスフィールドにアクセスしてしまうのを防ぐためにコンパイルエラーが発生する。

元記事を表示

Java スレッド処理

#【Java スレッド処理編】

業務内で使用する Javaのスレッド処理のメモです。
開発時に使用しているのでまとめました。

##スレッドとは。

スレッド(thread)とは、プログラム上で複数の処理を同時に動かす仕組みである。

Javaには、複数の処理を同時に実行するAPIが備わっている。
→threadクラスを利用(スレッド生成)

・コンビニのレジを例に考えます。
昼休憩などで人がいっぱいで混雑時に、レジが1ヵ所だけだと時間がかかるし、不便。
レジが2ヵ所、3ヵ所と機能していれば短時間で人を捌けるし効率が良い。

プログラムも同じで処理を複数同時に動かせば、短時間で効率よく処理が可能になる。
その仕組みがスレッドです。スレッドは日常でもよく使われている。

##スレッド処理

###1、threadクラスを継承し、run( )メソッドをオーバーライドする。
run( )には、スレッドで処理したい内容を書き込む。

(オーバーライドとは、親クラスを継承して、子クラスを宣言時に親クラスのメンバを子クラス側で上書きすること)

###2、別スレッドの実行を開始したい場所で、①

元記事を表示

Javaの開発環境を作ろう(更新中)

# はじめに

新人エンジニアです。
会社でJavaを使って開発を行っているので、練習としてJavaの開発環境を構築することしました。
Javaってオワコンじゃね??って声が聞こえそうですが、まあ会社の標準フレームワークなので仕方ないですね。

コツコツ更新していくので、長い目で見守っていただけると嬉しいです。

# 環境

| 役割 | ツール名 |
|:-:|:-:|
| OS | WSL2 |
| エディター | VScode |
| Java | OpenJDK 8 |
| フレームワーク | Spring Boot |
| ビルド | Maven |
| テスト | JUnit |
| CI | Jenkins |
| コンテナ | Docker |
| コンテナ管理ツール| Kubernetes |

# Jenkinsコンテナを作る

今回はCI用ににJenkinsのコンテナを構築します。
注意点としては、Dockerイメージとして`jenkins/jenkins:lts`を使うこと。
`jenkins:latest`はプラグインのダウンロードで失敗します。(2

元記事を表示

【Java】ランダムメソッド

Javaに初めから用意されているクラス、java.util.Random java.lang.Math
この2つがあります。

今回はMathクラス(java.lang.Math)のランダムメソッドについて簡単な説明をします。
Math.random()
ポイント
・戻り値の型は double
・0.0 ~ 1.0未満 の範囲で乱数を取得します


①double rand = Math.random();
②double rand = Math.random() * 10;
③int rand = (int)(Math.random() * 10);

①戻り値の型がdoubleなので変数の型は基本doubleでないとコンパイルエラーとなります。
②0.0から10.0未満の範囲で乱数を取得する場合、ランダムメソッドの後に * 10 をつけます。
③整数での乱数を取得する場合、②をint型にキャストする必要があります。

元記事を表示

【Java Bronze学習】カプセル化・データ隠蔽・情報隠蔽の違い

##前提
使用教材
・スッキリわかるJava入門
・Java SE 7/8 Bronze問題集(黒本)

Java Bronzeの学習中に、ややこしい!と思った概念「カプセル化」「データ隠蔽」「情報隠蔽」についてまとめます。
「スッキリわかるJava入門」ではカプセル化・情報隠蔽・データ遮蔽の違いを明瞭にしていない(そもそも「データ隠蔽」「情報隠蔽」という用語が出てこない)ので、Java黒本の内容を参考にしています。

##カプセル化

「1 関係するデータをまとめること」
「2 まとめたデータを必要とする処理をまとめること」

※カプセル化は、データ遮蔽と組み合わせることで完成する。

##データ隠蔽
「外部からフィールドを直接操作できないようにすること」

目的:カプセル化の維持

カプセル化によってまとめられたデータが、まとめたもの以外のモジュールから利用されて関係が複雑化するのを防ぐ。

実装方法
・アクセス修飾子をprivateにすることで外部からフィールド操作を禁じる
・フィールドにアクセスしたい場合はgetter, setterと

元記事を表示

Android RecyclerViewが含まれるViewをTransitionでアニメーションしたときに落ちる

ちょっと詰まったのでメモです。

RecyclerViewがスクロールしているときにTransitionで親Viewのアニメーションが走るとクラッシュしていた。

“`
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child’s parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:5034)
at android.view.ViewGroup.addView(ViewGroup.java:4865)
at android.view.ViewGroup.addView(ViewGroup.java:4805)
at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:851)

元記事を表示

Cloud Toolkitを使用したECSインスタンスへのNode.jsアプリケーションのデプロイ

この記事では、Cloud Toolkitを使って**Alibaba Cloud ECSインスタンス**に**Node.js**アプリケーションをデプロイする方法を紹介します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/deploying-a-node-js-application-to-an-ecs-instance_594819)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

前回の記事では、Alibaba Cloud [Elastic Compute Service (ECS) ](https://www.alibabacloud.com/ja/product/ecs)インスタンスに直接ローカル Java アプリケーションをデプロイする方法について説明し、読者から多くのフィードバックをいただきました。そこで、読者からの質問に答えるために、今回の記事ではさらに、Alibaba Cloud ECSインスタンスにNode.jsアプリケ

元記事を表示

JavaはPDFにフォームフィールドを追加します

インタラクティブフィールドとも呼ばれるPDFフォームフィールドは、主にユーザー情報の収集に使用されます。一般的なフォームフィールドには、ラジオボタン、チェックボックス、リストボックス、およびコンボボックスが含まれます。このテキストでは、Free Spire.PDF for Javaを使用して、JavaプログラムでPDFフォームフィールドを作成する方法を紹介します。

**JARパッケージのインポート**
**方法1:**[Free Spire.PDF for Java](https://www.e-iceblue.com/Download/pdf-for-java-free.html)をダウンロードして解凍し、libフォルダー内のjarパッケージを依存関係としてJavaアプリケーションに直接インポートします。

**方法2:**Mavenリポジトリーからjarパッケージをインストールし、pom.xmlファイルのコードを次のように構成します。

“`java


com.e-iceblue

元記事を表示

OTHERカテゴリの最新記事