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

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

Doma入門 – ログライブラリにSLF4Jを使う

## はじめに

DomaはJavaの標準ライブラリ以外に依存しないことをコンセプトに謳っているので、デフォルトのログライブラリとしてJUL(java.util.logging)を使っています。ただ残念なことにJULは使いにくいということでとても不人気ですね。

この記事では、ログライブラリをJULから[SLF4J](http://www.slf4j.org/)に切り替える方法を説明します。

Domaのバージョンは現時点で最新の2.44.3を想定して説明します。
Domaの他の機能については、[Doma入門](https://qiita.com/nakamura-to/items/deaff05ba530317f3cf8)もお読みください。

## Domaのログの仕組み

Domaの実行時のログ出力は、`org.seasar.doma.jdbc.JdbcLogger`インタフェースを介して行われます。

doma-core.jarには、`org.seasar.doma.jdbc.UtilLoggingJdbcLogger`というJULを利用する実装クラスが含まれており、Domaを単

元記事を表示

【Java】コンストラクタ・getter・setter

# コンストラクタ
この記事は私のJavaの学習なメモです。
Javaのコンストラクタ、getter、setterについて学んだ内容を書いています。

## コンストラクタとは
コンストラクタ は、**インスタンスを生成するタイミングで呼び出される、 特別なメソッドです。**
普通のメソッドとそっくりですが、名前には「クラス名と同じ名前」をつかい、戻り地がないので戻り地の型を指定しないところが違います。

コンストラクタは **引数 を持ことができ**、呼び出されたコンストラクタ内では、**それを用いた処理など**さまざまなことを行うことができます。

通常はコンストラクタ内で、**フィールド変数などに 初期化処理 を記述** することが多いです。

また、**クラスを使用する際に 習慣化したい処理がある場合** などにも利用します。

### 使用例

#### 引数なしの場合

“`java
//ConstructorPractice.java(引数なし)
public class ConstructorPractice {
String str = “引数なしの場合

元記事を表示

【Java】Javaで作れるもの

#プログラミング勉強日記
2020年11月20日
最近はずっとJavaを勉強しているが、Javaで作れるものを調べてみた。

#Javaの特徴

– プラットフォームに依存しない
– 開発効率と保守性が高い
– ライブラリが充実している

 Javaは動く環境を気にしない言語で、Javaでコードを書けばJVM(Java Virtual Machine:Java仮想マシン)が入っていればWindowsでもLinuxでもMac上でも動く。また、動作が早く、動作速度が要求されるような場合でも用いられる。

#Javaで作れるもの
 Javaは「なんでもできる」言語であり、TwitterやEvemoteといったWebサービスはもちろん、三菱UFJ銀行でも採用されるような大規模金融システム、Androidアプリといった幅広くいろいろなものを作れる。具体的に紹介する。

##1. Webサービス
 Javaはインターネットと相性が良く、私たちの想像できるWebサービスは大体Javaを使えば作れる。TwitterはJavaを利用している。(以前はRubyを使っていたが、動作が早いということでJava

元記事を表示

【Java】this について

# this
Java(というよりプログラミングにおいて)の **this** について学んだことのアウトプットです。

## thisとは

**「this」** とはクラスの中(メソッド内)でインスタンスを扱うための特殊な変数です。

## なぜ、thisをつかうのか
結論からいうと理由は

– **「ローカル変数とフィールド変数を明確に区別するため」**。

**ローカル変数とフィールド変数は別々のものなので、同じ名前でも作ることが可能**なため、同じ名前で使われたときに**どっちなのかわからなくなってしまいます。**そのために、
**「フィールド変数にはthisをつける」** という書き方がよく使われます。

## どこに、 thisをつかうのか
上にも書きましたが、使う場所は

– **フィールド変数名の頭です「例:this.フィールド名」**。

また、this は **クラス内のメソッドの定義の中でのみ使用できます。**
thisはメソッドが呼ばれた時に、そのメソッドを呼び出しているインスタンスに置き換えられます。

## thisを使ってみる
ポケモン図鑑をプログラム

元記事を表示

Google Photos APIsでフォトアルバム

私は普段Android端末を使っており、奥さんと旅行などに行った際よく写真を撮ります。
アカウントの同期を行っている方は、Android端末で撮った写真が自動でGoogleのPhotosサーバにバックアップされると思います。
[Google Photos APIs](https://developers.google.com/photos)が公開され、Google Photosサーバから直接画像を取得出来るようになったため、これを利用してフォトアルバムを作ろうと思ったのが本記事のきっかけです。

##はじめに
本記事では、[Google Photos APIs](https://developers.google.com/photos)を用いフォトアルバムを表示するWebアプリ(Spring-boot)を作成します。
ソースは、[Git](https://github.com/RioAkiyama/KarionPhoto) にあげております。
下図の様に指定期間範囲内に撮った画像を、指定の間隔で再生するよう実装しております。
![sample1.png](https://qiita-i

元記事を表示

【Java】変更に強いコード – 値オブジェクト1(Value Object)

変更に強いコードを書くための考え方を学びます

#変更に強いコードの5つのポイント
* **1. 変数名は説明になるようにつけよう**
* 入力、処理、出力の役割ごとに変数名を使う(説明用の変数を導入)
* **2. 目的ごとに変数を用意しよう**
* 計算した結果に対して変数を用意して、**使いまわさない**
* **3. コードは意味のある段落に分けよう**
* 入力、処理、出力に分ける
* **4. コードのまとまり(段落)をメソッドとして独立**させよう
* 異なるクラスでの重複コードはなくそう
* **5. 狭い関心ごとに特化したクラス(ドメインオブジェクト)にしよう**
* 凝集度up = あるクラスはある目的にのみ存在する
* ex: 送料クラスの関心事は送料のみ

#小さなクラスでわかりやすく安全に
* 5つのポイントをおさえ、**特定の関心に特化した小さなクラス**を作る
* メソッドは短く、クラスは小さく
* クラスの可読性up、変更が簡単になる
* 継承で共通機能は親クラスへ
* 派生クラス

元記事を表示

【Java】初心者のためのConcurrentModificationExceptionについて【Java Silver対策】

#はじめに

– この記事は駆け出しエンジニアが書いています。間違いがありましたら遠慮なくご指摘いただけると幸いです。
– この記事はJavaのArrayListにおけるConcurrentModificationExceptionについて超ざっくりと解説します

#この記事の対象者について
– Java Silver勉強中で、どういう場合に発生するのか確認したい方
– Javaでシングルスレッドのコードを書いていたらConcurrentModificationExceptionが出たのでとりあえず解決したい方。

*詳しい解説はすべて省いて、初心者の方でも分かりやすいように書いています。

#ConcurrentModificationExceptionについて
まだまだ駆け出しの筆者であるが、Java Se8 Silverの問題集をやっているとこんな問題が出た

*例

“`java.

//配列を宣言し「ABCDE」を要素として配列に格納
List list = new ArrayList();
list.add(“A”);
l

元記事を表示

JSP + Apache FOP で動的に PDF を作成して Web サイトに表示してみるサンプル

JSP サイトを管理している知り合いが「PDF を動的に作成して表示したい」と言っていたので、ちょっと試してみました。

# Apache FOP

PDF を動的に生成するライブラリは多くあります。有料のものですと [iText](https://www.xlsoft.com/jp/products/itext/) とか、複雑な帳票に向いていそうな [SVF](https://www.wingarc.com/cloud/svfc/) とか。

でも今回はあまり複雑でない PDF を作成するようですし、OSS での実装を検討してみました。コスト削減できますし、何かあったらソースコード読んで確認できるのは嬉しいものです。

まずチェックしたのが [Apache PDFBox](https://pdfbox.apache.org/) なのですが、あまりにプリミティブといいますか、そのまま作りこんでしまうとデザインの更新が難しくなりそうなので、パス。上にもうひとつコンテンツ作成レイヤが必要な印象です。

そして見つけたのが XSL ベースでコンテンツを作成する [Apache FOP](ht

元記事を表示

【Java】クラス・フィールド変数

#クラス・フィールド変数
Javaの勉強で、クラス・フィールド変数 について学んだことをアウトプットしていきます。

##クラス
クラスとは、「 データ 」と「 処理 」の集まりです。
Javaのプログラムは、クラスを複数組み合わせてプログラミングしていく。
Javaのプログラミングは **`クラスのプログラミング` と、`呼び出し側のプログラミング`**の2つの作業に分かれる。

###クラスのプログラミング
クラスには、**そのクラスが持つ特徴や情報などの`データ`**と、そのクラスで行いたいタスク、TODO、ふるまいなどの**`処理`**を書きます。

###呼び出し側のプログラミング
クラスが完成したらクラスのインスタンスを生成し、メソッドの呼び出しを記述する。

クラスのプログラミングの注意点は

– 必ず**`public class クラス `**と記述すること。
– **{ }の中に`データ`と`処理`を記述**すること。

この囲まれたコードのまとまりを**ブロック**という。

“`java

// ここからブロック範囲======================

元記事を表示

Google App Engine Java 8 から Java11 移行対策

この記事では、Google App Engine for JavaのJava8からJava11への移行方法について考えてみる
## Google App Engineとは
Google App Engine(GAE)は、Google謹製のPaaSサービスであり、Google Cloud Platformの中でも最古参級の古株である。
Go, Python, .NETなど様々な言語に対応しており、もちろんJavaにも対応している(GAE/J)。
## GAE Java11 からサーブレットコンテナではなくなった
2019年10月にこれまでのGAE Java 8版に加えて、GAE Java11版が正式リリースされた[^1]
だが、Java 11版のGAE/Jはこれまでのバージョンとは大きな違いがある。
[Google App Engine Java 11 ドキュメント – Java 11 ランタイム環境 – フレームワークの互換性](https://cloud.google.com/appengine/docs/standard/java11/runtime?hl=ja#framewor

元記事を表示

入力フォームの情報+複数枚の画像をバイト配列に変換する方法【Servlet/JSP】【MySQL】

#1.前提知識・条件
本記事では、Java、Servlet/JSP、MySQLなどの環境構築について、構築できている前提とするので省略します。
Java、Servlet,JSP、MySQLに関する基礎知識を前提としています。
必要となる知識
Java : リスト, イテレータ など
Servlet/JSP : GET/POST, データベースとの通信 など
MySQL : Javaのソース上でクエリを実行する方法 など

注意事項:冗長的なコードになっている可能性があるのでご了承ください。

#2.投稿のきっかけ
研修でServlet/JSP、MySQLを使ってWebアプリを構築することになり画像の処理が必要でした。
MySQLの方をMediumBLOB型にして、一枚の画像のみを格納・表示させる所までは、それなりに情報が載っており、比較的容易でした。
ですが、入力フォームのテキスト情報と一緒になった場合、画像を複数枚にした場合に情報が少なく行き着くまでにかなり苦労しました。
自分の備忘録としても、他の方の参考になれば良いかと思います(需要があるかは不明)。

#3.画像の保存
大まかな

元記事を表示

【Java】ループ文

#ループ文
##ループ文とは
ループ処理の主な機能は、 指定された回数分や特定の条件下にある間、処理を実行し続けること です。

Javaにおいては、for文、while文という繰り返し文の構文が用意されていて、Javaに携わる上では頻繁に使用する機能になります。

## for文
ループカウンタなどを使用して、**定められた回数だけ同じ処理を繰り返したいとき**に使用します。
ループカウンタと、添え字による配列要素へのアクセスは非常に相性がいいため、**配列の中身を単純に1つ1つ参照する場合などによく使用されます。**

###for文の書き方
書き方はこちらです。

“`
for (ループカウンタ初期化; 継続条件; ループカウンタ更新) {
繰り返し行う処理
}
“`
よく使われる内容として、配列の中を全部表示する方法があります。
下記の場合、**配列の番号**と**配列の値**をそれぞれ出力する方法です。

“`java
String[] type = { “ほのお”, “みず”, “くさ”, “いわ”, “でんき”, “どく”, “エスパー”,

元記事を表示

悲報 SpringBootは二度はまる。。

Spring Bootで久しぶりにREST APIを書いてみようとして「はまった」話。おそらくまたはまるので備忘

# はまりポイントの経緯
## Spring Bootをどれぐらい使ったことあるの?
キックオフミーティング用の簡単APIを作成するに1度使って。「お手軽」のイメージをもっていました。
今回OAuthの認証サンプル作ろうと、受け側のダミーサイトとして利用するつもりだったのですが。あっさりとはまりました。

## なにをやらかしたの?
Servlet Container が期待通り起動せず。エラーも出ないので途方に暮れた。

### まずはプロジェクトの作成
[SpringBoot Initializer](https://start.spring.io/)を使ってサンプルプロジェクトの作成しました。

### 実行してみましょう。
“`
> gradle bootRun
“`
と。。さて、Tomcat 起動してくれるよね。。。

“`
> Task :bootRun

. ____ _ __ _ _
/\\ / __

元記事を表示

空の ArrayList を新規生成するラムダ式

# Want
ファクトリメソッドとして空のArrayListを新規作成する Lambda 式を渡したいとき、次のようなラムダを渡すと Sonarqube や IntelliJ 等に “Replace this lambda with a method reference.”や”Lambda can be replaced with method reference.” というように直接実装を書くんじゃなくてメソッド参照にしろと怒られる。

“`
() -> new ArrayList()
“`

# Do
次を渡せばOK。

“`java
ArrayList::new
“`

# Don’t
空のArrayListを用意したあとでそのインスタンスに要素を追加していく場合、次はアウト。

“`java
Collections.emptyList()
“`

## Why
Collections.emptyList() で生成したリストは、基本的に操作できません。
add メソッドなどを呼び出すと `UnsupportedOperationException` が発生します。

元記事を表示

【Java】制御文 ( if, else, else if, switch )

#制御分とは
読んで字のごとく「プログラムを制御する文」 ですがプログラムの制御は「分岐」と「繰返し」の2つに分類できます。

– 「分岐」には、if文とswitch文の2つの構文
– 「繰返し」には、for文とwhile文、do-while文の3つの構文が存在します。

##if文
if文 は、括弧の中の条件によって処理の流れを分岐させます。
**条件式の判定がtrueのときに実行する処理を記述します。**それ以外の時には処理は行われない。

“`
if (条件式) {
条件式が true の場合に行う処理
}
“`
##else文
else文 「それ以外」の場合、つまり**if文の条件式の判定がfalseのときに実行する処理**を記述します。

“`
if (条件式) {
条件式が true の場合に行う処理
} else {
条件式が false の場合に行う処理
}
“`
##else if文
else-if文 は、**if文の条件式の判定結果が false だった場合に、別の条件式を付け加えて判定が行われます。**
そして、else-if

元記事を表示

【Java】拡張for文の使い方

#プログラミング勉強日記
2020年11月19日
Javaの拡張for文の使い方をまとめる。

#拡張for文とは
 配列やコレクションといった複数の要素を持っているものからすべての要素に含まれる値を順番に取り出して処理するために使われる。
 値を順番に取り出したい配列やコレクションと、取り出した値を格納する変数を`:`(コロン)で区切って記述する。繰り返される回数は配列やコレクションに含まれている値の数なので条件式と変化式は必要ない。

##for文との違い
 for文は指定した条件で繰り返し処理を実行するときに使い、繰り返す処理の内容を指定できる。
 拡張for文はコレクションのすべての要素に対して繰り返し処理をするときに使用できて、for文をより簡単に書ける。

“`java:基本的な書き方
for (データ型 変数名: コレクション){
実行する文1;
実行する文2;
}
“`

#配列でのfor文と拡張for文

“`java:for文
public class Main {
public static void main (String[] args)

元記事を表示

【Java】変更に強いコード – 変数名・メソッド化

変更に強いコードを書くための考え方を学びます

#目的ごとに変数を用意しよう
* 計算ロジックに意識が向き過ぎると変数名のことを忘れる
* **入力、処理、出力の役割ごとに変数名を使う** (説明用の変数を導入)
* **一個の変数を使いまわさない**
* ロジックを変更しにくい。長い目で見ると副作用が伴う
* **Immutable**に書くことができる
* オブジェクトを更新せずに別の目的のオブジェクトが必要な時に新しいオブジェクトをつくること(Immutableなオブジェクト)

“`java
//目的ごとにローカル変数を使う
class Main {
public static void main(String args[]) {
int unitPrice = 1000;
int quantity = 3;
float tax = 10;
int basePrice = unitPrice * quantity;
int shippingCost =

元記事を表示

【Java】演算子まとめ

#演算子
##演算子の種類
プログラミングで使用される演算子は以下のように種類があります。

– 算術演算子(計算式に使われる)
– 代入演算子(計算式に使われる)
– 比較演算子(条件式に使われる)
– 論理演算子(論理式に使われる)

使う演算子によって以上のように様々な「式」をつくることが出来ます。

##算術演算子
算術演算子は足し算引き算などの計算を作る演算子です。

| 記号 | 機能 |
| —- | —- |
| + | 加算 |
| – | 減算 |
| * | 乗算 |
| / | 除算 |
| % | 余剰 |

###算術演算子を用いた計算
算術演算子を用いて作った計算式がこちらです。

“`java
System.out.println(3 + 2);
“`

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613675/fd60e2a4-0533-5b4d-0939-bc0760fa02f8.

元記事を表示

eclipseでwhere we looked for ~~~とエラーが出る

#eclipseでのエラーは沢山あるが今回はタイトルに書かれているエラーについて解決策を紹介させていただく
確認すべきことがいくつかあるが一つ目が**eclipseのヘルプ→Eclipse IDEについて→インストール詳細→構成**→
**vm-
hogehoge(25行目あたり)**に書かれているのが

“`
-vm
C:\・・・JREのパス・・・\bin\server\jvm.dll
“`
だと、タイトル通りのエラーになることがわかっている。 要するに、JDKを探しているのに、上記の例ではvmがJREに設定されているため、JDKを見つけられないというエラーが起きるわけだ。
***
次に、windowsのコマンドプロンプトに**java -version**と打ちこむ。エラーメッセージが表示されるようだと、JDKがインストールされていないことが確認できる。
その場合は[こちらの優秀なサイト](https://eng-entrance.com/java-install-jdk-windows)を一読した後、こちらに載せられているリンクからOracleの公式ダウンロードページへ飛んで

元記事を表示

Springを使ってトークンをイントロスぺクトしてみる

Oauth2の[Client Credentials Grant](https://oauth.net/2/grant-types/client-credentials/)という認証方法があります
サーバー間の通信を行い、また認証したい場合に基本的にUIがないので、
Client Credentials Grant方式で認証を行うケースが多いです。
例えばリソースサーバーと認証サーバーが分離している場合に、
リソースサーバーは認証サーバーに問い合わせ、トークンの有効性を確認する必要があります。
今回はこの`トークンの有効性を確認する`という行為をどうやって実現できるかについて紹介します。

## 1 RFC7662

実は、`トークンの有効性を確認する`の規定はすでにRFC7662で定義されています。
有効性をチェックするときのエンドポイントは`/introspect`になります。
いくつかの概念について紹介します

### 1.1 introspect request

リソースサーバーが認証サーバーにイントロスぺクトする際に必要な情報。

| 項目 | 値

元記事を表示

OTHERカテゴリの最新記事