JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

ABC338A~Fの解答[Java]

## はじめに
今回はコンテスト中にEまで、コンテスト後にFを解いたのでFまで載せようと思います。

なお、僕のライブラリについては[提出結果](https://atcoder.jp/contests/abc338/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)をご確認ください。
では、見ていきましょう。

## A – Capitalized?
問題文は[こちら](https://atcoder.jp/contests/abc338/tasks/abc338_a)

char型では`’Z’<'a'`なので、一文字目はこの判定で、以降は`toLowerCase`メソッドを用いて比較しました。 ```A.java final class Main{ private static final boolean autoFlush = false; private static final SimpleScanner sc = new SimpleScanner(System.in); private s

元記事を表示

JUnit5のまとめ(基本的な使い方)

## JUnit5概要
個人的にはテスティングフレームワークはSpockの方が好みですがJUnitについてもまとめようと思います。
java言語で書くことの出来る単体テストを行うためのテスティングフレームワークです。
Spockとは異なり、javaソースコードとほとんど一緒なのでjavaに触れてきた方はこちらの方が親しみがあり、ラムダ式の判定などもでき、springとの相性も良いみたいです。

## JUnit5の基本的なルール
・戻り値はVoid(戻り値なし)とする
・引数は指定しない
JUnitは下記のようにアノテーションベースのテスティングフレームワーク
| アノテーション | 概要 |
|:-:|:-:|
| @Test |付与することでテストメソッドとして機能 |
|@DisplayName |テスト実行結果に表示される-結果が分かりやすくなる |
|@BeforeEach |テストメソッドとは別で作成しておくことで、各テストメソッドの実行後に毎回実行される |
|@AfterEach | テストメソッドとは別で作成しておくことで、各テストメソッ

元記事を表示

Java21のVirtualThreadsに対する自分の理解

# VirtualThreadsとは
JVM内で生成される軽量なスレッド。

そもそも、JavaはスレッドをOSで生成する。OSで生成されたスレッド(以下:OSスレッド)はJVMで生成されるスレッドより重い。だが、その分色んな処理を実行できる。

例えば、IO処理。(DBアクセス、ファイルアクセス、外部APIコール等)

WebアプリにIO処理はつきもの。
IO処理の厄介なところはIO待ちが発生すること。
OSスレッドはIO待ちが発生するとそれを待ち続けてしまう。
待ちが増えるということは、**スループットが落ちるということ。**
(スループット=単位時間あたりに実行された処理の数)

これをなんとかするために導入されたのが、Virtual Threads.(仮想スレッド)

![vt.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159675/b203fe86-a960-21ff-b905-193fe9e31592.jpeg)

Virtual Threadsを理解する上で知っておくべき登場人物は↓の

元記事を表示

[java備忘録]ラムダ式とStreamAPI

これまでなんとなくでラムダ式だったりStreamAPIをつかってきたので自分の再学習のため、この記事を作成しようと思いました。
間違っているところあるかもしれません、暖かく見守ってください。
# そもそもラムダ式ってなんのためにあるのか?
そうです、そのレベルからです。なので調べました。

「ラムダ式のメリットは、**匿名クラス**(一度だけしか使わないようなクラス)を用いる場合よりも**関数型インターフェース**(抽象メソッドを1つだけ持つインターフェース)の記述が簡潔になることにあります。」

だそうです。
**匿名クラス**を用いた**関数型インターフェース**の記述よりも簡潔にするためのものなんですね。
### 関数型インターフェース
関数みたいなインターフェースで(そのまま)それぞれ一つずつ抽象メソッドを持っています。
関数合成という合体技もありますがここでは標準関数型のみ説明します。

インターフェース | メソッド | 説明
—–|———-|—–
Function | R apply (T t) | T型の引数を受け取って、R型の結

元記事を表示

高校の課題研究で素人4人がAndroidアプリ作ったので過程と反省をまとめる

Androidアプリを私含め4人で作った過程でいろいろあったのでまとめます。
問題続出だけど私は楽しかった。
これから似たようなことする人はぜひ生かしてね!

# 課題研究とは
私の通う埼玉県立越谷総合技術高校では、3年4月から1月まで**課題研究**という
「学科で学んできたこと活かしてチーム組んでなんか作って発表してね」
という趣旨の課題が出されます。
私は情報技術科でしたので、PCやスマホ用のソフトウェアやゲーム、Webサイト、動画編集などをすることが多いようです。

:::note warn
この記事は、越谷総合技術高等学校公式のものではありません。
:::

# 作ったアプリ

Ewiseという、英単語学習を目的としたアプリになります。
java optional:1。エンジニア一生の課題「null」について

# はじめに
今回のテーマはnullです。
エンジニアなら誰でも共感できるnullの怖さ。私たちの一生の課題「**null**」について調べていきます。そして、そのnullによっておこるエラーとその対象法も一緒に記述します。

nullに関する記事は2つに分けて記述します。

### 目次
1) エンジニア一生の課題「null」について
2) optionalをoptionalらしく=> 作成中

# 抜け出せない「nullチェック」の沼
## nullの歴史は?
まず、nullという概念はいつ、だれによって作られたのでしょうか?

Nullという概念は1965年、Tony Hoareというイギリスのコンピューターサイエンスによって導入されました。当時、彼は「**存在しない値**」を表現する最も便利に方法がnull参照だと思ったそうです。
その後様々な言語でNullが導入されていますが、2009年のカンファレンス(QCon)でTony Hoare自身が「Nullは10億ドルに相当する誤りだった」という旨の発言をしています。

## NP

元記事を表示

WindowsでKeycloakをつかう

## 目的
Keycloakは認証認可のためのオープンソースソフトウェアです。KeycloakはJavaで実装されているので、OpenJDKなどのJava仮想マシンがインストールされていればどのOSでも実行可能です。

「とりあえず触りたい」というときはなんだかんだで手元のWindowsPCで実行できると便利です。この記事ではWindowsPCへのインストールからKeycloakの初回起動までの手順をまとめます。WSLやDockerは使いません。

## 要件
– Windows 10 Pro 64bit
– OpenJDK 17
– Keycloak 23

## OpenJDKのインストール
OpenJDKは各ベンダがビルドし提供しています。今回はMicrosoft Build of OpenJDKを利用します。

### OpenJDKの入手
https://learn.microsoft.com/ja-jp/java/openjdk/download#openjdk-17

上記リンクよりzipファイルをダウンロードします。解凍したら任意の位置にファイル一式を配置します。私はC

元記事を表示

Mavenで自分で作成したライブラリjar/JavaDocのjarを利用する方法

ライブラリjarやJavaDocのjarファイルを作成する方法を別記事に掲載しているが、作ったjarファイルを使うにはどうしたらええの?? というやつ。
ちなみにWindows前提で記載しているので、Macの方は脳内変換して頂きたい。
※この手順はライブラリjarやJavaDocのjarファイルを使うほうのプロジェクトで実施する。
 決してライブラリjarやJavaDocのjarファイルを作る方ではない。

# ◆大まかな手順
1. cmdファイル(.cmd)を作成する
1. cmdファイルを実行しjarファイル/JavaDocのjarファイルをインストールする
1. エディタ(cursor/VScode)を再読み込みする

# ◆詳細手順
## 1.cmdファイル(.cmd)を作成する
以下の内容にてcmdファイル(.cmd)を作成する。
“`
SET groupId=グループID
SET artifactId=アーティファクトID
SET jarVersion=JARのバージョン

SET jarFile=フルパス指定のJARファイル名-%jarVersion%-librar

元記事を表示

MavenでJavaDocのjarを作成する方法

ライブラリjarを作成し、他のプロジェクトに提供する場合JavaDocも提供すると色々と都合がよい。
Mavenでライブラリjarを作成するときに一緒にJavaDocのjarも作成してしまおう!

## pom.xmlを編集する
pom.xmlにJavaDocのjarを作成する設定を追記する。
“`

・・・ org.apache.maven.plugins
maven-javadoc-plugin
3.6.3

protected



元記事を表示

Java学習 メソッド

# JavaとRubyのメソッドの違い
JavaとRubyで、メソッドの役割はほとんど変わらない。
記述方法は大きく変わる。
Javaには、mainメソッドという特別な意味を持つメソッドもある。

# Javaのメソッド
## mainメソッド

Javaでは、Rubyと同様に自由にメソッドを定義して使用することができる。
ただし、Javaには「mainメソッド」という特殊なメソッドがある。
mainメソッドには特別な役割があり、記述の仕方も決められている。

## mainメソッドのルール
__1. ファイルを実行するとmainメソッドが実行される。__
__2. mainメソッドの引数などは、必ず決められた通りに記述する必要がある。__

### 1. ファイルを実行するとmainメソッドが実行される。

ここまでの学習でreplitにコードを書く時、以下のように記述をしていた。
“`java
class Main {
public static void main(String[] args) {
// 処理の内容
{
}
“`

2行目の `publ

元記事を表示

分散RedisロックとJedisクライアント

# はじめに
以前、Redis上でセマフォを実装する必要がありました。驚いたことに、私たちが使用しているJedisクライアントとLettuceクライアントの両方には、それに対する良い準備ができた解決策がないことがわかりました(Redissonにはそのようなものがあります)。
そのため、私はその隙間を埋め、JedisとLettuceの両方のRedisクライアント向けの解決策を提供することにしました。

# セマフォが使用したい理由は何ですか?
リソースの相互利用を制限する必要がある状況を想像してみてください。たとえば、バックグラウンドタスクで実行されている重いSQLクエリが全体のサービスパフォーマンスに悪影響を及ぼす可能性がある場合、許可された回数よりも同時にそのクエリが発行されないようにする必要があります。
セマフォを使用することで、共通リソースのクロスプロセス競合状態を解決し、共通リソースへのアクセスを特定の量に制限することができます。

# 解決策はこちらです
[RedPulsar](https://github.com/himadieievsv/redpulsar) が、セマフォ

元記事を表示

【書籍・サイト紹介】Javaから始める 独学Spring Boot

# はじめに

先日公開したポートフォリオ用の Web アプリケーションのバックエンドでは、フレームワークに Spring Boot、言語に Kotlin を利用しました。

基本的に独学で学習を進めてきたのですが、一番苦労したことと言えば、教材選びと学習順序です。
初学者向けではないと言われることが多いためか、学ぶための手引きとなるような記事が少なく、途方に暮れることもしばしばありました。

そのため、これから学習を始めようと思っている方や行き詰っている方にとって少しでも参考になればと思い、この記事を書くことにしました。

この記事では Java の基本的な構文しか知らない状態から、Spring Boot を用いて Web アプリケーションを作成できる状態になるまでに特に欠かせなかったと感じる書籍とサイトを紹介したいと思います。

※ ポートフォリオは、服用したお薬の記録をサポートする Web アプリケーションです。
 アプリケーションの概要や使用した技術を紹介する記事を投稿していますので、詳しくはそちらをご覧ください。

https://qiita.com/hiroe-mkk/it

元記事を表示

【Java】enumの使い方と簡単な使用例について(備忘録)

# ◆背景
Javaのコードを読むことがありましたが、
enumの使いかたが分からず、コードを読み切れない事がありました。。
知識不足を実感したので、この機会に基本的な使い方を調べました。
以下はenum使い方を調べた内容の紹介となります。

# ◆対象
– enumの基本的な使い方を調べてる方
– タイトルに興味を持ってくれた方

# ◆enumとは?
– 複数の定数を1つの方としてまとめて定義できるもの。
– enumは**列挙型**と呼ばれ、enumで定義した定数は**列挙子**と呼ばれる。

# ◆構文

“`java
// enum 型を宣言
public enum HogeHoge {
// 列挙子を宣言
HOGE,
ORANGE,
PEACH;
}
“`

# ◆使い方例(enumの定義&メソッドの呼び出し方)
以下の例ではEnumに`jpFruitsName`という追加のフィールドを持たせ、
その値を返す`fetchJpFruitsName`メソッドを定義しています。
Fruits型の変数にはorange、peach、grapeの

元記事を表示

pleiades all in oneの解凍に苦戦した話

・問題

pleiades all in oneをダウンロードしたあと、解凍しようとしてもエラーになってしまう。ダウンロードしたのはWindows x64のUltimate。

・トライ
ダブルクリックやWinRARを利用して解凍したがチェックサムエラーが発生する。

UltimateをやめてJavaのダウンロードファイルに変更。今回Javaを使いたかったので最悪Javaの環境が整えば良い。結果としてうまく解凍できた。

元記事を表示

Pattern Matching パターンマッチング

## Pattern Matching パターンマッチング
パターン マッチングでは、オブジェクトが特定の構造を持っているかどうかをテストし、一致する場合はそのオブジェクトからデータを抽出します。Java ではすでにこれを行うことができます。ただし、パターン マッチングでは、より簡潔で堅牢なコードを使用してオブジェクトから条件付きでデータを抽出できるようにする新しい言語拡張機能が導入されています。
## Pattern Matching for the instanceof Operator
– The predicate is a Boolean-valued function with one argument; in this case, it’s the instanceof operator testing whether the Shape argument is a Rectangle or a Circle.
– The target is the argument of the predicate, which is the Shape value.
– The pa

元記事を表示

sealed class

## sealed class
Sealed クラスとインターフェイスは、他のどのクラスやインターフェイスがそれらを拡張または実装できるかを制限します。
permits句は、シールされたクラスを拡張できるクラスを指定します。
## sealed classの宣言
“`java
public sealed class Person permits Student, Teacher, Worker {
}
“`
## 許可されるサブクラスの制約
– final: Cannot be extended further
– sealed: Can only be extended by its permitted subclasses
– non-sealed: Can be extended by unknown subclasses; a sealed class cannot prevent its permitted subclasses from doing this
## 許可されるサブクラスの宣言
“`java
non-sealed class Teacher extend

元記事を表示

【Android/Java】BootCompleteでの起動時処理(Android11)

## やりたいこと
色々と記事があるけど、BootCompleteの動作の整理を行いたい

## Step1.通常設定(BootCompleteの受信)
(出尽くしている内容だが)以下を追加する

#### AndroidManifest.xml
~~~xml


元記事を表示

SpringBoot + Java + Gradle環境で”Hello World”

## 環境
– SpringBoot 2.2.7
– Java 1.8
– Gradle 6.3

## Javaの設定(IntelliJ )
ファイル < プロジェクト構造 < プロジェクト設定 < プロジェクト ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981742/463aa415-0271-37ea-8245-5e05c2ec6e75.png) < モジュール ソース ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981742/aba0033a-f9f8-b0dd-773e-03fdf1670c4f.png) 依存関係 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981742/e2c2090d-67b4-a439-024b-bf1637ca1301.png) ファイル

元記事を表示

遺伝的アルゴリズムを体験する

# 概要
 機械学習の一つに遺伝的アルゴリズムというものがある。原理は単純で「良いものと良いものを組み合わせれば、さらに良いものが生まれるはず」というものだ。今回は簡単な問題を例にあげて実際に最適解を得る事を確認する。

 コードはgitHubにおいておく。今回使用したコードを活用して別の記事を書く予定のため、より使いやすいように改良をしていくつもりだ。

https://github.com/NEKOHUKURO/GA_num_of_one

# 遺伝的アルゴリズムの簡単な説明
この章で遺伝的アルゴリズムの簡単な説明を行う。

## 遺伝情報の表現方法
遺伝的アルゴリズムはそれぞれの個体が遺伝子として0と1で構成された配列を持つ。
遺伝子の長ながさは個体ごとに変わることはない。

## 子孫を残す
個体は他の個体と子孫を残す
親はそれぞれの遺伝子を組み合わせたものを子孫として生成する。
基本的に獲得形質は遺伝させないが本によってはそのようなアプローチを紹介するものもある。
また子孫を残す際、一定の確立で遺伝子の一部を反転させる。これを突然変異という。

## 優れたものが子孫を残

元記事を表示

Nablarch: writeタグとrawWriteタグの違いは?brタグを使用できるのはどっち?

# 結論

:::note
– brタグを使用できるのは、rawWriteタグ。
– writeタグは、デフォルトではbrタグを使用できない。
– 一方、自動エスケープされるので、安全性が高いメリットがある。
:::

:::note alert
– rawWriteタグはセキュリティリスクに注意する必要がある。
– 外部から入力可能な値にrawWriteタグを使用するのはご法度。
:::

## 前提:Nablarchのカスタムタグについて

https://nablarch.github.io/docs/LATEST/doc/application_framework/application_framework/libraries/tag.html#tag

## コードサンプル

nablarch-example-webでテストする。実行方法はREADMEを参照。

https://github.com/nablarch/nablarch-example-web

“`java
/**
* ログイン画面を表示。
*
* @para

元記事を表示

OTHERカテゴリの最新記事