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

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

WSL2 で IntelliJ を使った Java 環境構築

# 目次
[1. はじめに](#1-はじめに)
[2. 環境](#2-環境)
[3. SDKMAN のインストール](#3-sdkman-のインストール)
[4. Java のインストール](#4-java-のインストール)
[5. Maven のインストール](#5-maven-のインストール)
[6. JetBrain ToolBox のインストール](#6-jetbrain-toolbox-のインストール)
[7. IntelliJ IDEA Community 版のインストール](#7-intellij-idea-community-版のインストール)
[8. IntelliJ 起動](#8-intellij-起動)
[9. まとめ](#9-まとめ)
[参考文献](#参考文献)

# 1. はじめに
社会人になって本格的に Java での開発がはじまりました.大学と研究室では Python メインで研究していたため VScode 信者だったのですが,まあわがままばっか言ってられなくて IntelliJ を使わないといけない状況になりました.会社では Mac で開発しているのです

元記事を表示

SwaggerでJavaのドキュメントを作ってみる

# はじめに

大きな開発をする際に開発内容の説明するのって難しいですよね。
もしかすると世間にはいい感じのドキュメントの作り方があるかもしれないし、
なんなら自分好みのドキュメント生成用アプリなんかを作るのも1つの手だと思います。

ただできるだけ素早く手軽に手間も抑えたい!
という気持ちでたまたま最近使い始めていたSwaggerを使っていい感じにドキュメントが作成できないかと考えたので
今回はJavaの開発内容をSwaggerを使ってドキュメント化してみたいと思います。

# Swaggerについて

Swaggerについては公式ドキュメントやほかにもいろいろな記事があるので詳細は省きますが、
簡単にまとめるとOpenAPI仕様のAPIについて設計やドキュメントの作成などが可能なツールのセットとなります。

https://swagger.io/docs/specification/about/

ツールのセットということで実際どういったツールがあるかというと下記のようなツールがあるようです。
|名称 |概要 |
|:————|:————-|
|Sw

元記事を表示

【JavaGold】SystemクラスとConsoleクラス

## 概要
コンソールからの入出力をサポートするクラスとして以下がある。

– `java.lang.System`クラス
– `java.io.Console`クラス

#### `java.lang.System`クラス
`InputStream‘オブジェクトである`in`フィールドを使用し、Javaプログラムで標準入力(Standard Input)を取得する。

`in`フィールドの宣言は以下である。

“`java
public final static InputStream in;
“`

`in`フィールドは`java.io.InputStream`クラスのインスタンスであり、デフォルトではコンソールからの入力を受け取る。
Javaプログラムでは、`System.in`を使用してユーザーからの入力を読み取ることができる。

`InputStream`クラスの`read()`メソッドを使用して、1バイトずつ標準入力からデータを読み込むことや、`Scanner`クラスなどを使用してより高レベルの入力操作を行うこともできる。

##### 例

“`java
impor

元記事を表示

Java Gold攻略法

Oracle Certified Java Programmer Gold SE 11に合格したので、僕なりの攻略法をまとめてみました。

[勉強方法](#勉強方法)
[試験問題の傾向](#試験問題の傾向)
[暗記のコツ](#暗記のコツ)
[消去法について](#消去法について)
[その他大事なこと](#その他大事なこと)
[最後に](#最後に)

## 勉強方法

勉強期間:約2か月(週3~5日 30分~1時間)
正答率:85%

使用したのは下記です。
– 黒本
– エクセル
– Eclipse

他の本は使用していないのでわかりませんが、黒本で十分という声が多いと思います。
エクセルに回答を記入し、各章毎に正答率がわかるようにしていました。
Eclipseは動作確認でたまに使用していました。

黒本は5~6周くらいしたと思います。

## 試験問題の傾向

僕の感覚ですが、下記割合でした。

|問題 |出題率 |
|—|—|
|見たことない問題 |8% |
|ラムダ式、ストリームAPI |70% |
|その他黒本関連の問題 |22% |

最初の10問くらいは見た

元記事を表示

アシスタントアプリとして起動できるAndroidアプリの作成

# はじめに
この記事ではAndroidアプリをアシスタントアプリとして登録したい時に設定するコードについて紹介します。

例としてコードを掲載していますが、まだ開発途中であるため、一部機能が使用できず、また強制停止が頻発します。あくまで参考程度でお使いください。

# Androidスマホのショートカット機能
Androidスマホには、画面の右下から中央下に指をスライドしたり、ホームボタンを長押しするとアシスタントアプリが起動するショートカットが実装されています。また、端末によっては、アシスタントキー(SHARP AQUOS)や、Googleアシスタントボタン(SONY Xperia)などの、アシスタントアプリを起動するためのボタンが存在します。

しかし、あまり使わないんですよね。この機能。
じゃあ別のアプリを割り当てたい。

でも残念なことに、これらのショートカットは、アシスタントアプリとして登録されているアプリでないと、起動させられないんです。
【Eclipse】白黒のコンソールに色をつける方法

# はじめに
表題の情報が意外とネット上に少なかったため、この記事が
同じように「コンソールに色をつけたい」という方の役に立てば幸いです。

## before
![20230721-104934.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/c707d21b-8018-d473-6e33-69a21a0c1aa7.png)

## after
![20230721-105215.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/cc8adb7b-dfa0-11c9-fd13-a7be3c64e46a.png)

# 手順
設定(Preference) → Ansi コンソール → 「使用可能」にチェックを入れる → 適用して閉じる
![20230721-105423.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/

元記事を表示

[Java] super()とthis()

# はじめに
### コンストラクタとは
* 「public クラス名」の形したメソッド(戻り値の型を指定しない「void」も)
* クラスのインスタンス生成時に実行されるメソッド

# super()の概要
* super()は親クラスのコンストラクタを呼び出す
* super() は親クラス(スーパークラス)のコンストラクタを呼び出す。
* 親クラスと子クラスの関係において、子クラスのコンストラクタが実行される前に親クラスのコンストラクタを先に呼び出す必要がある
“`java:super()
public SubClass() {
super(); // 親クラスのデフォルトコンストラクタを呼び出す
}
“`

# this()の概要
* this() は同じクラス内の別のコンストラクタを呼び出す。
* 一つのコンストラクタ内で他のコンストラクタを呼び出すことができる。
“`java:this()
public SubClass(int num) {
this(); // 同じクラスのデフォルトコンストラクタを呼び出す
}
“`

# おわり
### 制約

元記事を表示

Synchronizeとは

## Synchronize

:::note
Javaのマルチスレッド環境でスレッドセーフ(Thread-safe)な動作を実現するための機能
**スレッドが同時に共有されるリソースにアクセスするとき
→スレッドの実行順序や同時実行による競合状態を制御するために使用**
:::

### 具体的な状況の例

Javaでは、複数のスレッドが同時に共有データにアクセスすることがある

複数のスレッドが同時にデータを変更しようとすると**データの整合性が損なわれたり、競合状態が発生**したりすることがある

このような競合状態を防ぐために使用
***

synchronizeキーワードを使用
→メソッドやブロックをsynchronizedできる

– synchronizeされたメソッドやブロックは、**同時に1つのスレッドしか実行不可**
– スレッドがsynchronizedされた領域に入ると、**他のスレッドはその領域の終了を待つ**ことになる

## 例 Javaのsynchronize

“`java
public class Counter {
private int

元記事を表示

【JavaGold】ストリームの基底クラス

## 主なクラス

ストリーム(データの入出力)を扱う`java.io`パッケージには以下の基底クラスがある。

– 文字ストリームを扱うクラス
– `java.io.Reader`クラス
– `java.io.Writer`クラス
– バイトストリームを扱うクラス
– `java.io.InputStream`クラス
– `java.io.OutputStream`クラス

#### `java.io.Reader`クラス

テキストファイルや文字データを読み取るための共通のメソッドを提供する。
このクラスは抽象クラスであるため、具象サブクラス(例えば`FileReader`や`BufferedReader`など)を使用してファイルから文字データを読み取る。

##### 主なメソッド

– `int read()`:
次の文字を読み込んで`int`型で返す。
ファイルの終端に達した場合は`-1`を返す。
– `int read(char[] cbuf)`:
指定した文字配列にデータを読み込み、読み込んだ文字数を返す。
ファイルの終端に達した場合は`-1`を返

元記事を表示

【JavaGold】isDirectoryメソッド

## 概要
指定されたパスがディレクトリであるかどうかを判定する。

`isDirectory()`メソッドは以下のように定義されている。

“`java
public boolean isDirectory()
“`

このメソッドは、呼び出された`File`オブジェクトがディレクトリである場合に`true`を返し、ディレクトリでない場合には`false`を返す。

##### 例

“`java
import java.io.File;

public class IsDirectoryExample {
public static void main(String[] args) {
// ファイルとディレクトリのパスを指定してFileオブジェクトを作成
File file = new File(“/path/to/file_or_directory”);

// isDirectory()メソッドでディレクトリかどうかを判定
if (file.isDirectory()) {

元記事を表示

【JavaGold】Fileクラス

## 概要
Javaプログラムでファイルやディレクトリを操作するための基本的なクラスである。
ファイルとディレクトリにアクセスするためのメソッドを提供する。

#### 主なメソッド

**ファイル操作メソッド**

– `createNewFile()`:
新しいファイルを作成する。
– `delete()`:
ファイルまたは空のディレクトリを削除する。
– `renameTo(File dest)`:
ファイルの名前を変更する。

**ファイル情報取得メソッド**

– `exists()`:
ファイルが存在するかどうかを判定する。
– `getAbsolutePath()`:
ファイルの絶対パスを取得する。
– `getName()`:ファイルの名前を取得する。
– `length()`:ファイルのサイズ(バイト単位)を取得する。

**ディレクトリ操作メソッド**

– `mkdir()`:新しいディレクトリを作成する。
– `mkdirs()`:
親ディレクトリも含めて新しいディレクトリを作成する。

**ディレクトリ内のファイルとディレクトリの一覧を取得するメソッド**

元記事を表示

Javaの演算子について学習してみた

# 概要
Javaの演算子について学習をしてみました。以下のページを参考にしました。

演算子

https://www.javadrive.jp/start/ope/

算術演算子

https://www.javadrive.jp/start/ope/index1.html

単項マイナス演算子

https://www.javadrive.jp/start/ope/index2.html

演算子の優先順位と結合規則

https://www.javadrive.jp/start/ope/index4.html

インクリメント演算子とデクリメント演算子

https://www.javadrive.jp/start/ope/index6.html

ビット演算子とシフト演算子

https://www.javadrive.jp/start/ope/index8.html

代入演算子

https://www.javadrive.jp/start/ope/index10.html

関係演算子と等価演算子

https://www.javadrive.jp/start/ope/

元記事を表示

[Java] 値渡しと参照渡し

# 値渡しとは
* メソッドを呼び出したときに呼び出し元に渡される値
* 呼び出し元の変数の内容が、仮引数にコピーされる
* 呼び出さし先で引数の内容を書き換えても、呼び出し元の変数は変化しない
※プリミティブ型のみ

# 参照渡しとは
* 変数のアドレスを渡すもの
* 変数の参照先(アドレス)を渡すから参照渡し
* `Javaでは参照渡しはできない`

# 実際のコード
“`java:値渡し
public class PassByValue {
public static void main(String[] args) {
int value = 10;
System.out.println(value);
passValue(value);
System.out.println(value);
}

public static void passValue(int value) {
value++;
// 元の変数には影響を与えない
Syst

元記事を表示

Javaの変数とデータ型について学習してみた

# 概要

Javaの変数とデータ型について学習してみました。以下のページを参考にしました。

変数とデータ型

https://www.javadrive.jp/start/var/

Javaにおける変数とは

https://www.javadrive.jp/start/var/index1.html

変数を宣言する

https://www.javadrive.jp/start/var/index2.html

変数名のつけ方(識別子)

https://www.javadrive.jp/start/var/index3.html

基本のデータ型

https://www.javadrive.jp/start/var/index4.html

変数の初期化と変数への値の代入

https://www.javadrive.jp/start/var/index6.html

変数の値を取り出す

https://www.javadrive.jp/start/var/index8.html

変数宣言で型推論を利用する

https://www.javadrive.jp/star

元記事を表示

android java Bluetooth接続テスト用 コード

### ■ テスト概要
・Android 10の端末では、socketのconnectがちゃんと機能していたが、Android 11 の端末だと精度がかなり悪くなる。

#### 対象テストバージョン
(Bluetooth 2.0)(Bluetooth 3.0)

### ■ テスト用ソースコード

“`xml activity_main.xml

元記事を表示

GCPを使って公開のmavenリポジトリを作る(Gradle)

Gradleには標準機能でS3やCloud Storageをmavenリポジトリとして扱う機能がついています。
社内や個人でプライベートなリポジトリとして活用する例は見られるのですが、今回は一般公開設定にしてPublicにしてみます。

Cloud Storageの料金は[こちら](https://cloud.google.com/storage/pricing?hl=ja)。実験的にいくつかファイルを置いているくらいであれば0円になることもあります。
アイオワリージョンであれば、公開日時点で1ヶ月あたり$0.020/GBの設定のようです。東京リージョンではもう少し高い値段設定です。

## 環境

* Java 17
* Gradle 8.2

## 事前準備

ファイルをアップロードするためのCloud Storageのバケットを用意してください。
実験的に試すのであれば、シングルリージョンにしておくのが良いと思います。

## `build.gradle.kts`の用意

今回はKotlin DSLで書いていますがGroovyでもほぼ同様のコードで動くと思います。

mavenに

元記事を表示

自社サービス向けWebシステム開発スタート

**代表のとあるサービスのアイデアを具現化すべく、この度、自社内でのWebシステムの開発をスタートしました。**

今回の取り組みの狙いは、対象のサービスをリリースすることはもちろん、今後も新たなサービスを迅速にリリースできるだけのノウハウを社内に蓄積すること。
また、既存の事業におけるエンジニアのスキルの底上げにあります。
* * *
**プロジェクトの概要**
* 弊社代表をシステムオーナーとして要件定義、及び各工程でのレビューを実施

* メンバーは弊社所属のエンジニア(若手&ベテラン)
ssh経由でプログラム実行時の文字化け対策

ssh経由でリモートサーバーのシェルをキックしてspring bootを実行していましたが、その際のファイルやログに出力される日本語が???のように文字化けしていたので調査しました。

### 原因
“`terminal
[root@remote ~]# echo $LANG
ja_JP.UTF-8

[root@local ~]# ssh root@remote echo $LANG
C.UTF-8
“`
CentOSのロケールの設定がssh経由でコマンド実行する場合に`LANG=C.UTF-8`になっていました。

### 解決策
そのため、プログラムをキックするシェルに次の行を追加して`LANG=ja_JP.UTF-8`に設定することで文字化けを解消することができました。
“`sh
export LANG=”ja_JP.UTF-8″
“`

元記事を表示

正規表現の可読性を上げたい

## はじめに
記事本編は[通常の正規表現](#通常の正規表現)からです。最初が長いので興味ない方は飛ばしてください。

Javaでアプリを開発しています。
その際に, コマンド的なものを実装しようと思いました。

“`
COMMAND
“`
的な感じです。
この時に構文解析を行うために, 正規表現を用いようと思いました。

Javaも正規表現もたいして触ってないのでなにか訂正補足等してもらえるとありがたいです。

## どうして正規表現なのか

個人的には過去に構文解析器をC++で実装したことがあるので, これでも全然よかったのですが,

– コマンド機能はたいして重要な機能ではなく, 文法も簡単なので, そこまで時間をかけたくない。
– 学校友達と開発するので, できるだけ慣れ親しんだ技術にしたい。

以上の理由から今回は正規表現で実装することにしました.

## 正規表現の難点

正規表現ですが, とにかく読みにくいです。例えば,
“`
(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])T([01

元記事を表示

【JavaGold】ReentrantLockクラス

## 概要
[`synchronized`](https://qiita.com/knmbpc/items/48bdab0f3c8e7b070ec1)による排他制御や[`atomic`パッケージのクラス](https://qiita.com/knmbpc/items/e06ff3e81e77d65647fd)では実現できない、複数のメソッドにまたがる排他制御を実現できる。

## 特徴

– スレッドセーフであり、複数のスレッドから同時にアクセスされても、正しくロックを制御する。
– 排他的なロック(獲得できるのは1つのスレッドだけ)を提供する。ロックを獲得したスレッドだけが保持し、他のスレッドはロックの解放を待つ必要がある。
– 同じスレッドがロックを再帰的に獲得(スレッドがすでにロックを保持している場合、再度ロックを獲得)することができる。

## 主なメソッド

– `lock()`:ロックを獲得する。
他のスレッドが既にロックを保持している場合は、呼び出し元のスレッドはロックの解放を待機する。同じスレッドが再帰的にロックを獲得することも可能。

– `unlock()`:ロック

元記事を表示

OTHERカテゴリの最新記事