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

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

各言語のplaygroundまとめ

直近、golangの現場で2年近くやらせていただいてるのですが、Go Playgroundめっちゃ便利ですよね!
バージョンも選べて、なおかつコードもシェアできて、ちょっと書いて実行して確認して、結果や内容を共有できるの最高です

いくら実行環境を簡単に用意できるような時代になったとはいえ、「ちょっと試したい」みたいなときってあるじゃないですか。
ということで、今回はいろんな言語のPlayground事情の調査も込めて、まとめていこうと思います

# go
https://go.dev/play/

# javascript
vueやreactまで?!これはすごい!!

https://playcode.io/

![スクリーンショット 2023-11-21 8.30.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/afccef1f-da3c-649b-7afa-ed6b4118869f.png)

# node.js

https://stackblitz.com/edit/node

元記事を表示

プログラミング言語 Go Java C# で関数を介した整数カウントアップ実行時間を仲良く競う

# はじめに
プログラミング言語 Go ととJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
*

元記事を表示

Javaにおけるアノテーションについて学ぶ

Javaにおけるアノテーションについて学習ついでにまとめてみました。
アノテーションの基本的な構文や使い方について説明する記事です。
割とchatGTPくんに質問しながら理解していった節があるので、サンプルなどはGPTが生成したものが多いです。

# 基本的なアノテーションの使用法と概要
## そもそもアノテーションとは
直訳すると「注釈」という意味。
注釈とは「語句や文章をわかりやすく解説したもの」である。

## Javaにおけるアノテーションとは
アプリケーションのロジックに直接関係しない付随情報(メタデータ)をコードに追加することできる。
Javaには最初から用意されている「標準アノテーション」や、自作のオリジナルアノテーションを作成することもできる。

Spring Frameworkにおいて提供されるアノテーションも存在する。
これはフレームワーク自体の拡張機能に対して、特定の振る舞いや動作をさせたい場合にアノテーションを利用することもある。

## 使い方
基本的なアノテーションの構文は @ から始まり、その後にアノテーションの名前が続く。
アノテーションを追加する際は、

元記事を表示

SpringBootで初歩の環境構築~とりあえずトップページが表示されるところまで

# 開発環境

Windows10でやっていきます。

# Spring Tools 4 for Eclipseダウンロード

下記サイトからjarファイルをダウンロード。

https://spring.io/tools

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/bc94f5e2-6a12-05fd-d0e3-d1505188430d.png)

# jarファイル起動

ダウンロードしたjarファイル
spring-tool-suite-4-4.20.1.RELEASE-e4.29.0-win32.win32.x86_64.self-extracting.jar
を起動。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2b850c5a-878b-85a0-c0d0-d0946127093d.png)

jarファイルと同じフォルダーに、『sts-4.

元記事を表示

JVMとは 〜プログラムが実行されるまでの一連の流れ〜

# はじめに
今回の記事では、JVMとJavaのプログラムが実行されるまでの一連の流れをまとめました。

# JVMとは
JVM(Java Virtual Machine)とは、Java仮想マシンとも呼ばれ、Javaのプログラムを動かすために必要なソフトウェアです。

# JVMを理解するために必要な知識
### コンパイラ
コンパイラは、ソースコード(.java file)をバイトコード(.class file)に変更します。そして、コンパイラはソースコードに構文エラーがないかをチェックします。エラーを発見した際には、コンパイルエラー(Compile Time Error)がスローされます。

### バイトコード
コンパイルの結果生成されたコードで、ソースコードと機械語の仲介役です。バイトコードは、JVMによって処理されます。これにより、JVMを保持するシステムは、OSに関係なくJavaのプログラムを実行することができます。

### 機械語
コンピュータが理解できるコードで、CPUによって処理されます。機械語は0と1の2進数で表現されます。

# なぜJVMが必要なのか
JVMは

元記事を表示

【Java】Stringがどのようにメモリに保存されるのか調べてみた

# はじめに
Stringはjava.lang.Stringクラスの不変オブジェクトで、ヒープ領域に保存されます。

** Stringオブジェクトの不変性については、こちらの記事をご覧ください。
[【Java】不変オブジェクトのStringと可変オブジェクトのStringBuilder](https://qiita.com/shibainuu/items/05340b4b0c35083f51d9)

# Stringオブジェクトの作り方
1. Stringリテラルを使用
2. newキーワードを使用

“`
String s1 = “hello”;
String s3 = new String(“hello”);
“`

# Stringはヒープメモリに保存される
Javaのオブジェクトはヒープメモリに保存されるため、Stringも例外なくヒープメモリに保存されます。しかし、Stringオブジェクトの作成の仕方によって保存のされ方が異なります。

## 1. Stringリテラルを使用した場合
この方法で作成されたStringは、Stringコンスタントプール(String co

元記事を表示

[GraphQL] @oneOf ディレクティブで input 型の union を表現する

# `@oneOf` ディレクティブとは

`@oneOf` とは、 input 型が持つ field の中で、いずれか 1 つを必ず指定しなければならないことを表現するディレクティブです。

そりゃあカスタムディレクティブを頑張って実装すれば実現できるけど・・・と思ったそこのアナタ!
実はこれ、 GraphQL の公式仕様としてもうすぐマージされる予定の directive なんです。

https://github.com/graphql/graphql-spec/pull/825

もともと GraphQL には `union` があり、出力については「いずれか 1 種類だけ返す」ことを API 上で表現できていましたが、入力については表現する方法がありませんでした。
`@oneOf` ディレクティブによって、これが可能になります!

# 使用例
以下はユーザ検索 API に `@oneOf` を適用した例です。
検索条件である `FindUserCondition` を input で指定するとき、 `id` フィールドか `nameContaining` のどちらかに no

元記事を表示

いろんな言語比較してみた

# 軽く比較🍻
書いた見た目を比較するだけ。
実装内容は
– **文字列**の`配列(系のやつ)`の初期化、追加、末尾削除
– のディープコピー
– をフィルタするだけ
– をフィルタしつつ出力

を関数にして呼び出すものとします。まぁ準備運動ですね。👯‍♂️

言語は以下です。
筆者が扱える言語が少ないのでこれだけですが、おいおい増やしたいと思います。

– JavaScript
– Python
– Go
– Java
– Rust
– C++
– SQL
– zsh
– vimscript

# JavaScript
これがいちばんすき😎😎
“`js
/**
* test
*/
(() => {
// 配列
list = [“test”, “test”]
list.push(“add”)
list.pop(0)
// 配列を移す
_ = […list] // これは非破壊だがシャローコピー
_ = JSON.parse(JSON.stringify(list)) // これはディープコピー
_ = stru

元記事を表示

ABC330A~Fの解答[Java]

## はじめに
今回はFまで解けたので提出コードをそのまま載せようと思います。

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

## A – Counting Passes
問題文は[こちら](https://atcoder.jp/contests/abc330/tasks/abc330_a)

普通にfor文で受け取りながらL以上ならインクリメントする方針で解きました。
“`A.java
final class Main{
private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner(System.in);
private static final SimpleWriter out = new

元記事を表示

JJUG CCC 2023 Fall で登壇した

## はじめに
JJUG CCC 2023 Fall に登壇してきました。
エンジニアとしてのキャリアを積むために、積極的にカンファレンスに参加していますが、登壇は初です。
修士を取ったので大人数の前で発表するのは特別なことではありませんでしたが、社会人で時間が無いなか準備をするのは大変でした……

JJUG CCC については公式をご参考に。

https://ccc2023fall.java-users.jp/

以下のブログに当日の登壇資料がまとめられています。私のものも掲載していただきました、ありがとうございます。

発表内容や準備から当日の流れを簡単にまとめておきます。

## 発表内容
データベースとリポジトリのテストができる Database Rider というライブラリを紹介しました。
アジャイルで開発しているためユニットテストとテスト自動化は必須です。
なので、リポジトリのテストをするのが当たり前だと思っていたのですが、登壇中の反応や、T

元記事を表示

プログラミング言語 Go Java C# で整数カウントアップ実行時間を仲良く競う

# はじめに
プログラミング言語 Go とJava C# とで整数カウントアップの反復実行時間を仲良く競い合わせてみます。コンソール出力は意外と重い処理なので、いったん素の処理でどんなものなのか検証します。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
* @param ar

元記事を表示

gradleでMETA-INF/services generator

# Java 標準の Service Locator パターン

今は Spring などの DI コンテナが使用されることが多いですが、Java 標準でも疎結合を実現するために、インターフェースに合致するクラスを見つけるサービスロケーターパターンを実装したサービスプロバイダーフレームワークがありました。`META-INF/services/` にクラス名を記述したプロバイダ構成ファイルを配置します。現在でも、この仕組みを使用したライブラリがあります。

# gradle での設定方法

こないだ、このファイル自分で書かなあかんの? との話があったので、確認したところ、Jenkins で有名な kohsuke さんが、やっぱり? [META-INF/services generator](https://metainf-services.kohsuke.org/) っていうのを作ってました。さすが。クラスに `@MetaInfServices` アノテーションを付けることで、`META-INF/services/` にファイルが自動生成されます。でも、コピペできる gradle の設定

元記事を表示

java OutOfMemoryErrorとJProfiler

## JProfiler紹介
ej-technologies社が開発したJavaアプリケーションのパフォーマンス診断ツールです。
今度はJProfilerを使用してアプリケーションのパフォーマンスを診断してみます。
## インストール
JProfiler UI をインストールします:
https://www.ej-technologies.com/download/jprofiler/files
## JProfilerで診断
サンプルコード
“`java
public class OOMTest {

public static void main(String[] args) {
int i=0;
List list = new ArrayList<>();
String str = “OOM and GC”;
while(true) {
list.add(str);
str = str + str;
i = i++;
}
}
}
“`
実行オプション
“`
-Xms5m -X

元記事を表示

DockerでスリムなJREとMinecraftする

## Docker ってなんや
とりあえずいろいろ動くVM
LinuxだけでもなくOSから対応CPUからいろいろある

Dockerfile がmakeファイル的な位置
いろいろそろったimageファイルにデータなどを突っ込んで、あとは実行するだけにしておく
手順はキャッシュされるので同じ手順では再利用されるっぽい
image がまとめたLinuxっぽいイメージファイル 1イメージ 1アプリ 1VM的なきまり?
imageをもとにDockerfile で積み重ねることもできる
docker-compose.yaml がそれをまとめて実行する、仮想ネットワークもあるよ
app,Web,DBなど数個まとめてあと環境変数など少々追加する

image から実行すると container が作られる、一般的なファイルシステム的なものにVMを合わせた感じか

## データはどうするの
VMではない親からファイルをマウントして使う、のが一般的な感じか
他の手段で突っ込んでもいいが、VMは割と短命なこともあるので親システムのファイルなどで置いておくのがよく使われる手法

## インストール

公式に

元記事を表示

プログラミング言語 Go Java C# でHello World実行時間を仲良く競う

# はじめに
プログラミング言語 Go とJava C# とで「Hello World」コンソール出力の反復実行時間を仲良く競い合わせてみます。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
* @param args 引数
*/
public static

元記事を表示

自動テストがないアプリケーションの構造を Clean Architecture の考え方を適用しテスト可能な構造に変える方法

# はじめに
## 記事を書くきっかけ
私はJavaで書かれたパッケージソフトの保守開発をしています。その一部には自動テストが存在しないアプリケーションがあり、変更後の動作確認が大変でした。近年、「[Clean Architecture 達人に学ぶソフトウェアの構造と設計](https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88-Robert-C-Martin/dp/4048930656)」という本を読み、特に「テスト可能な構造」の部分に感銘を受けました。そして、その考え方を自動テストが存在しないアプリケーションに適用し、自動テストができるようになりました。そのノウハウを公開することにより、同じような問題を抱えている人たちの助けになればと思い、記事を書

元記事を表示

checkstyleをコマンドラインから実行し、循環的複雑度のレポートをXML形式で作成する

表題の通り、checkstyleをコマンドラインから実行し、循環的複雑度のレポートをXML形式で作成する手順を示します。

**① checkstyleのjarファイルの取得**

GitHubのcheckstyleレポジトリのリリースページからcheckstyleのjarファイルをダウンロードします。

https://github.com/checkstyle/checkstyle/releases

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/3ffb209b-8701-cb4f-3a85-7e4bf8d3a894.png)

**② 設定XMLファイルの作成**

以下のような設定XMLファイルを準備します。

“`xml:

元記事を表示

Java用語ざっくり理解(Java SEとかJDKとか)

# はじめに
Javaの環境構築でよく見かけるが意味を忘れやすい用語たちについて、情報を簡易的に整理しました。
経験者向けの記載粒度です。

# Java SE (Java Platform, Standard Edition)
[公式サイト](https://www.oracle.com/jp/java/technologies/documentation.html)

Javaプラットフォームの全体仕様。Javaというプログラミング言語の中心的な概念。
「Java 17」など呼ぶときの「Java」は「Java SE」を指すと考えれば良い。
Java SEは開発者へ提供する基本的な機能とAPIの仕様を定義している。
代表的なものは下記のとおり。
– if 文、for ループ、try-catch ブロックなどの制御構造や、クラス、インターフェース、継承、多態性などのオブジェクト指向プログラミングの概念。
– `class`キーワードや`public`キーワードといった予約語の機能
– `java.lang`や`java.util` をはじめとするコアライブラリ etc.

# JVM

元記事を表示

日本語プログラミング言語 Mind Java C# で関数を介した整数カウントアップ実行時間を仲良く競う(Mind関数形式で再計測)

# はじめに
日本語プログラミング言語 Mind とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。ただし[前回の記事](https://qiita.com/mylifewithviolin/items/4ae2e162b90db9f48281)ではMindの場合、関数で比較といっても関数形式ではない処理単語形式で実行しておりましたので、今回念のため関数形式に書き換えて再計測してみました。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
Mind Version 8.07 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行

元記事を表示

日本語プログラミング言語 なでしこ Java C# で関数を介した整数カウントアップ実行時間を仲良く競う

# はじめに
日本語プログラミング言語 なでしこ とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。なでしこワンはレガシーかもしれませんのでなでしこ3の検証を急ぎ来ます。本記事筆者のあくまで興味本位の調査で、各言語の優劣を評価するものではありませんので念のため。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
nadesiko version 1.588 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main

元記事を表示

OTHERカテゴリの最新記事