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

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

【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では、複数のスレッドが同時に共有データにアクセスすることがある

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

シンアライズは、このような競合状態を防ぐために使用
***

synchronizedキーワードを使用
→メソッドやブロックをシンアライズできる

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

## 例 Javaのシンアライズ

“`java
public class Counter {
private int cou

元記事を表示

【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()`:ロック

元記事を表示

【JavaGold】CopyOnWriteArrayListクラス

## 概要
`java.util.concurrent`パッケージに含まれるクラスであり、スレッドセーフ[^1]なコレクションである。
[^1]:正しく排他制御され、複数のスレッドから同時に利用されても競合やデッドロックなどが起こらないこと。

#### 特徴

このリストは、他のスレッドが要素を変更しても、読み取り操作を行うスレッドには影響を与えない。要素の追加、削除、および更新が必要な場合、新しいコピーが作成され、変更が行われる。
このため、読み取りと書き出しを同時に行なっても、`ConcurrentModificationException`が発生することはない。

##### 例

“`java
import java.util.concurrent.CopyOnWriteArrayList;

public class CopyOnWriteArrayListExample {
public static void main(String[] args) {
CopyOnWriteArrayList list = new CopyOn

元記事を表示

【JavaGold】atomicパッケージのクラス

## 主なクラス
`java.util.concurrent.atomic`パッケージには主に以下のクラスが含まれている。

– `AtomicBoolean`:`boolean`型の値の操作を提供するクラス
– `AtomicInteger`:`int`型の操作を提供するクラス
– `AtomicLong`:`long`型の操作を提供するクラス
– `AtomicReference`:オブジェクト参照の操作を提供するクラス

これらのクラスは、複数のスレッドが同時にアクセスする可能性があるデータを扱う際に使用される。それぞれのクラスは、値の読み書きの原子性[^1]を保証するためのメソッドや操作を提供し、スレッドセーフな状態でのデータの更新を可能にする。

[^1]:分離できない(してはいけない)性質のこと。一連の処理が完全に終わるか、全く実行されないかのどちらかになるよう結果が保証されていなければならない性質を表す。

## 各クラスの主な共通メソッド
– `get()`:値を取得する。
– `set()`:値を設定する。
– `compareAndSet()`:現在の値と指定した期

元記事を表示

JavaでCSVファイルを読み込む(気象庁のデータから最高気温を記録した日を調べる)

### 前置き
暑すぎる毎日たまーに風が吹くと天に向かって感謝します。

今回は前回の続きで読み込んだデータから最高気温を記録した日付と最高気温をコンソール出力してみました!
※JavaGoldの資格範囲からちょっぴり脱線します。

### 取得したデータを再確認
取得方法は前回投稿した通りです。
1~6行目までは列名など不要なデータです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3484672/1558ffe4-3603-122a-4f99-921cf8b6982d.png)

今回はデータの中で名古屋に絞って最高気温を記録した日を出力してみました。

「え、岡崎もやれよって?」

「すいません、忙しいからさぼりました(´;ω;`)」

### プログラム
前回から特に変わったことはしていません。
今頭の中にある知識だけでソース組んでみました。

「きっと世の中にはもっとティピカルな方法があるんだろうなー…」
(最近、会社のすごい人がティピカルってよく使うから使ってみた笑)

元記事を表示

Nullをなくし、エラーから解放されよう

Nullを返すか、あるいはNullを受け取ることがどれほど危険であるかはよく知られています。Nullに関するエラー、Javaにおける最も一般的なエラーの一つであり、コードを混乱させ、バグを引き起こし、デバッグに時間を奪います。だからこそ、Nullの問題を解決し、Null安全なコードを書くべきです。

## 1. Null安全の重要性

Null安全はプログラムの信頼性と保守性を向上させます。Nullを許容すると、エラーがコードのどこかで発生しやすくなり、それを特定するのが難しくなります。Null安全を実現することで、これらのエラーが発生する可能性を大幅に減らすことができます。

## 2. Nullを返す、渡す処理の避け方

Nullを返すメソッドやNullを渡す呼び出しを使用すると、それを呼び出すコードは常にNullチェックを行わなければならず、コードが複雑になります。その代わりにJava 8から導入された`Optional`クラスを利用することで、Nullを明示的に扱うことができます。

`Optional`クラスは、存在しない可能性のある値をモデル化するためのコンテナです。それ

元記事を表示

GitHub Copilot検証 詳細

サブライムコンサルティングの大塚です。
本記事は以下の記事の一部となっています。
[GitHub Copilot検証](https://qiita.com/sublime_otsuka/items/fb27bb3a882673b97745)

検証の目的や対象範囲、開発環境、言語/フレームワークなどについては上記を参照ください。

# 検証概要

GitHub Copilotを使って、WebAPIサーバアプリケーションの開発が効率化できる検証します。

## 構築するアプリ

今回開発するアプリの仕様は以下の通りです。

* 商品情報を管理するシステムのAPIサーバ
* 開発するAPIは以下の一つのみ
– リクエストとしてIDを受け取り、商品情報を管理するテーブルからIDをキーに商品データを1件取得して、商品名をレスポンスとして返却
– 商品情報を管理するテーブルは商品マスタ(m_item)
– メソッドはGET
– パスは/api/item/(商品ID)
– 異常系は考慮しない

商品マスタの定義は以下の通り。

| カラム名

元記事を表示

OTHERカテゴリの最新記事