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

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

[Java / docker] とりあえず Docker で Java を動かしたいときc(⌒(_*˘ㅿ˘)_スヤァ

# 1. 概要

– とりあえず**何でもいいから手軽に Java を実行したい**
– Docker、特に `docker-compose` が好き

そんな人のための記事。

# 2. 気を付けたこと

– 古過ぎる Docker イメージは使わない
– サイズがなるべく小さそうなイメージを使う
– ただし、`alpine` みたいなすっからかん過ぎるイメージは、後で困ることが多いので使わない

## Docker image についての補足
以下の記事によると、 **`OpenJDK` の Docker イメージは非推奨になってしまった**らしい。

https://zenn.dev/104/scraps/cc1542931b4ade

上記を踏まえて、最近も更新されていそうな、 `Eclipse temurin` という Docker イメージを使うことにした(\*˘︶˘\*)フフン

# 3. 前提条件

OSに、以下がインストールされていて、使用できる状態であること。

– docker
– docker-compose

使用した Docker image は以下の通

元記事を表示

ヌルポも怖くない、Javaでの比較について

## Javaで比較する術は?
業務で比較について勉強することがあったので、記事にまとめておくよ。
javaで比較するときによく使うものとして、
`equals()`、`==`、`Objects.equals`があるのでそれぞれ簡単に解説するよ。

### equalsメソッド(String.equals())
equalsメソッドは、Stringクラスの文字列を比較するときに利用されるものだよ。
ただし、nullと比較する場合にヌルポ(NullPointerException)が発生することもあるので、注意が必要だよ。基本的な使い方は以下の通り。
“`java
str1.equals(str2);
“`
具体的には、
“`java
public class Main {
public static void main(String[] args) {
String str1 = “Qiita”;
String str2 = “Qiita”;
String str3 = “qiita”;

System.ou

元記事を表示

IntelliJ IDEA ショートカットまとめ一覧

# コード編集
“コード補完“: `Ctrl + Space` (Windows/Linux), `Cmd + Space` (Mac)
`スマート補完`: `Ctrl + Shift + Space` (Windows/Linux), `Cmd + Shift + Space` (Mac)
`コードのフォーマット`: `Ctrl + Alt + L` (Windows/Linux), `Cmd + Option + L` (Mac)
`コメントアウト/コメント解除`: `Ctrl + /` (Windows/Linux), `Cmd + /` (Mac)
`ブロックコメント`: `Ctrl + Shift + /` (Windows/Linux), `Cmd + Shift + /` (Mac)
`行を移動`: `Alt + Shift + Up/Down` (Windows/Linux), `Option + Shift + Up/Down` (Mac)
`行を複製`: `Ctrl + D` (Windows/Linux), `Cmd + D` (Mac)
`行を削除`: `C

元記事を表示

ジェネリックスについて

# ジェネリックスについての理解
Javadocを眺めていると、ジェネリクスを利用したクラス、メソッド、インターフェースが存在します。Eとか、Kとか記載されていると、パラメータの意味が分からず読み飛ばしている方もいるのではないでしょうか?
そのような方のために、ジェネリック型を見かけてもドキュメントやコードが読めるよう解説をしたいと思います。

ジェネリック型とは、型に対してパラメータ化されるジェネリッククラスまたはインターフェースとなります。

ジェネリックス型を利用せず、汎用的な型を扱う場合は以下のようになります。
“`
public class Box {
private Object object;

public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
“`

ジェネリックス型で定義した場合、以下のようなコードになります。
“`
public class Box {
// T stands f

元記事を表示

Javaで「例外とは」の動作を確認してみた

# 概要

Javaで「例外とは」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample1_1.java
class JSample1_1{
public static void main(String args[]){
int n = 10;

if (n == 10{
System.out.println(“10です”);
}
}
}
“`

以下のコマンドを実行しました。
“`$ javac JSample1_1.java
JSample1_1.java:5: エラー: ‘)’がありません
if (n == 10{
^
エラー1個
“`

以下のファイルを作成しました。
“`JSample1_2.java
class JSample1_2{
public static void main(String arg

元記事を表示

Java モジュールシステム

Java 11 Gold 取得に向けた学習記録

# モジュールシステム

複数のパッケージをまとめる仕組みを**モジュールシステム**という。

## 定義

モジュールの定義は `module-info.java`(モジュール定義ファイル)に記述する。このファイルに記述する情報は **モジュールディレクティブ** という。

“`java:module-info.java
module モジュール名 {
exports 公開するパッケージ名;
requires このモジュールが依存する別のモジュール名;
}
“`

`module-info.java`を配置したフォルダはモジュールとして扱われる。

パッケージ内ではクラス単位でアクセス制御を行うのに対して、モジュールシステムではパッケージ単位でアクセス制御を行うことができる。

## モジュール名

モジュール名はパッケージと同様に**一意**であることが必要。そのため他のモジュール名と被らない名前にする必要がある。

通常は、モジュールに含めるパッケージ名に共通の文字列があれば、その部分をモジュール名として使

元記事を表示

Javaの日付の扱い~LocalDateTime系とInstantを使い分ける~(Android)

Javaには日付を扱う型にはさまざまあります。どれを使ったらいいのでしょう。

今回は使い分けを自分なりにまとめました。

なおkotlinx.datetimeについては今回扱いません。
こちらはKMPやシリアライズで使われるKotlin製の日付型でありますが、Javaの型をKotlinで使えるようにしたものですので、考え方は基本同じだと思っています。

またAndroidアプリの開発で使うことを前提としています。

## java.util.Dateやjava.util.Calendarは基本使わない
Dateは一部のメソッドが非推奨となっています。
> The corresponding methods in Date are deprecated.
>
[Date \(Java SE 11 & JDK 11 \)](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Date.html)

DateやCalendarはレガシーとされており、APIも使いづらいです。
古いクラスとして、新規開発

元記事を表示

Tomcatのポート番号を環境変数で定義・変更する方法

## 1. はじめに
SpringBoot等のモダンなアプリケーションではポート番号を環境変数で容易に変更することが可能です。それに倣い、Tomcatで動作しているJavaアプリをコンテナ化するというレガシーシステムのクラウドリフト案件で起こりえるケースを前提とし、Tomcatのポート番号を外部(環境変数)から変更可能とする方法について説明したいと思います。

## 2. 検証環境・バージョン

* OS : Windows 11 Pro 23H2
* Java : Corretto-17.0.12.7.1
* Apache Tomcat : 10.1.26

## 3. 設定方法

“`xml:%CATALINA_HOME%/conf/server.xml

元記事を表示

じゃんけんでJavaのオブジェクト指向を理解する

:::note warn
この記事は初心者が理解を深める目的で書いています。
誤りなどありましたらコメントでご指摘頂けますと幸いです。
:::
# オブジェクト指向でつまづく
Javaを学ぶ方の多くが、クラス・メソッド・コンストラクタ・thisあたりの観念でつまづいたのではないでしょうか。私もそうです。
よくある「設計図」「実体」などの説明ではよくわからなかったので、自分なりに理解をまとめてみました。

# そもそもなぜクラスやメソッドがあるのか
「ゲームをするよ!」と言われて、以下のルールを説明されたとします。
“`
このゲームに本来人数制限はありませんが、今回は1対1の場合に絞ります。
それぞれのプレイヤーは3種類の行動が可能です。
グー:すべての指を折り拳を作る
チョキ:人差し指と中指のみ立て、あとは折る
パー:すべての指を立てる
これらはすべていわゆる三すくみの状態となっており、それぞれ勝てる手、負ける手があります。
etc…
“`
**じゃんけんって言ってよ。** そう思いませんでしたか。
それがクラスやメソッドを取り扱うメリットと直結します。
とても大雑把に言

元記事を表示

removeIfの中身

 JavaでMapから条件付きで要素を削除する場合に、for文ではうまくいかない。これは、collectionの構造がiteration中に変更されて、ConcurrentModificationExceptionがthrowされたことによるものらしい。
代替手段として、removeIfメソッドを用いると想定通りにプログラムが動いた。ソースを見ると比較的スクリプトが少なく簡単に読めそうなので、詳細を確認しよう。

“`Java
public interface Collection extends Iterable {
// 省略
default boolean removeIf(Predicate filter) {
Objects.requireNonNull(filter); //1
boolean removed = false; //2
final Iterator each = iterator(); //3
while (each.hasNext()) {

元記事を表示

【Java】レコードクラスとは

## はじめに

資格勉強を進める中で、レコードクラスを学ぶ機会がありました。

研修の中で学ぶ機会はなかったものの、結構便利なので今後も使う機会があるかと思い、備忘録としてまとめてみようと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
初学者の方
普段Javaを使用している方

## レコードクラスとは
Java16より正式に追加された、簡潔かつイミュータブルにデータを保持できるクラスです。

従来は、データを保持する目的においてもクラスを新たに作成し、似通ったクラスを作成していましたが、レコードクラスはこれらボイラープレートコードの作成を軽減してくれます。

**※ボイラープレートコード**
→定型的で冗長な記述のこと。

## 実際の使い方
実際の使い方を見ていきましょう。
今回は名前(name)と年齢(age)のみの簡潔なレコードクラスを作成してみます。

“`java
public record Person(String name, int age) {}
“`

これ

元記事を表示

Javaで「コマンドライン引数の数を確認」の動作を確認してみた

# 概要

Javaで「コマンドライン引数の数を確認」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample2_1.java
class JSample2_1{
public static void main(String args[]){
if (args.length != 2){
System.out.println(“引数を2つ指定して下さい”);
System.out.println(“JSample2_1 値1 値2”);
System.exit(1);
}

System.out.println(“「” + args[0] + “」”);
System.out.println(“「” + args[1] + “」”);
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample2_1.java
$

元記事を表示

【動画あり】Apache Maven 解説 | Javaビルドツールを学ぼう

## 本記事の内容

本記事は、Apache Mavenの動画を元に、「Mavenが全くわからない!」人でもわかるようにMavenを基礎から解説する内容です。

ハンズオンは動画や他の記事に譲り、本記事では解説だけを行なっていきます。

### 動画について

本記事にあるYoutubeの動画は、Udemyに掲載している動画の一部を抜粋したものです。
フルバージョンを視聴したい方はこちらからどうぞ!
クーポンリンクを使用すれば割引価格で視聴できます!

Udemyのクーポンリンク:
https://www.udemy.com/course/maven-introduction/?couponCode=25FACCFDA0D623CE2ADA
クーポンコード = 25FACCFDA0D623CE2ADA

## 1. Apache Mavenとは?

Apache Software Foundationで開発されているソフトウェアプロジェクト管理ツールです。
[公式サイト:Apache Sodtware Foundation](https://www.apache.org/)

###

元記事を表示

【Java】Switch文・Switch式とは

## はじめに

Java Silverの学習を進めている際、Switch文、Switch式について学ぶ機会がありました。

条件分岐処理は普段if文を使って書くことが大半なので、備忘録としてまとめてみようと思います。

※誤りありましたら、ご指摘いただけますと幸いです。

## 想定読者
初学者の方
普段Javaを使用している方

## Switch文とは
Java14で正式に追加された、複数の条件分岐を簡潔に記述するための制御構造のことを言います。
特定の変数の値に基づいて異なるコードブロックを実行することができます。
if文と似ていますが、条件分岐が多くなる場合は、Switch文を使用した方が可動性は向上するかと思います。

## 実際の使い方
実際の使い方を見ていきましょう。
ここでは2つの書き方を取り上げます。

#### 1, オーソドックスな書き方
“`java

int day = 3;

switch (day) {
case 1:
System.out.println(“Monday

元記事を表示

Javaで「引数を指定してmainメソッドを呼び出す」の動作を確認してみた

# 概要

Javaで「引数を指定してmainメソッドを呼び出す」の動作を確認してみました。
以下のページを参考にしました。

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

# 実装

以下のファイルを作成しました。
“`JSample1_1.java
class JSample1_1{
public static void main(String args[]){
System.out.println(“「” + args[0] + “」”);
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample1_1.java
$ java JSample1_1 hello
「hello」
“`

# まとめ

何かの役に立てばと。

元記事を表示

テーブルを追加したらコンパイルエラーでビルドできなくなった話

こんにちは、サーバエンジニアの池脇と申します。
今回は私が実際に経験した失敗談とそこから得た学びについてまとめようと思います。
どなたかの参考になれば幸いです。

## テーブルを追加しただけでコンパイルできなくなった!?
JavaのSpringBootを使って新規テーブルを追加する作業は開発者にとって日常的な作業です。
しかし、ある日新規テーブルを追加し、いつものようにコードの自動生成を走らせてビルドを行ったところまさかのコンパイルエラーに直面しました。
エラーの内容は
“`
パラメータが多すぎます。(too many parameters)
“`
というものでした。

## なぜコンパイルエラーが起きたのか
上記エラーの内容と発生箇所から、これはコンパイラが受け付けるコンストラクタのパラメータ数が上限を超えていることが原因ということはわかりました。
しかしなぜエラーが発生したのか……?

エラーの発生に至った背景を探ると次のことが明らかになりました。
私のプロジェクトでは、マスタデータのキャッシュを暖気するためのクラスを自動生成していました。このクラスは `private fi

元記事を表示

クラスの概念を初心者にわかりやすく解説

# 背景
現在、新卒でエンジニアになりオンボーディングを行っています。研究でC++を用いてプログラミングをしていて半泣きになりながらオブジェクト指向プログラミングについて理解した過去から、同期の理解の一助になればと勉強会を開いて理解のサポートをしました。そこで説明した内容をこちらでも供養できればと思います。

:::note warn
こちらの記事はクラスの概念をプログラミング初学者がざっくりとした理解をするを目的とした記事です。専門的で詳しい内容を知りたい方は別途自分で調べていくことをお勧めします。
:::
:::note
私もJava初学者ですので、記事の内容で不備がある、わかりにくいなどあれば遠慮なくコメントなどいただけると嬉しいです。
:::
# 目次
1. [クラスとは](#1クラスとは)
1-1.[クラスのイメージ](#1-1クラスのイメージ)
1-2.[クラスの中身を書きながら理解](#1-2クラスの中身を書きながら理解)

2. [例を見ながら解説](#2例を見ながら解説)
2-1.[題材となる問題](#2-1題材となる問題)
2-2.[問題を読んで](#2-2問題を読

元記事を表示

No.14 演算子(足し算)

# 演算子(足し算)

+(足し算)
<出力結果>
30yen(まず10+20が行われてからyenが連結される)

-(引き算)
*(掛け算)
/(割り算)

# 演算子(余り)&練習問題