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

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

初心者がスッキリわかるシリーズでJavaを学んでみた

# はじめに
プログラミング初心者のスッキわかるシリーズのレビューです。
これからJavaの勉強をする方の参考になれば幸いです。

##読んだ本
スッキリわかるJava入門 第3版
スッキリわかるJava実践編 第2版
スッキリわかるSQL 第2版
スッキリわかるサーブレット&JSP入門 第2版

#スッキリわかるJava入門 
###**おすすめ度 ◎**

###良かった点
新入社員の男の子が先輩社員と一緒にRPGゲームを作っていくという流れで学習が進む。コンパイルや実行など、プログラミングのプの字も知らないような初心者向けに丁寧に書かれており、とても分かりやすかった。
ページ数は700ページを超えており、中々のボリュームだが、その分細かく、丁寧に解説してくれたのでスラスラと読むことができた。
理解が難しいと言われているオブジェクト指向を特に丁寧に解説しており、イメージを持ちながら学習することができた。
docojavaという開発環境を整えなくてもJavaを使える機能もあり、本を買っていきなりプログラミング学習を開始できるのも、この本の強みだと思う。
そもそもは、通販サイトやほとん

元記事を表示

Mavenの基本勉強メモ

ずっと Gradle 使ってたけど、お仕事で Maven をゴリゴリに使わないといけなくなったのでお勉強。

# Maven とは
Java のビルドツール。OSS。
Apache Ant に代わるものとして作られたらしい。

読み方は「メイヴン」または「メイヴェン」(自分はメイヴン派)。

結構昔からあるけど[^1]、現在も開発が続けられているし、 Maven を採用しているプロジェクトも多い印象。
2020年現在、Java のビルドツールといえば Maven か Gradle が選ばれることが多い(と思う)。

[^1]: Maven 1.0 が 2004 年、Maven 2.0 が 2005 年、Maven 3.0 が 2010 年([Maven – Maven Releases History](http://maven.apache.org/docs/history.html))

2020年現在のメジャーバージョンは3。
Maven 1 と 2 は互換性が無いが、2 と 3 は互換性が保たれている。

# 環境
“`
>mvn –version
Apache Maven

元記事を表示

【Java】カレントディレクトリの取得方法

#きっかけ#

Javaで同階層のファイルを開こうと相対パスを与えたのだが開いてくれなかった
そこで絶対パスを与えてやろうと検索してみたら記事が少なかったので覚書

#簡単#

あまりにも簡単だから誰も書かないのか
常識の範囲だから書かないのか
わからないけどとっても簡単でした

##それがこちら##

“`Dir.java
import java.io.File;

class Dir {
public static void main(String[] args) {
String path = new File(“.”).getAbsoluteFile().getParent();
System.out.println(path);
// 例:C:\Users\xxxxx\Documents\java
}
}
“`

もうひとつ

“`Dir.java
class Dir {
public static void main(String[] args) {
String path = S

元記事を表示

stack の pop() と peek() の違い

# java.util.Stack の pop() と peek() 動作確認メモ

挙動確認に関するブログ等が無かったため、メモ。

API 上で確認出来ることを以下に。

## public E pop()
> スタックの先頭のオブジェクトを削除し、そのオブジェクトを関数の値として返します
> 戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
> 例外:EmptyStackException – このスタックが空の場合
> (https://docs.oracle.com/javase/jp/8/docs/api/java/util/Stack.html#pop–)

## public E peek()
> スタックの先頭にあるオブジェクトを取り出します。このときオブジェクトはスタックから削除されません。
> 戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
> 例外:EmptyStackException – このスタックが空の場合
> (https://docs.oracle.com/javase/jp/8

元記事を表示

オブジェクト指向(Java)基本

#オブジェクト指向について
Androidアプリを作成しようと思いましたが、javaの理解が薄くて進みが悪かったので、Javaについてもう一度学び直す必要があると思いました。

特にオブジェクト指向について分かっていなかったので、そこについて分かりやすく説明してくれてたサイトをあげます。

– [オブジェクト指向再入門](http://kmaebashi.com/programmer/object/index.html)
– [オセロを例にした,C言語とオブジェクト指向の違い](http://kmaebashi.com/programmer/object/othello.html)
– [オブジェクトに仕事をさせるとは](http://kmaebashi.com/programmer/object/shigoto.html)

元記事を表示

CUIとGUIの違い

##CUIとは
Character User Interface(キャラクターユーザーインターフェース)の略。

文字だけで操作するアプリケーション。
コマンドプロンプト等で見られる。対話式の処理。
最近はあまり使われない。

###ex

コマントプロンプトで ver で Enter おすと、新しい行にうつる。

##GUIとは
Graphical User Interface(グラフィカルユーザーインターフェース)の略。

ボタンや入力欄が表示されて、マウスやタッチで操作する入力方式。
普段見ているパソコンの表示もGUI。

元記事を表示

javaが動く手順について

##javaが動く仕組み

1.プログラムを記述
2.javaコンパイラがプログラムを変換
3.Java用ファイルが作られる
4.java仮想マシンがファイルを読み取る
5.プログラムとして動作する

2〜5を自動でしてくれる。

元記事を表示

[Logback]ローテーション時に不要ファイルが消えない時の対処方法

Logbackのローテーション設定の妥当性を検証していた時に、不要ファイル(=保存切れとなったアーカイブファイル)が消えなくて「なぜだ〜」となった時に調べた時のメモ。

> **NOTE:**
>
> 検証時は、デバッグログを1つだけ出力するmainメソッドを作って、システム日付をずれして実行していました。

# バージョン

* Logback 1.2.3

# なぜ不要ファイルが消えなかったのか!?

細かい条件は調べていませんが、実行時間が短命なスタンドアロンアプリ(=ログ出力後にすぐにプロセスが終了するようなアプリ)の場合、ログファイルのローテーション後に行われるはずの不要ファイル(=保存切れとなったアーカイブファイル)削除処理が行われる前のJVMが終了してしまうことがあるようです。

# どうすればよい?

アプリ起動時に不要ファイル(=保存切れとなったアーカイブファイル)を消す処理を呼び出すためのオプションを有効化しておくことで、次回の実行タイミングで不要なファイルを削除することができます。

“`xml:起動時に不要ファイルを削除する処理を実行する際の設定例

元記事を表示

【Java】StreamAPIでズンドコキヨシ

# はじめに

少し前に流行った「ズンドコキヨシ」を久しぶりに[こちらの記事](https://qiita.com/Okocchi/items/6477bdc63eee4787cd58)で見つけたので、私もJavaを使ってズンドコキヨシを作ってみることにしました。
ついでにfor文を封印して、StreamAPIの復習をしてみました。

# 作成したコード

* 「ズン」もしくは「ドコ」のいずれかを格納した長さ5のListを作ります。
* `Stream.generate()`を使う場合、Streamが無限に続かないように`limit`を付ける必要があります。
* Listを半角スペースでJoinした結果が「ズン ズン ズン ズン ドコ」になるまで、`do~while`のループを繰り返します。
* 必ず1回はループに入るので、最初に終了条件を判定する`while`ではなく、最後に終了条件を判定する`do~while`を使いました。
* 最後に「キヨシ!!」を付け足して標準出力します。

“`java:ZundokoStream.java
package zundoko;

impo

元記事を表示

Bluetooth PC-PC/Android-PC間通信(RFCOMM)

BluetoothのプロトコルRFCOMM([RFCOMM ‐ 通信用語の基礎知識](https://www.wdic.org/w/WDIC/RFCOMM))での通信を試した。

– クライアント-サーバ
– PC-PC
– Android-PC

## PC-PC間 通信
– サーバ
– Ubuntu 18.04
– Python 3.7.4
– クライアント
– Windows 10
– Python 3.6.8

### 導入(Ubuntu)
“`shell
sudo apt install libbluetooth-dev
pip3 install pybluez
“`

### 導入(Windows)
“`
# ref: https://github.com/pybluez/pybluez/issues/279
pip3 install PyBluez-win10
“`

### ペアリング
ペアリングはOSのUIを使って手動で行った。

Ubuntu:Settings>Bluetooth
Windows:設定>デバイス>Bluetoo

元記事を表示

ScalaはJVM上で動くんだよ

## JREとJDK
JREは(Java Runtime Environment) で実行環境
JDKは(Java Development kit) で開発ツール
のことである。
scalaではJDKを使用する。

コンパイル済みのプログラムを実行するだけであればJREでOK
プログラムをコンパイルする必要があるのならJDKが必要となる
JDKはJREも同梱するのでscalaではJDKをインストールすれば問題ない。

## コマンドの種類
JavaコマンドはJavaアプリケーションを起動するコマンド
Javacコマンドはjavaソースコードをコンパイルするためのコマンド

## scalaがJVM上で動くメリット
・OSの差異などに左右されずポータルな実行プログラムである。

・java標準ライブラリをはじめ、既存のjavaモジュールを呼び出すことができる。
今まで蓄積されたjavaのナレッジの恩恵を受けることができる

・実行時パフォーマンスがある程度高速である。

## JVM上で動くデメリット
メリットがあれば当然デメリットがあるというもの
・サーバアプリケーションなどの常時稼働

元記事を表示

【Java】 Stream(filter, map, forEach, reduce)

# 概要
「streamで書いて!」と言われてメリットがわからなかったのでまとめる。

# わかったこと
– streamめっちゃ便利。
– for文やif文のネストが減って見やすい。
– リストのインスタンス化をしなくてもよくて良い。
– .addとかも書かなくて良いから、コード量が減って良い。

# filter : 条件の絞り込み

“`
List tanakaList =
list.stream
.filter(item -> item.getName.equals(“田中”))
.collect(Collectors.toList());
“`

##### <解説>
– 「list」をstreamで分解する。
– 「item」の中に「list」から要素を一つずつ取得して入れる。
– `filter`で名前が”田中”のオブジェクトだけに絞り込む。
– 分解していたstreamを集めて、collectでリストに変換する。
– 戻り値「tanakaList」にセットする。

##### <使って良かっ

元記事を表示

Java Gold SE8 に合格したお話

###はじめに
***
やっとこさ「Oracle Certified Java Programmer, Gold SE 8」を取得できました。
結果としては正答率87%でした。(65%以上で合格) 受ける前不安でしたが案外やれましたね…。

Javaの資格取るメリットとか、実際の試験に関する所感など書いていきます。

###Java Gold SE8 ってなんぞや?
***
Oracleが認定するJavaプログラマの資格です。Bronze、Silver、Goldと3つあり
難易度は[Bronze < Silver < Gold] となっています。
受験料は税込みで3万ペリカくらいします。 これじゃ地上に出られない!!
あとGoldには取得条件があり、事前にSilverの資格を取得していることが必要条件となります。

ちなみにSE8っていうのはJavaのバージョンのことを指しています。

###Goldをの資格を取得する(学習する)メリット
***
Javaのクラスやメソッドの具体的な使い方等を網羅している感じですね。
あと、「Stream API」<

EclipseでSpring pom.xmlでMaven構成問題

##開発環境
– Windows 10
– Eclipse Version: Oxygen.3a Release (4.7.3a)

##事象
>STSで新規作成したばかりのSpring Bootプロジェクトで、pom.xmlの1行目がエラーになる。
>![Maven構成問題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431046/1e745991-bfdf-a9c1-a355-08fdf5a17955.png)
>Eclipseは「pleiades-2019-03-java-win-64bit-jre_20190508」を使用。

>##原因
>maven-jar-pluginの現時点での最新版3.1.2のバグ?

>##対処
>[npmrepository](https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin)で確認すると3.1.2が最新。
>![Mavenバージョン管理.png](https:

lombokでデフォルトコンストラクタが無くてNoSuchMethodException

凡ミスの記録。

lombokを使用して以下のコードを実行したところ、実行時エラーになった。

“`java
@Data
@AllArgsConstructor
public class Person {

“`

“`java
Caused by: java.lang.InstantiationException: kagamihoge.springbatchsample.Person
at java.base/java.lang.Class.newInstance(Class.java:571) ~[na:na]
at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.getBean(BeanWrapperFieldSetMapper.java:248) ~[spring-batch-infrastructure-4.2.1.RELEASE.jar:4.2.1.RELEASE]
… 53 common frames omitted
Caused by: java.la

Spring Boot 2 Filter内でSessionScopeBeanをDIする

# 前置き
最近Spring BootでWeb開発をしています。直接HttpSessionを利用する方法ではなく、できるだけ@SessionScopeでセッションを管理したいと思っています。Filter内で@SeesionScope Beanを参照する方法を調査しました。

# 構成
| 名前 | バージョン |
| ————- | ——————————– |
| macOS | Catalina 10.15.4 |
| IntelliJ IDEA | 2019.3.4 (Community Edition) |
| Java | “11.0.2” 2019-01-15 |
| Spring Boot | 2.2.6 |
| Kotlin | 1.3.71

ずんどこプログラム

“`ruby:filename.rb
package zundokoProgram;

import java.util.Random;

public class Zundoco_random {
public static void main(String[] args) {
Random random = new Random();
String[] zun_doko = { “ずん “, “どこ ” };
String zundoko = new String();

while (!(zundoko.equals(“ずん ずん ずん ずん どこ “))) {
zundoko = “”;
for (int i = 0; i < 5; i++) { String s = zun_doko[random.nextInt(2)]; // 変数sにランダムで選ばれた配列sh[0,1]のどちらか1文字が入る zundoko = zundoko.concat(s); // 変数scに変数sをくっつける } S

Javaでsuperメソッドを呼び出す

##はじめに
簡単なことからコツコツとjavaのアウトプットをします。
javaシルバーに合格することを目標に勉強中。

##superとは
スーパークラスのインスタンスや変数を参照する際に使用する。

##superを用いての親クラスメソッドの呼び出し方
super.メソッド名

##書いてみる
“`Main.java

//スーパークラス
class hoge {
public void print() {
System.out.println(“hello from スーパークラス”);
}
}

//子クラス
class huga extends hoge {
public void print() {
System.out.println(“hello from 子クラス”);
}

public void executePrint() {
//子クラスのprint
print();

//スーパークラスのprint
super.print();
}
}

public class Main {
public static void

javaで複数の例外をまとめてcatchする

javaで、複数の例外についてcatchして同じようにログ出力して上に投げるよいう処理をよく見ますが、
冗長で共通化したいなと思っていたので調べてみたらどうやらできるみたいです。[参考](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/language/catch-multiple.html)

“`java
catch (IOException ex) {
logger.log(ex);
throw ex;
} catch (SQLException ex) {
logger.log(ex);
throw ex;
}
“`

`|`で区切ってあげると下記のような書き方で共通化できます。
少し注意なのが、java7以降でしか使えないようですので、昔のバージョンで開発してる方はご注意ください。

“`java
catch (IOException | SQLException ex) {
logger.log(ex);
throw ex;
}
“`

パッケージ分けされたJavaのコードをコマンドで実行する

調べてもなかなか出てこなかったのでメモ。

# 実行コマンド

“`
$ javac -d /path/to/build/dir/ /path/to/javafiles
$ java -cp /path/to/classfiles/ main.Main
“`
# 例

こんな階層だったとします。

“`
.
└── src
├── app
│   └── App.java
└── hoge
├── Hoge.java
└── fuga
└── Fuga.java
“`

## コンパイル

全部コンパイルします。-d で生成ファイルの出力先のディレクトリを指定します。

“`
$ javac -d build src/*/*.java src/*/*/*.java
“`

こうなります。

“`
.
├── build
│   ├── app
│   │   └── App.class
│   └── hoge
│   ├── Hoge.class
│   └── fuga