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

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

Java経験者向けKotlin入門ガイド

**KotlinはJavaをベースに開発されたモダンなプログラミング言語です。Javaと完全な互換性を持ち、Android開発など多くの分野で人気が高まっています。このガイドでは、Javaの経験を活かしながら、Kotlinの基礎を学べるように解説していきます。**

# Kotlinの基本的な特徴

**簡潔性**: KotlinのコードはJavaに比べて短く、読みやすくなります。

**Null安全**: KotlinはNullPointerExceptionを防ぐための仕組みを備えており、Null安全を保証します。

**相互運用性**: Javaと完全に互換性があり、同じプロジェクト内でJavaとKotlinを共存させることが可能です。

# 基本的な構文の違い

**変数の宣言**

**Kotlinでは、変数をval(不変)またはvar(可変)で宣言します。**

Java:
“`Java
String name = “John”;
int age = 25;
“`

Kotlin:
“`Java
val name: String = “John” // 不変(変更不

元記事を表示

Java(Spring Boot)の単体テストはどのアノテーションを使えばいいか整理してみる

## はじめに
Spring Bootの単体テストを行う際、PJ先によって異なるな~と思ったので
どのテストパターン(アノテーション)で作成することが推奨されているのか整理してみました。

– 環境
– 言語:Java
– フレームワーク:Spring boot、JUnit、Mockito
– 対象
– コントローラ
– サービス
– リポジトリ

## 結論
[公式ドキュメント](https://spring.pleiades.io/spring-boot/reference/testing/spring-boot-applications.html “公式ドキュメント”)に全て書いてました。

ざっくり整理すると以下になります。
– コントローラ → @WebMvcTest
– サービス → @MockBean
– リポジトリ → @DataJpaTest

@SpringBootTestでいいのでは?とも思ったのですが、一応SpringBootTestは”統合(結合)テスト”に分類されるものなので、PJや人によっては使い分けた方がいいとい

元記事を表示

REST APIにおけるJWTベアラートークンとデバッグ方法

## REST APIにおけるJWTベアラートークンとデバッグ方法

今日のウェブ開発環境において、REST APIを保護することは開発者や組織にとって重要です。その有効な方法の一つがJSON Web Token(JWT)で、特にJWTベアラートークンが挙げられます。このコンパクトで自己完結型のトークンは、リソースへのシームレスなアクセスを可能にし、繰り返しログインすることなく情報を安全に交換するために活用されます。

本ガイドでは、JWTベアラートークンの基本概念について、構造や目的、REST APIでの実装方法に加えて、開発中に生じる問題を効果的にデバッグし、トラブルシューティングするためのツールも紹介します。JWTベアラートークンの知識とスキルを磨き、プロジェクトでの活用を目指しましょう。

![JWT Bearer(EchoAPI).png](https://assets.echoapi.com/upload/user/221631979123523584/log/d0259035-8582-4107-a933-7c078120c320.png “JWT Bearer(Echo

元記事を表示

REST APIにおけるベアラートークンとは?およびコードとツールを用いたデバッグ方法

# REST APIにおけるベアラートークンとは?およびコードとツールを用いたデバッグ方法
ベアラートークンは、REST APIのセキュリティとアクセス権限において重要な役割を果たし、認証の一形態として利用者に保護されたリソースへのアクセス許可を提供します。Web開発の世界では、ベアラートークンの仕組みを理解し、それに関連する問題を効果的にデバッグすることが、API駆動のアプリケーションのセキュリティと機能性を維持するために不可欠です。

![API.jpg](https://assets.echoapi.com/upload/user/221631979123523584/log/bf88518b-eebd-438c-a8b3-4eea37dfd8a3.jpg “EchoAPIを用いたベアラートークンのデバッグ方法”)

このガイドでは、REST APIにおけるベアラートークンの概念、その目的や実装、コードや専用ツールを使用した一般的なデバッグ手法について解説します。ベアラートークンの包括的な理解とデバッグ技術の習得により、開発者はREST APIベースのシステムの円滑な運用と完全性

元記事を表示

スレッドセーフを知って安全なアプリを安全にしよう!

## 概要
今回はスレッドセーフについて説明します。

スレッドセーフなコードは、
予期しない動作やデータの不整合を発生させないように設計されています。

本記事ではJavaを例に、スレッドセーフについて知っていただき
サンプルコードを紹介したいと思います!

## 前提知識
前提知識として、スレッド・マルチスレッドについて軽く触れます。

### スレッド・マルチスレッド
– スレッド:プログラム内で独立して実行される軽量なプロセスの一部のこと
– マルチスレッド:スレッドを複数同時に実行すること。これにより処理の効率化、高速化の実現が可能になります!

ざっと以下のようなイメージです。

![スクリーンショット 2024-11-11 1.09.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/43339498-88b9-2fe4-7829-f81d999d8893.png)

## スレッドセーフとは
いよいよスレッドセーフについて説明していきます。

:::note info
#

元記事を表示

JavaのSwitchについて

Java 17と21(LTE)で switch が大きく変わったが、意外と罠がある & うまく使うと便利なので情報をまとめてみた

## Java 17での変更

Java 17 から switch の新しい記法と switch式が導入された
従来の Java の switch文は書く分岐で処理を完了する場合、break の指定が必要だった
あえて break を使わずに条件によって複数の処理を行わせる効率的な書き方もできたが、あまり可読性は高くなく、break の指定漏れによるミスの方が多かった
そのためか、Java 以降に登場したメジャーな言語の複数分岐では基本的にそれぞれの条件が独立しているのが多かった
Java 17 から追加された switch はその流れを汲んでおり、break なしで記載することができる

“`
jshell> switch (i) {
…> case 1 -> System.out.println(“one”);
…> case 2 -> System.out.println(“two”);
…>

元記事を表示

ゼロからJavaのWebアプリを作ってRenderで公開する

# ゼロからJavaのWebアプリを作ってRenderで公開する

## はじめに

JavaでWebアプリを作って,それを公開するまでの手順をまとめてみました.

とりあえず,動かせるものを作る!という方向けです.実際に動いたのを確認した後に色々考えたりできることもあると思うので,とりあえず作る方法をまとめてみました.

## 作成手順

### 1. プロジェクトの概要を決める

まずは,どんなWebアプリを作るのかを決めます.

今回は単純なゲームを作成したかったので,とりあえず数あてゲームを作成することにしました.

### 2. プロジェクトの作成

必要なファイルを作成します.
render.comではdockerに対応しているので,Dockerfileを作成します.

“`Dockerfile
FROM openjdk:11-slim

# 作業ディレクトリを設定
WORKDIR /app

# Javaファイルをコピー
COPY Main.java /app

# Javaファイルをコンパイル
RUN javac Main.java

# ポート8080を公開
EX

元記事を表示

【Spring Boot入門】#8 削除機能を作成する

## はじめに
自身の知識のアウトプットも兼ねて、新人研修用に作成した記事となります。Spring Bootを学び始めた方を対象とした内容になっています。

更新機能の作成については、前回の記事を参照ください。

https://qiita.com/ioaio/items/1cef44733731a287b1dc

## 概要
企業情報一覧画面の「削除」リンクを押下した時に、特定の企業に関する情報を削除できるようにします。また、削除結果(成功 or エラー)が企業一覧画面へ表示されるようにします。

#### 完成イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917178/46bd6efd-4a7b-f9a3-d6ca-b2b909400601.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3917178/f7fe2571-5b9b-1412-959b-c17c15

元記事を表示

ソートを利用したアルゴリズム問題解決

### アルゴリズムの主要なプロセス

1. **2進数の1の個数を数える**:
– 与えられた配列 `nums` の各整数について、その数を2進数に変換したときの1の個数を数えます。
– `cur` 変数を用いて各整数を2進数に変換し、ループを通して1の個数(`cnt`)をカウントします。

2. **優先度キューに追加**:
– 各整数(`num`)とその数の1の個数(`cnt`)を `Node` オブジェクトとして作成し、優先度キュー `pq` に追加します。
– `PriorityQueue` は `Node` オブジェクトの `compareTo` メソッドを使用してソートされます。`compareTo` メソッドは次の基準に従ってノードをソートします:
– 1の個数(`cnt`)が少ない順に昇順でソート。
– 1の個数が同じ場合は、整数の値(`val`)が小さい順にソート。

3. **ソート結果を配列として返す**:
– 優先度キューからノードを一つずつ取り出し、`answer` 配列に格納します。

元記事を表示

最近のレビュー指摘の備忘録1(Java系)

## 0.背景
最近レビュー指摘で言われたよく忘れることをメモします。
3つほどあります。

## 1.Javaにおいてのloggerによるログ出力

以下のように、メッセージと一覧として記載することが多かったのですが、
“`java:test1.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

void Test1()
{
protected final static Logger logger = LoggerFactory.getLogger(LogUtils.class);

String str= null;
int length = 0;
try
{
length = str.length();
logger.info(“OK”);
}
// 指摘該当箇所
catch (NullPointerException e)
{
e.printStackTrace();

元記事を表示

java初学者の学習メモ-Part2-

## 概要
今回はjavaで基礎学習用のコードを書いてみました。
これから少しずつjavaの学習記録を残してまいります。
学習のメモ程度に記述していますのでご承知ください。

## 実行環境
・windows:Windows11Pro 23H2
・java:22.0.1
・統合開発環境:Eclipse

## ソースコード
“`Sample.java
package helloworld;

public class Sample {

public static void main(String[] args) {
int item_num;
final int NOT_SET = 0;
Ref ref = new Ref();
ref.set_item_num();
item_num =ref.get_item_num();
if (item_num != NOT_SET) {
System.out.println(“item_num >>>” + item_num);
}else {
System.out.println(“item_n

元記事を表示

JVMを意図的にクラッシュさせる方法

# はじめに
「JVMをクラッシュさせるとしたらどんな手段を取りますか?」

この質問に答えることができるでしょうか?私はできませんでした。
私は業務でJavaを利用し始めておよそ5年以上経過します。毎日使っているプログラミング言語の仮想マシンのことなので、これはエンジニアとして知っておくべきだなあと思い、色々試してみました。その過程と結果を記事にまとめます。

# Unsafeクラスを使って不正なメモリアクセスを実行
ピュアJavaでJVMクラッシュを再現する場合、sun.misc.Unsafeクラスを使って不正なメモリ操作を実行することでクラッシュが可能です。
“`java
import sun.misc.Unsafe;

public class CrashUnsafe {
public static void main(String[] args) throws Exception {
var field = Unsafe.class.getDeclaredField(“theUnsafe”);
field.setAccessible(true)

元記事を表示

休憩催促通知機能を作ってみた

# 休憩催促通知

## ・はじめに
日常生活の中で仕事や家で長時間PCと睨めっこをしている人は多いだろう。長時間画面を見続けると目も疲れるし体もずっと固定されたままなので疲労が溜まり生活に支障が出てしまう。そこで私は長時間使用し続けると休憩の催促がくる機能を作成した。

## 実行画面ショット
![chacha.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3658530/a60a6a48-edfc-9b6c-ab3e-6a97de381b00.png)

## ・構成

このプロジェクトは2つのJavaファイルから構成される。

1. **sendNotification.java**: 通知を表示するためのクラス。
2. **timerPreference.java**: 指定された時間後に通知表示を発火するクラス。

## ・ファイル説明

### sendNotification.java

主な機能

– **notificationDisplay()**:
– システムトレイに

元記事を表示

Project Wakefieldをビルドしてみる

[前回の記事](https://qiita.com/hatano/items/aac635d6ef2f5af4e84f)ではSDKMAN!を用いてJetBrans Runtimeでjdk21を選択するとWLToolkitで動かすことができるという話をしました。

今回は実際にWakefieldのリポジトリからWLToolkitをビルドする手順をまとめました。Ubuntuでの手順になります。

まず[wakefieldのリポジトリ](https://github.com/openjdk/wakefield)をクローンしてきます。

“`
% git clone https://github.com/openjdk/wakefield.git
“`

ブランチとして[jdk21.0.1-wayland](https://github.com/openjdk/wakefield/tree/jdk21.0.1-wayland)を選択します。

“`
% git checkout -b jdk21.0.1-wayland origin/jdk21.0.1-wayland
“`

この状態

元記事を表示

java初学者の学習メモ~Swingのインストール~

## 概要
今回はjava Swingのインストールをみました。
これから少しずつjavaの学習記録を残してまいります。
学習のメモ程度に記述していますのでご承知ください。

## 実行環境
・windows:Windows11Pro 23H2
・java:22.0.1
・統合開発環境:Eclipse

## インストール
以下の記事を参考にEclipseからインストールしました。

https://oomilkywayoo.com/java-eclipse%E3%81%A7swing%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

## 実行スクリプト
“`sample.java
package helloworld;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.bord

元記事を表示

【Selenium】SpringBootで作成したアプリケーションの結合テスト

JUnitを使用した単体テスト書く経験は何回かありましたが、先日Seleniumを使用した結合テストを行ったので、要点をまとめたいと思います。

## Seleniumとは

Seleniumは、Webアプリケーションをテストするためのフレームワーク。
Java以外にもC#、Groovy、Perl、PHP、Python、Ruby、Scalaなどにも対応している。
pom.xmlのdependencyに追記することで、Javaからブラウザを使った結合テストを行うことができる。

## 環境

– macOS Sonoma 14.6.1
– Java 17
– Spring-Boot 3.3.3
– selenium-java 4.24.0
– webdrivermanager 5.9.2
– Thymeleaf
– Maven
– ChromeDriver

## 実際にやってみた

簡単なWebアプリケーションを作成して試してみました。

#### Controller/Repository

importは省略します

“`java:SeleniumRepository

@Re

元記事を表示

Sentryでエラーをモダンに確認しよう!

## Sentryとは?
Sentryはエラーモニタリングツールになります!

アプリケーションのエラーや例外をリアルタイムで検出し、
詳細な情報を収集・表示するためのツールです。

## Sentryを導入するといいこと
Sentryを導入することで、以下の利点があります:

:::note info
### Sentryの利点
– リアルタイムなエラー検知:エラー発生後通知を受け取り、早期対応が可能
– エラーレポート可視化:スタックトレース等、エラーが発生した状況をすぐに把握可能
– 頻度やユーザー影響の確認:エラーの回数、どのユーザーに影響があったのかを確認することができ、優先度を決めやすくなります!
:::

## Sentryの導入方法(Spring Boot)
今回はSpring Bootのプロジェクトを例に、導入をしてみます。

### 1. Sentryの新規登録
下記からSentryの公式から新規登録をしてください!
個人開発レベルであれば、課金は不要かと個人的に思います。

https://sentry.io/signup/

#### 新規登録

公式ページ

元記事を表示

SpringBootでschema.sqlに書いた初期化用SQLが実行されない

## 状況
schema.sqlの内容
“` sql
–テーブル作成などのSQLを記述する用のファイル
CREATE TABLE IF NOT EXISTS tasklist (
id VARCHAR(8) PRIMARY KEY,
task VARCHAR(256),
deadline VARCHAR(10),
done BOOLEAN
);
“`

## 解決方法
application.propertiesの設定が間違ってました
どうやら参考にしていた学習書に記載されていた設定方式が古かったらしい、、
springboot2.5以降で記載形式が変わった模様
“` properties
#修正前
spring.datasource.initialization-mode=always
#修正後
spring.sql.init.mode=always
“`

元記事を表示

Java Gold ラムダ式(関数)について

# ラムダ式とは何か
ラムダ式は、匿名関数(名前を持たない関数)を簡潔に表現するための構文です。従来、匿名クラスを使用して記述していたコードを、よりシンプルに書くことができます。これにより、コードの可読性が向上し、開発効率もアップします。

例:匿名クラスとラムダ式の比較

“`java
// 匿名クラスを使用
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(“Hello, World!”);
}
};

// ラムダ式を使用
Runnable runnable = () -> System.out.println(“Hello, World!”);
“`
# ラムダ式の基本構文
ラムダ式の基本的な構文は以下のとおりです。

“`rust
(引数リスト) -> { 処理内容 }
“`

引数リスト:関数が受け取る引数をカンマで区切って列挙します。
矢印演算子(->):ラムダ式であることを示します。
処理内容:メソッ

元記事を表示

SQLの変数チェック

“`VarCheck.java
package varCheck;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class VarCheck {
private List listKey =new ArrayList();
private List data=new ArrayList();
private List listVar=new ArrayList();
private Set set1=new TreeSet();
private Set

元記事を表示

OTHERカテゴリの最新記事