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

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

Singleton Pattern

#Singleton Pattern
一つしかインスタンスを生成しない

このページでは以下を記載します
・Singleton Pattern サンプルコード

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

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

|クラス|説明|
|—–|—-|
|singleton.class|インスタンスを一つだけ生成する|
|user(Main.class)|インスタンスを生成する|

“`java:singleton.class
class singleton{
private static singleton singleton = new singleton();
private singleton(){}
public static singleton newInstance(){return singleton;}
}
“`
“`java:user(Main.c

元記事を表示

AtCoder Beginner Contest 182 参戦記事

[AtCoder Beginner Contest 182](https://atcoder.jp/contests/abc182)に20分ほど遅れて参戦。
まあ時間通りでも最後まではいけないので、やれることをやる。

###[A – twiblr](https://atcoder.jp/contests/abc182/tasks/abc182_a)

ルール通りフォロー数の上限を計算し、現在のフォロー数を引くだけ。

“`java
import java.util.*;

public class Main {
public static void main(String[] args) {
try(Scanner s = new Scanner(System.in)){
System.out.println(s.nextInt() * 2 + 100 – s.nextInt());
}
}
}
“`

###[B – Almost GCD](https://atcoder.jp/contests/abc182/

元記事を表示

JavaからRustをJNA(Java Native Access)で実行する

## はじめに
### 動機
システムプログラミング言語(?)であるRustの話を聞いていると、FFI([Foreign function interface](https://ja.wikipedia.org/wiki/Foreign_function_interface “FFI”))の話が少なからず出てきます。
ということで普段書いているJavaから呼び出します。

### 対象読者
JavaとRustが多少読め、MavenというJava用のプロジェクト管理用ツールが存在していることを知っている方。
難しいことはしておらず、プロジェクトの雛形を作成したレベルの話です。

## 環境
開発環境はVSCodeを使用します。
RustとJavaの実行環境はDockerで構築します。
**DockerFiile**
ベースはMicrosoft提供のJavaの開発環境のサンプル(Debean 10)を、フォークして自分用に弄ったものを使用しています。変更箇所としてはJavaのversionを14→11に変更した程度です。
[弄ったもの](https://github.com/uesugi6

元記事を表示

ゼロから始めるSpring Boot その2

####目標
複数回に分けて実施予定です。

1. SpringBootとは何かをざっくり知る
1. 環境構築&Hello World!を表示させる
1. **パラメータやオブジェクトの受け渡しをする** ←今回やること
1. 他の機能にも触れてみる

####前置き
前回はHello Worldを表示するために下の2つをやりました。

– `@RestController`で文字列を表示
– `@Controller`でindex.htmlを表示

プロジェクトは前回作ったものを引き続き使用します。

具体的には以下のようなことをやります。
【Java】H2DB・JDBCの関係

#H2 Database特徴
* H2のメリット
* **Javaのプログラムに組み込めること**
* **Embedded and server modes; in-memory databases**

> The main features of H2 are:
> – Very fast, open source, JDBC API
> – Embedded and server modes; in-memory databases
> – Browser based Console application
> – Small footprint: around 2 MB jar file size

|| H2 |Derby| HSQLDB | MySQL | PostgreSQL |
|:-:|:-:|:-:|:-:|:-:|:-:|
| Pure Java | Yes | Yes | Yes | No |No|
| Memory Mode | Yes | Yes | Yes | No |No|
| Encrypted Database

元記事を表示

【Java】リクエストを投げて画面を表示②(GET/POST)

# リクエストを投げて結果を画面を表示(thymeleaf)
**(ゴール) htmlのフォームでPOSTされた値(姓名)を埋め込んで画面に表示**

“`
Project Root
└─src
└─ main
└─ java
└─ com.example
└─ demo
└─trySpring
└─HelloController.java
“`

“`
Project Root
└─src
└─ main
└─ resources
└─templates
└─hello.html

└─helloResponse.html
“`

##GETでhello.htmlに画面遷移する
* 入力フォーム作成

“`html:hello.html

元記事を表示

いつもintな初心者のBigDecimal備忘録

## はじめに
Java学習歴3ヶ月の者です。
研修でSpringをやっているのですが、データ型がNumberのものは
整数にしかならないものもintではなくBigDecimalを使いました。
数値といえばintかdoubleしか使ってこず、BigDecimalの処理にとまどいました。
BigDecimalについてきちんとまとめられている記事は多くありますが、
実際使ったものだけ備忘録としてまとめてみます。

## 計算したい
四則演算は「+」、「-」、「*」、「/」ではありません。

| 演算 | メソッド | 例 |
|:———-:|:———:|:————:|
| 加算(A + B)| add | A.add(B) |
| 減算(A – B)| subtract | A.subtract(B)|
| 乗算(A * B)| multiply | A.multiply(B)|
| 徐算(A / B)| divide | A.divide(B) |

徐算は使ったことないですが、少数になる場合は引数が3つ必要です。
A

元記事を表示

Factory Method Pattern

#Factory Method Pattern
packageが異なるケースなど、newでインスタンスを生成できないケースでは、Factory Method Patternを利用して、インスタンスを取得する
factory抽象クラスはインスタンス化する骨組みを定義し
factory抽象クラスのサブクラスが実際のインスタンスを生成する
userはfactory抽象クラスを通じてインスタンスを受け取る

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

このページは下記の構成となってます
コードを確認するだけなら2番目に飛んでください
・new でインスタンスを生成できないケース
・Factory Method Pattern の確認

##new でインスタンスを生成できないケース
以下のクラス構成で確認します

|パッケージ名|クラス|アクセス修飾子|説明|
|—–|—–|—–|—–|
|D

元記事を表示

CheckStyleの対応

[Javaの開発環境メモ](https://qiita.com/kero3/items/2a22c786b89aa7e8dcf8)
で開発環境を構築しているが、CheckStyleでアラートが大量に出ているので、その対応方法を調べて記載していく。

# 1.CheckStyle

## 1-1.pomの設定

“`xml:pom.xml org.apache.maven.plugins
maven-checkstyle-plugin
3.1.1


com.puppycrawl.tools
checkstyle
8.37

元記事を表示

【Android/Java】Fragmentに戻るボタンを設置する

## はじめに
フラグメントでの戻るボタンの設置において、
親Activity内で定義して呼び出す書き方にしていたのですが、
Activityに置かずに各Fragmentから直接中身を呼び出すほうがいい
と、ベテランエンジニアから指摘をいただいたので備忘録として両パターン残しておきます。

## ①MainActivityから呼び出す方法
“`java:MainActivity.java
public class MainActivity extends AppCompatActivity {

// 戻るボタンを定義
public void setupBackButton(boolean enableBackButton) {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(enableBackButton);
}
}
“`

“`java:Fragment1.java
// onCreateView内で呼び出す

元記事を表示

Javaのインターフェースについて

## Javaのインターフェースの特徴
インターフェースの特徴として以下の2つが挙げられる

– インターフェースはインスタンスフィールド(インスタンス変数)を持つことが出来ない
– 具象メソッド(抽象メソッドではないメソッド)を実装することができない

### interface はインスタンスフィールドを持たない
インターフェースでは、フィールドを宣言しようとすると`public static final`のように定数を宣言したものとして扱われる。

### 具象メソッドを実装することが出来ない
抽象メソッドしか定義することが出来ず、interfaceは実装された場合インスタンスが生成された場合には抽象メソッドは必ずオーバーライドされる必要がある。

### おまけ
各クラスの共通化のために、インターフェースの代わりにクラスを作成するときに注意が必要。各クラスが何かしらのサブクラスである場合、共通化してクラスにしたものを継承することは出来ない。なぜなら、Javaでは、スーパークラスは1つしか持てない。
 インタフェースであれば、複数実装することは可能。

元記事を表示

Template Method Pattern

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

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

##Template Method 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();

元記事を表示

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 Method](https://qiita.com/old_cat/items/a18975c92f1ff6dcc41a)
[Factory Method](https://qiita.com/old_cat/items/4caf7ac104070886c56e)
[Singleton](https://qiita.com/old_cat/items/80b1db06852e9d5

元記事を表示

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
String load() {
// 省略
}

}
“`

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

元記事を表示

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はあくまで**

元記事を表示

OTHERカテゴリの最新記事