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

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

Java メモ

## Javaについて
### Java
– Javaのプログラムは、OSやハードウェアに依存しないバイトコード(中間言語)と呼ばれる抽象的なコードで表現されています。
– [公式サイト](https://www.java.com/ja/)
– [GitHub](https://github.com/topics/java)

### Apache Tomcat
– Java Servletを動かすときに必要なソフト(サーブレットコンテナ)のひとつです。

### Apache Maven
– Apache Mavenは、Java用プロジェクト管理ツールである。
– Javaプログラムをビルドするためのツールです。
– Apache Antに代わるものとして作られました。
– Apacheライセンスにて配布されているオープンソースソフトウェアです。
– [公式サイト](https://maven.apache.org/)

### JavaServlet
– サーブレットは、サーバーマシン上で実行されるJavaアプリケーションプロク

元記事を表示

【Kotlin】lambda関数の書き方

こんにちは、GxPのチョウキです。
こちらはグロースエクスパートナーズ Advent Calendar 2023の3日目の記事です。

現在、私はアプリ開発に携わっており、その過程でKotlinを使用しています。別のプロジェクトではJavaを用いていましたが、JavaからKotlinへの移行にはいくつか困難が伴います。JavaとKotlinは100%互換性があるとされていますが、一方で似ている部分と大きく異なる部分が存在します。特に、よく使われているLambda関数の観点から、Kotlinの書き方を紹介したいと思います。Lambda関数を使用する際、初見では意味が分かりにくいことがしばしばあり、それを難しく感じることがあります。そのため、この知識をまとめることにしました。

## JavaとKotlinにおけるLambda関数と高階関数の使用
Lambda関数に入る前に、高階関数から説明します。
高階関数とは、簡単に言うと、関数型をパラメータや戻り値に持つ関数を指します。
### Javaでのメソッドの扱い
Javaでは、一つのメソッド内で別のメソッドを呼び出すことは一般的です。

`

元記事を表示

【プログラミング】メソッド・型

# 0.はじめに
大学の講義でJavaを使用するため学習を始めました
自身の備忘録として投稿してます

##### 関連学習
[【プログラミング】Java用語](https://qiita.com/AkihideKato/items/13ba72a0c61eabc540c3)
[【プログラミング】メソッド・型](https://qiita.com/AkihideKato/items/753ad55b10b29f184b0f)
[【プログラミング】Java注意点・ルール](https://qiita.com/AkihideKato/items/63402744493932e9f87b)
[【プログラミング】オブジェクト指向](https://qiita.com/AkihideKato/items/3eb988a962774a409f52)
[【プログラミング】コード記述向上ポイント(個人用)](https://qiita.com/AkihideKato/items/33fd1400be6be2e25f5a)

# 1.メソッド
まとまっと処理の道具のこと
|メソッド|詳細|
|

元記事を表示

SpringBootでgRPCアプリを作成し、Auth0などでJWT認証を行う

この記事は[SRA Advent Calendar 2023](https://qiita.com/advent-calendar/2023/sra)の1日目の記事です。

こんにちは! 関西事業部の佐々木です。

# SpringBootでgRPCアプリを
RESTアプリケーションなど、SpringBootを使ってWebアプリを作るのに慣れているJava技術者は少なくないはずです。
gRPCアプリを作る時にも慣れ親しんだSpringを使いたいと思うのは自然でしょう。
SpringBootを使ってgRPCアプリケーションを作るのは簡単で、LogNetのgrpc-spring-boot-starter([https://github.com/LogNet/grpc-spring-boot-starter] (https://github.com/LogNet/grpc-spring-boot-starter)) を依存関係に追加します。

gradleなら

“`deuild.gradle
dependencies {
implementation ‘io.github.logne

元記事を表示

[Java]staticとは何なのか

初投稿です。

牛尾剛氏著の『世界一流エンジニアの思考法』を読んで光の速さで感化され、とりあえず今のプロジェクトで使っているJavaとSpring bootを徹底的に基礎から勉強しなおそうと思い立ちました。
※エンジニアとしては6年目とかですが、これまでJavaは表層をさらっと理解した程度でググりながらor他のプログラマの見よう見まねで現場を乗り越えてきたド三流エンジニアです。

まずはJava、ということで定番書でもあるEffective Java 第3版を読み始める。
読み始めてすぐ、
staticファクトリメソッドとは?という疑問にぶちあたりました。
というか、そもそもstaticって何?ちゃんと理解しているか?していない。

じゃあまずはstaticについてちゃんと理解しよう。

### staticなメンバとは
結論から言うと、「インスタンスではなくクラスに紐づくメンバ」である。

ちょうど業務でいい例があったのでそれを使って整理してみます。

この日のタスクで解消したい課題は以下の通り。
「CSVから取り込んだ値に対して、数値項目を最終的なデータ連携先のDBの桁数に合わせて

元記事を表示

【Java】Jacksonを使ってJSONを比較する

# TL;DR
– `Jackson`を使うことで、単純に文字列では比較できない`JSON`も比較できる
– 単なる一致チェックにとどまらず、柔軟な比較も可能

# やりたいこと
以下のような、期待値の`JSON`が有ったとします。

“`json:expected.json
{
“foo”: “foo”,
“bar”: 1,
“baz”: true
}
“`

一方で、`Java`上で得られる`JSON`は以下のような形式だったとします。

“`java
String actual = “{\”bar\”:1,\”baz\”:true,\”foo\”:\”foo\”}”;
“`

このような場合に、この2つが`JSON`として等しいことをテストします[^joukyou]。

[^joukyou]: 具体的には、大きな`JSON`の出力結果をテストする際に、期待値は整形済み`JSON`で管理したいが、出力は整形できないという状況で、この方法で比較を行いました。

# やり方
題の通り、`Jackson`を使ったやり方を紹介します。

`Jackson`では`re

元記事を表示

GradleプロジェクトにGitHub Packagesで公開したJarを組み込みたい

# Overview
GitHub Packagesに自作jarをアップロードしたのですが、それをGradleで作った別のプロジェクトに組み込むための手順がヒットしなかったので、今回記事としてアップしました。

イメージとしては以下の通りです。
– zoeque.hogeというgroupIdを持つ、fugaというartifactをGitHub Packagesにアップロードした
– piyoというプロジェクトでこのfugaを使いたい!

“`plantuml
header
zoeque/hogeのfugaを依存関係に含めたい
end header
package “GitHub Packages”{
package fuga {
component Module
}
}
package piyo {
component Application
}
Module -> Application
“`

# 組み込み先の設定
piyoのbuild.gradleを修正します。具体的には以下のように設定します。
“`gradle
repositories

元記事を表示

各言語の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)

# TypeScript
@takubii 様情報提供ありがとうございます!

htt

元記事を表示

プログラミング言語 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

元記事を表示

OTHERカテゴリの最新記事