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

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

(JAVA勉強用メモ)6. インスタンスとメソッド

## ガベージコレクション
インスタンスはメモリ上に生成されるため、メモリ空間を使い切ってしまいかねない。
JAVAでは`ガベージコレクタ`が使わなくなったインスタンスをメモリ上から探して破棄し、メモリを解放する。
これを`ガベージコレクション`と呼ぶ。

GCはプログラマが制御することはできず、JVMがタイミングを判断し実行する。
gcメソッドというGCを促すメソッドもあるが、必ずGCが起こるものではない。

GCが起こる代表的なタイミングは『nullが代入されたとき』。

“`java
Object a = new Object(); // ①
Object b = new Object(); // ②
Object c = b; // ②
a = null; // メモリ①への参照がなくなるのでGC対象になる。
b = null; // メモリ②はまだ`c`から参照されているのでGC対象にならない。
“`

## Staticフィールド
クラスファイルのロード後、
staticフィールド・staticメソッドは『s

元記事を表示

Java再入門 JVMオプション

JVMオプションについてのまとめです。
以下が前提になっているので、前提が合わない場合はスルーしてください。

* サーバサイドのオンライン処理や常駐処理向けに書いています。
* 想定しているJavaのバージョンは11です。
* リソースは結構贅沢に割り当てられる環境です。

# JITコンパイラ

| 設定値 | 開発 | 性能 | 本番 | 用途 |
| ———————————————————— | —- | —- | —- | ———————————————————— |
| server

元記事を表示

Java17の新機能をざっくり紹介

# この記事について

2021/9/14 にリリースされた JDK17 の新機能をざっくりまとめます.[^sad] 情報源は基本的に[OpenJDKのサイト](https://openjdk.java.net/projects/jdk/17/)です.

[^sad]: 以前はリリース前から新バージョンの記事がたくさんあったのに,最近減ってきた気がする…

特に筆者が詳しくない分野については雑に要約してあります.それぞれの詳細は JEP の原文や他の記事などを参照してください.

## [JEP 306](https://openjdk.java.net/jeps/306): 常に厳密な浮動小数点演算の復活[^restore]

[^restore]: Java SE 1.2 より前と同じ挙動に戻ったらしいです.

`strictfp` 指定時と通常時の差を無くし,浮動小数点演算が常に厳密になりました.ほとんどのユーザーには大して影響がないと思われます.

現代のプロセッサでは厳密・非厳密に分けるメリットが薄れたということのようです. `strictfp` の使用は無意味になったので,

元記事を表示

【Java】 spullara/mustacheを使ってRuby風の文字列の式展開を行う

## 概要
Javaで文字列中に変数の値を埋め込みたいという場合、+演算子でつなぐか`String.format`を使うかと言ったところが、主な選択肢になるような気がします。ただ、どちらの方法も個人的にはあまりソースの可読性が良いとは感じず、できれば[【Ruby】 式展開を使って文字列の中で変数を使おう](https://pikawaka.com/ruby/formula-expand)の記事にあるような形で、変数を埋め込みたいところです。
ということで、今回はなんとかRubyのような感じでJavaでも書けないかということで、記事を書いてみます。

## 対応方針
* [こちら](https://ja.stackoverflow.com/a/2974)のstackoverflowの記事にあるように、`Mushtache`というテンプレートエンジンを使えば、それっぽく書けるように感じました。ということで、Mushtacheを使って実装してみる方針とします。

## 前提など
* Mushtacheについて、調べるといくつかライブラリが存在するようですが、今回は[spullara/must

元記事を表示

初心者が1から始めるJava開発-Vol.6- Javaの可視性

Javaには可視性という概念があります。(ほかの言語にもありますが、使いこなせないのでちゃんと説明することはできない)
可視性を理解せずに実装すると、危険なので必ず理解しましょう。
といいつつ、この記事ではメソッド形式での紹介にとどめます。

※毎度のことながら、こう書いた方がわかりやすい、そこちょっと認識違うとかあればぜひコメントなどで教えてください。

#可視性とは?

可視性とは「どこまで見えるか」「どこまで使えるか」のようなイメージです。
Vol.5まで見ている前提でいうと、可視性によって「どのクラスで使えるか」という観点になります。

#可視性の種類

Javaにはクラス、メソッド、などに用いるか姿勢の種類が大きく4つあります。

– public
– protected
– package private
– private

上から順に広範囲で利用することができます。(**protected**と**pacakge private**は見方次第なところもあります)

## public

同一プロジェクト内からならどこからでも利用が可能。
publicがついたメソッド

元記事を表示

【Java】初めてのJavaプログラミング オブジェクト指向

オブジェクト指向について少しだけ学んだので、簡単なプログラムをアウトプット

“`java:Main.java
import player.*;

public class Main {

public static void main (String [] args){
System.out.println(“プレイヤーの名前を入力してください”);
String pname = new java.util.Scanner(System.in).nextLine();

if (pname != “”){
Hero h = new Hero(pname);
h.charge();
} else {
Hero h = new Hero();
h.charge();
}
}
}
“`

“`java:Hero.java
package player;///①

p

元記事を表示

Junit TestTemplate使ってみた

### はじめに

`TestTemplate`を使おうと思った経緯

日付をinputにして、
outputが日付から算出されているテストがあった。

検証はinputからoutputが期待通り出ているかという点のみだった。

これ、1個のテストメソッドの中に何個も日付のパターン書いていくのスマートじゃなくね?(なんて思ういきった時期もあったのかもしれない…)

調べてみたら、`TestTemplate`ってのが見つかったから使ってみた。

### TestTemplateでなにができる?

>同じテストを異なるコンテキストで実行するための準備処理などを行う。

ここでいう準備処理は、`@BeforeEach` `@AfterEach`のアノテーションの動きのこと。
これをテスト実施前に変更して、異なる前提条件でテストメソッドを実行できるという機能!

### どうやって使うの?

“`java:実装クラス
// TestTemplateInvocationContextProvider を実装する
public class TestExtension implements T

元記事を表示

Javaプラクティス シーザー暗号

#前書き
Javaで練習してみる。 FizzBuzzができればどんどん実践にという人もいるが
他にないかと思い提案します。
#javaの要素
・ファイル入出力
・ループ
・Javaが用意してくれているメソッドを使用
発展としてメソッド化してパラメータを変更できるようにする。
入力ファイルをもっと複雑にするなどが考えられる。
#前提知識 シーザー暗号
シーザー暗号を使う。以下Wikipediaによる説明
シーザー暗号は単一換字式暗号の一種であり、平文の各文字を辞書順で3文字分シフトして(ずらして)暗号文とする暗号である。古代ローマの軍事的指導者ガイウス・ユリウス・カエサル(英語読みでシーザー)が使用したことから、この名称がついた。

#前提知識 アルファベットからアスキーコードへの変換

“`java
char c = ‘A’;
int code = c;
System.out.println(code);
結果が 65
“`

#前提知識 ファイル 読み込み
https://www.javadrive.jp/start/stream/index1.html

#試作 その1
“`

元記事を表示

Java参照実装ってなに?

### 経緯

Glassfishを初めて触って、

>GlassfishはJavaEEの参照実装である。

の記載に??となったので、

今回は備忘録的に参照実装について書いていく。

:::note warn
あくまで、調べた結果僕が感じた感想です。
:::

### 参照実装ってなに?

参照実装またはリファレンス実装と呼ばれる。

JSR (Java Specification Request)という仕様を具体的に実装したサンプルとなる実装のこと。(?)

先に述べたGlassfishであれば
**JavaEEのサンプル真似てます、インターフェース仕様はJavaEEに則っています**ってことですね。

それのなにがメリットか?

中身がどうであれ、**同等の動きを保証します!!**ということにつながります。

なので、`Servlet API `であれば、`Tomcat`だろうが、`Glassfish`だろうが同じ動きをするってことなんだな。

### おわりに

という、なんとも自己完結しかしていない内容だが、今回はこれで良しとする。ww

規約とかルールってすげーなーー

元記事を表示

UIテスト自動化してみた~発展編~

### 前回

[UIテスト自動化してみた~導入編~](https://qiita.com/KAWAII/items/f7af1611fc497b2df47b)

引き続き、テスト自動化について記載したいと思います。

まずは、エビデンス残しですね。

### エビデンス取得

Junitのように`asertEquals`を使用してもいいね、
web画面を経由しつつPTってのは面白発想かもしれない。

例えば、

“`java
import static org.junit.jupiter.api.Assertions.assertEquals;

// 画面から要素を取得
String name = Selenide.$(“input[name=username]”).val();

// 期待する値かを比較
assertEquals(“jobs”, name);

// もっと簡単にSelenideの機能を使ってもできる!
Selenide.$(“input[name=username]”).shouldHave(Condition.text(“jobs”));

“`

とは

元記事を表示

【頑張れば5分で作れる】Spring Boot + MyBatisで超簡単なCRUD処理のREST APIを作る【VS Code】

CRUD処理のあるSpring Bootアプリを急いで作ったらどれくらい早くできるのか挑戦したところ…
**5分で作ることができました!**

今回はこちらの動画の解説記事になります。
CRUD(Create/Read/Update/Delete)処理をREST APIで実装していきます。

# 開発環境

– Windows 10
– Visual Studio Code
– (↓主な拡張機能)
– Extension Pack for Java

元記事を表示

UIテスト自動化してみた~導入編~

### はじめに

web開発してて、UIテスト面倒な~

これ全部、自動化されたら、楽なのにな~って思ってる開発者は少なくないと思う!

テスト自動化に`Selenide`を使ってみたので簡潔に内容を記載しようと思う。

### Selenide導入

[Selenide公式ページ](https://selenide.org/)

以下、mavenで使用する場合。

“`xml

com.codeborne
selenide
5.24.3
test

“`

### まずはwebサイトを開く

これだけで画面は開けちゃう。

“`java
import com.codeborne.selenide.Selenide;

// yahooを開く
Selenide.open(“https://www.yahoo.co.jp/”);

“`

#

元記事を表示

Java ど初心者メモ①

ど初心者メモ:

2の2乗を8回行う。
public class Main{
  public static void main(String[] args) {
   int x = 1;
   for(int i = 1; i <= 8; i++) {     x *= 2;     System.out.println("2の" + i + "乗は" + x );    }   } } Javaを使えるようになるのだろうか....はぁ....

元記事を表示

GitHubActionsのSelf-hosted runnerで、SpringNativeのビルド時間を短縮する

SpringBootで作っているRestAPIアプリケーションを、SpringNativeでNative化しています。
Native化のハードルとして「ビルド時間が長い」ことが結構ストレスだったりします。

ローカルマシンだと、ビルドが30分近くかかったり、メモリ不足でビルド自体がエラーで落ちたりします。
AWSにビルドサーバー作ってビルド時間の短縮とかをしていたんですが、GitにPushしてビルドサーバーの方でPullしてというのがちょっと面倒。
GithubActionsでCIもしているが、どうにもこうにも遅かったり、メモリ不足でエラーになったりする。

その解決策として「Self-hosted runner」を使って強めのインスタンスでビルド時間の短縮を実現しました。

# 欲しい環境
・SpringNativeでNative-Buildできる環境
・Dockerが使える

# AWSで利用したUbuntuのAMI

時期によって更新されていくので日付の部分は探す際には、違う日付になっている場合があります。

“`
ubuntu-focal-20.04-amd64-se

元記事を表示

Spring Data Jpa Specificationを使って複数条件での検索機能を作る

# 概要
任意の組み合わせ条件で検索できる検索機能を作りたい。
検索条件の組み合わせの全パターンを`Repository`に書いて呼び出し側で分岐すればできるが、分岐祭りになるのでそれはやりたくない。
`findBy`の後ろが動的に変化させられれば解決するのになぁ、と思って調べたら`Spring Data Jpa Specification`を使って動的にクエリーを変化できて超便利だったのでメモ。

# 環境
– Java 1.8
– SpringBoot 2.2.1.RELEASE
– Thymeleaf 3.0.11.RELEASE

# サンプル
開始日と終了日を持つ予約情報を検索する場合のサンプル。

## 画面イメージ
画面のイメージはこんな感じ。
![Inkedsearch-sample_edited_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265229/0350df73-9221-aec0-f047-ccaa15da1e78.jpeg)

– 検索条件は、ユーザーID、氏名、開

元記事を表示

Eclipseプラグイン開発:右クリックしたときのポップアップメニューへ自作アクション追加

#目次
[1.はじめに](#はじめに)
[2.目的](#目的)
[3.注意点](#注意点)
[4.開発環境](#開発環境)
[5.依存関係](#依存関係)
[6.拡張](#拡張)
[7.拡張要素詳細](#拡張要素詳細)
[8.終わり](#終わり)
[9.参考サイト](#参考サイト)

#はじめに
– 大学の卒業研究でEclipseのプラグインを作成した際に調べたことを書き残した記事です
– 自分と同じく研究のツールとしてプラグインを利用したい人や、自身の開発環境をよくするためにオリジナルのコマンドを作りたいという人に役立つ記事になればと思います
– 文章を読み飛ばして画像だけ見た方が直感的でわかりやすいかもしれません

#目的
– **独自のコマンドやアクションをポップアップメニューに追加すること**

実装後の画面は以下のようになります
Qiita:Sample2をクリックすると自作の機能が使えるイメージです

![完成品.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691844/8d6871f

元記事を表示

BRMS(ルールエンジン)を使って爆速でAPIとドキュメント一式を作る

# はじめに
みなさん、BRMS って聞いたことがありますか?私は7~8年ほど前にこういうモノがあることを知って興味を持っていたのですが、なんだか難しそう・・・という先入観があり今まで放置していました\(^o^)/

重い腰を上げて調べてみたところ、あれ?これって・・・メチャメチャ良いやん!!って感じたので、記事にしてみました。

(実際にモノを作るのは爆速ですが、記事が長文になってしまったことを最初にお詫びさせて頂きます・・・?‍♂️)

# BRMS とは
BRMS とは Business Rules Management System の略で、ビジネスルールを管理するシステムです。ビジネスルールとは業務で決まっている規則や判断基準のことで、これらを BRMS に定義して、業務上の判断をさせてしまおうという目論見です(なるほど、わからん)。

詳細は Google 先生に譲るとして、これを導入することで何が美味しいかというと、以下のような恩恵を受けられます。

* ローコードで開発できる
* ロジックが分離できる
* 変更に強くできる
* 可搬性を実現できる
* 各種ドキュメントを

元記事を表示

【LeetCode】アルゴリズム体操 9. Palindrome Number

# 9. Palindrome Number

**問題文**
> Given an integer x, return true if x is palindrome integer.

> An integer is a palindrome when it reads the same backward as forward. For example, 121 is palindrome while 123 is not.

**超訳**
与えられたint xが回文ならtrueを返してくれよな!
ちな121は回文で、123は回文ちゃうよ。

# 解答
### Stringで確認する
“`java:Solution.java
class Solution {
public boolean isPalindrome(int x) {
String original = String.valueOf(x);
String

元記事を表示

Javaのlogging

#### it depends on! situation
#java.util.logging
java 1.4から提供しているlogging utility
7 levelのloggingを提供している

– SEVERE(highest value)
– WARNING
– INFO
– CONFIG
– FINE
– FINER
– FINEST(lowest value)

“`java
private static final Logger logger = Logger.getLogger(MyApplication.class.getName());

logger.info(Level.INFO, “it is test for {0}”,”log”);
“`

長所:外部ライブラリー使用せず、使える

短所:What means “FINE”? “FINER”? “FINEST”?

#log4j
– thread safe?
– performance に最適化
– ALL, TRACE, DEBUG, INFO, WARN, ERROR and FAT

元記事を表示

(JAVA勉強用メモ)5. 配列の操作

## 配列型変数の宣言
`[]`を使って宣言する。

“`java
int[] ary01; // 型の後でも
int ary02[]; // 変数名の後でもOK
int[][] ary03; // 重ねると多重配列になる。

int[][] ary04[]; // どちらも3重配列
int[] ary05[][];
“`

配列型変数には配列インスタンスを代入するだけであり、
参照先の配列がいくつの要素を扱えるかは関係ないため、
宣言時に要素数を指定することはできない。

“`java
int[2] ary; // <- ×: 要素数の指定はできない。 ``` ## 配列インスタンスの生成 必ず要素数を指定する必要がある。 ```java int[] ary01 = new int[2]; // OK int[] ary02 = new int[]; // NG int[][][] ary03 = new int[2][3][4]; // 多重配列は各次元の要素数を一度に指定できる int[][] ary04 = new int[3][]; // 1次元目の要素数の指定

元記事を表示

OTHERカテゴリの最新記事