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

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

Template Pattern

#Template Pattern
templateで処理の大枠を決めてロジックを共有する
サブクラスではtemplateで決た枠に従い処理を行う

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

##Template Pattern 例
以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|template.class|処理の大枠を記述する|
|sam1.class|処理の詳細を肉づける|
|sam2.class|処理の詳細を肉づける|
|user(Main.class)|Template Patternの動作を確認する|

“`java:template.class
abstract class template{
abstract String temp1();
abstract String temp2();
abstract String temp3();
final vo

元記事を表示

Adapter Pattern

#Adapter Pattern
あるクラスのメソッドを再利用する
再利用されるクラスを修正したりはしない

Adapter Patternは以下の2つの方法があります
・再利用されるクラスをextendsしたクラスを利用する
・再利用されるクラスをインスタンス化して利用する

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)
##再利用されるクラスをextends

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

|クラス|説明|
|—–|—-|
|sam.class|再利用されるクラス|
|adapt.class|sam.classのsam()を、adapt.classのexec()でラップして再利用する|
|user(Main.class)|Adapter Patternを使う|

“`java:sam.class
class sam {
void sam(){System.out.print(“base”);}
}
“`
`

元記事を表示

Java Desige Pattern

#デザインパターンまとめ

オブジェクト指向とはシステムの開発保守拡張時に、追跡困難なバグの発生を抑えるために、様々な工夫を施す開発指向です。

java デザインパターンは、クラスの再利用性を高めることで拡張しやすく、従って保守しやすいシステムづくりを指向します。

下記は未完成なMenuです
*はリンク切れしてます

##Menu
[Iterator](https://qiita.com/old_cat/items/5b8d22650e85109e93a2)
[Adapter](https://qiita.com/old_cat/items/673f09a8308c7d658012)
[Template](https://qiita.com/old_cat/items/a18975c92f1ff6dcc41a)
*[Factory]()
*[Singleton]()
*[Prototype]()
*[Builder]()
*[Abstract Factory]()
*[Bridge]()
*[Strategy]()
*[Composite]()
*[Decorator]()
*[

元記事を表示

Java復習③(配列の基本的な使い方・参照型)

その1「データ構造」
1.データ構造とは
ある一定のルールに従ってデータを格納する形式のこと
その2「配列」
1.配列とは?
データ構造の一種
連続して並ぶelement(要素)と呼ばれる変数のような箱が格納されたもの。
2.配列のルール
①配列の中の要素の型は揃えなければならない。
②index(添字)は0から始まる。
3.配列の書き方
登場人物の紹介:配列変数(要素の入れ物)と要素
①配列変数の宣言
int[ ] nums;
要素の型+配列変数名
②要素の作成と代入
nums = new int[7];
配列変数名 = new演算子 + int型のelementを7つ作成
※注意点として、この時のnumsのindexは0~6になる。
③楽な書き方
int[] nums = new int[5];
[復習]
int [ ] nums;
nums = new int[5];
int [] nums = new int[5];
4.配列の長さの調べ方
nums.length;
5

元記事を表示

備忘録No.5「HashMapの値にクラスを使って複数持たせる」[Java]

#やりたい事
1.生徒の数と合格点を入力
2.テストの点数と欠席回数を生徒の数入力し、テストの点数から欠席回数 * 5点を引いたものが合格点を超えている生徒をピックアップして表示

#コード
“`java
Scanner sc = new Scanner(System.in);
int ppl = sc.nextInt(); //生徒の数
int ps = sc.nextInt(); //合格点

Map map = new LinkedHashMap<>(); //学籍番号とStudクラスを持たせる
for(int i = 1; i <= ppl; i++) { int a = sc.nextInt(); //テストの点数 int b = sc.nextInt(); //欠席回数 Stud s = new Stud(a, b); //インスタンス化

元記事を表示

Guavaの@VisibleForTestingとは何か

# 概要
– [Guava](https://github.com/google/guava)には、[@VisibleForTesting](https://guava.dev/releases/30.0-jre/api/docs/com/google/common/annotations/VisibleForTesting.html)というアノテーションが用意されている
– テストコードを書くために、やむを得ずメソッドやメンバーの可視性を上げる必要があるときに付与する
– 「テストコードのために可視性を上げている」ことを示すための目印になる

# サンプルコード

“`java
import com.google.common.annotations.VisibleForTesting;

public class Sample {

@VisibleForTesting
Object loadData() {
// 省略
}

}
“`

詳しい利用例は、[単体テストを書くためにstaticメソッドから脱却しよう #1 原則・ラップメソッ

元記事を表示

JavaでTODOアプリを制作しよう13 TODOフォームのバリデーション1: 文字数制限・@Validatedを使うためのGradleの更新

こんにちは。

前回までに引き続き例外処理の実装を進めていきましょう!

## TODOアプリ作成リンク集
[1: [超基礎の理解] MVCの簡単な説明](https://qiita.com/nomad_kartman/items/bce2f4831b7b769f84f2)
[2: [雛形を用意する] Spring Initializrで雛形を作ってHello worldしたい](https://qiita.com/nomad_kartman/items/e173ea95b3ead96a412a)
[3: [MySQLとの接続・設定・データの表示] MySQLに仮のデータを保存 -> 全取得 -> topに表示する](https://qiita.com/nomad_kartman/items/f5f13037f048eeecf492)
[4: [POST機能] 投稿機能の実装] (https://qiita.com/nomad_kartman/items/113cdfc3c5cd1f5c0cef)
[5: [PATCH機能] TODOの表示を切り替える] (https://qiita.

元記事を表示

【Java SE 11 Silver】Arraysクラスのメソッドまとめ【Java初心者】

# はじめに
Java学習歴約3ヶ月です。
未経験からSESに入社し、Javaの研修を受けながら、
土日にちまちまと Java SE 11 Silver の勉強をしています。

会社の研修ではJava7までの内容だったので、初めての内容も多く、
今回は黒本第9章APIのArraysクラスのうち3つのメソッドについてまとめてみます。

#目次
[1.asListメソッド](#1asListメソッド)
[2.compareメソッド](#2compareメソッド)
[3.mismatchメソッド](#3mismatchメソッド)

# 1.asListメソッド
配列→リストに変換。
指定された配列に連動する固定サイズのリストを返す。
そのため追加(add)や削除(remove)ができない。
(追加や削除をしようとすると「UnsupportedOperationException」という例外がスローされる)

## List.of(Listインタフェースのofメソッド)との違い
どちらも固定長のリストを生成する。
asListは要素の変更(set)はできるミュータブル(可変)に対し、
Li

元記事を表示

【Java】入れ子クラス

#入れ子クラス(Nested Class)
* **入れ子クラス**(Nested Class)
* **staticメンバークラス**
* **内部クラス**(Inner Class)
* **非staticメンバークラス**
* **匿名クラス**

##staticメンバークラス
* 特定クラス(MyClass)にクラス(MyHelper)が依存、MyHelperはMyClassからしか呼ばれない
* →1個の.javaファイルにまとめることを考える
* **トップレベルクラス**:ネストしてないファイル直下のクラス
* **エンクロージングクラス**:入れ子のクラスを内側に含んだクラス
* 親クラスX:エンクロージングクラスかつトップレベルクラス
* 子クラスY:ZのエンクロージングクラスでXの入れ子クラス
* 孫クラスZ:Yの入れ子クラス

“`java
public class MyClass{…}
class MyHelper{…}
“`
* しかし、MyHelperはあくまで**

元記事を表示

centosでログローテーションを実行

# ログローテーションをすぐ実行する場合

### 日付の修正
* /var/lib/logrotate/logrotate.statusを修正して1日前の日付にする

### エラーのチェック

“`shell
# logrotate -dv /etc/logrotate.d/httpd
“`
### ローテーションの実行

“`shell
# /etc/cron.daily/logrotate
# こちらでもいける
# /usr/sbin/logrotate -f /etc/logrotate.d/httpd
“`

元記事を表示

UtilLoggingJdbcLoggerのログ出力設定を変更したい

# 1. java.util.logging.config.fileを利用する

Doma2ではログ出力にJDBCLoggerインターフェースを利用し、その実装の一例として`UtilLoggingJdbcLogger`が提供されています。この`UtilLoggingJdbcLogger`はログ出力にJUL(`java.util.logging`)を採用しているため、ログ出力に関する設定はシステムプロパティ`java.util.logging.config.file`が利用できます。

“`properties:logging.properties
handlers= java.util.logging.ConsoleHandler, java.util.logging.FileHandler

java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.pattern = logging_by_propertiesfile.log
java.util.logging.FileHandler.form

元記事を表示

Command Pattern

#Command Pattern
クラスインスタンスを保存するクラスを作り(command.class)、保存したクラスインスタンスをcommand.classメソッドのように扱う。

このページでは
・シンプルなCommandパターン
・メソッド実行回数を表示する機能の追加
について記載します

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)
##シンプルなCommandパターン

以下の構成とします

|クラス|説明|
|—–|—-|
|command.interface|登録されるインスタンスを共通化する|
|samCommand1.class|commandを実装しメソッドを一つ持たせる|
|samCommand2.class|commandを実装しメソッドを一つ持たせる|
|commandPool.class|samCommand1とsamCommand2のインスタンスを保存する|
|user(Main.class)|Comm

[Java]サロゲートペアの文字列の長さを取得する

# サロゲートペアとは
Unicode(UTF-16)では、通常、1文字を2バイトで表現します。
しかし、Unicodeで扱うべき文字が増えるにつれ、2バイトで表現できる文字数(65535文字)では不足するようになり、一部の文字を4バイトで表現することで、扱える文字数を増やすことになりました。このような4バイト文字のことをサロゲートペアと言います。

# サロゲートペアの文字列の長さを取得
“叱”という文字はサロゲートペアであるため、ふつうに`length`メソッドを使用してしまうと、2文字と見なされます。
そのため、サロゲートペアを含んだ文字列を正しくカウントするには、`length`メソッドの代わりに、`codePointCount`メソッドを使用します。

“`Java
var str1 = “こんにちは”;
System.out.println(str1.length()); // 結果:5

var str2 = “叱る”;
System.out.println(str2.length()); // 結果:3

// こうすると正しく文字数が取れる
System.o

【実録GCトラブルシューティング】Kubernetes 監視に本当に必要なのは何!?

######本記事は、[Dynatraceブログ](https://www.dynatrace.com/news/blog) にポストされた [” Why conventional observability fails in Kubernetes environments—A real-world use case / Asad Ali ”](https://www.dynatrace.com/news/blog/why-conventional-observability-fails-in-kubernetes-environments-a-real-world-use-case/?utm_campaign=PostBeyond&utm_source=Twitter&utm_medium=Social&utm_term=#334610) を日本語で翻訳、再構成したものになります。

アプリケーションがマイクロサービス化されKubernetes上に実装されるようになり、**オブザーバビリティー** の重要度はより一層増しています。

【Java】static修飾子の使い方(static final, static importとは)

#プログラミング勉強日記
2020年11月7日
Javaのstatic finalやstatic importを理解していなかったので、static修飾子についてまとめる。

#static修飾子とは
 クラスをインスタンス化せずに直接メソッドや変数にアクセスするために使用する。staticを付けたメソッドを静的メソッド、変数を静的変数という。

#static classの使い方
 Javaではstatic classはクラスの中にクラスを定義する内部クラス(インナークラス)で使用する。内部クラスからは外部クラスの変数などのメンバーにアクセスできる。内部クラスにstatic修飾子を付けると、外部クラスのstaticなメンバーにのみアクセスできるようになる。

 ※他の言語ではclassにstatic修飾子を付けることで、インスタンスを生成できない静的クラスを作れるが、Javaだとコンパイルエラーになるので注意する。

#staticメソッドとstatic変数の使い方
 staticメソッドはメソッドにstatic修飾子を付けることで、newを使ってインスタンスを生成することなく呼び出

[Java]文字列結合の実行速度比較(+演算子 vs StringBuilder)

## はじめに
“ほげ”を10万回繰り返して連結してみます。

## +演算子
“`java
String result = “”;
for (var i = 0; i < 100000; i++) { result += "ほげ"; } ``` ## StringBuilder ```java var builder = new StringBuilder(); for (var i = 0; i < 100000; i++) { builder.append("ほげ"); } var result = builder.toString(); ``` ## 実行結果 | | 実行時間(ms) | | :-------------: | :--------------: | | +演算子 | 5709 | | StringBuilder | 9 | ## まとめ 圧倒的StringBuilderの勝利。 +演算子で連結する方法は、内部的にはStringオブジェクトの生成/破棄を繰り

【kotlin】日本語ファイルを ZIP 圧縮する

## はじめに

ZIP 圧縮時、つまり[ZipOutputStream](https://docs.oracle.com/javase/jp/8/docs/api/java/util/zip/ZipOutputStream.html#ZipOutputStream-java.io.OutputStream-) で使われる Charset のデフォルト値は UTF-8 となっています。

Windows の日本語ファイル名は MS932 なので、このままでは Windows で解凍した際に文字化けします。
そこで、ZipOutputStream で Charset を指定し、文字化け回避します。
似たような記事は Java ならたくさんありますが、Kotlin では少なかったので投下します。

尚、筆者は FileInputStream の使い方が分からないくらい Kotlin(Java) に慣れていないため、もっと良い書き方があればご教示いただけると嬉しいです。

## この記事で分かること

Kotlin を使用した ZIP 圧縮(日本語対応)のやり方。

※展開はやりません。

Javaの基本的な命名規則

| | 規則 | 例 |
| ———- | —————————- | ———————– |
| パッケージ | すべて小文字 | jp.co.hello.common.auth |
| クラス | Pascal記法 | User |
| 変数 | camelCase記法 | userName |
| 定数 | すべて大文字の
アンダースコア記法 | USER_NAME |

Javaとは

# Javaとは
* 1995年、旧サン・マイクロシクテムズ社が発表したプログラミング言語
* 2010年、Oracle社が買収
* サーバーサイド開発、Androidアプリ、家電への組み込みなど、幅広い分野で使われる

# Javaの特徴
* オブジェクト志向
* Java仮想マシンで実行される
* ソースコード→(コンパイル)→Javaバイトコード
* プラットフォームに依存しない
* Write Once, Run anywhere(一度書いたらどこでも動作する)
* ガーベッジコレクション(GC)
* 利用されなくなったメモリを自動的に解放する機能

# Javaのエディション
* Java SE
* Javaアプリを動作させるための基本の実行/開発環境を提供する
* Java EE
* Java SE + サーバーアプリ開発のためのライブラリ郡(フレームワーク)
* Java ME
* 組み込み系を想定したエディション

Proxy Pattern

#Proxy
Proxyクラスに特定のクラスのタスクを代行させる
Proxyクラスで処理できないタスクは特定クラスに委譲するというメソッドを持たせる
特定クラスのインスタンスは、特定クラスにタスクを委譲するまで生成しない

このページでは下記を記載します
・Proxy Pattern の構造確認
・実装

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)
##Proxy Pattern の構造確認
以下のクラス構成で確認します

|クラス|説明|
|——|—-|
|sam.class|Proxyが代行するクラス|
|samProxy.class|sam.classのタスクを代行する|

“`java:sam.class
class sam{
void sm1(){}
void sm2(){}}
“`
“`java:samProxy.class
class samProxy{
sam sa