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

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

クラスの継承の関係について

クラスの継承について誤っておぼえてたので間違いの履歴として残す。
スーパークラスを継承したら、スーパークラスの内容をメソッドなどを使かえるようになったBのクラスだと思っていた。

しかし、実際は

インスタンスがA型の場合はBのクラスであってもAのメソッドしか使えない。
A型で宣言したものは使用できるのがAクラスで定義されたメソッドのみに限定される。

“`java
public class A{
public void hello(){
System.out.println(“hello”);
}
}

public class B extends A{
public void sample(){

System.out.println(“sample”);
}
}

public class Main{
public static void (String[] args){

A a = new B();
a.samle(); //Aクラスには存在しないのでコンパイルエラー
}

}
“`

元記事を表示

【ほぼブログ】これまで手続き型プログラミングしかしたことなかった人間が、初めてオブジェクト指向の温かみに触れた話

この記事は、「C3 Advent Calendar 2023」18日目の記事です。

# 目次
1. プロローグ
2. はじめてのオブジェクト指向言語
3. オブジェクト指向を触って、改めてc言語と向き合って
4. エピローグ

# 1. プロローグ
 どうも、わんたんです。
 大学に編入してから、はや8ヶ月となりました。福岡の地にも慣れてきて、あとは就職(卒業)まで余生を謳歌する終活人間になりつつあります。あと、最近忙しかったり、入学時より人間関係がディープになってきてるのもあって、今年度初めほどいろんな場所や人に顔を出せていない状態が続いてます。あの人元気かな…とDiscordを眺める日々…。

 さて、そんなことはまた別の機会に話すとして、今回は技術的な話をひとつ…

# 2. はじめてのオブジェクト指向言語
 立てばカラオケ、座ればゲーム。歩く姿はGeoGuessr。カラオケやゲームは芍薬や牡丹ほど美しい趣味ではありませんが、ギャンブルとかタバコとかよりはマシな気がします。ところで、芍薬や百合にはちょっと不吉な花言葉があります。美しいものの代名詞にネガティブな花言

元記事を表示

HTTP message body(POST、PUT、PATCHなど)のリクエストパラメータ照会

## HTTP message body
– HTTP API で主に使用する。
– データ形式は**JSON(主に使用)**、XML、TEXT などがある。
– **@RequestParam, @ModelAttributeを使用することができない。**
– ただし、HTML Form形式で配信される場合は、Request パラメータとして認められる。
– **@RequestBody(最も推薦)** を使ってできる。
– HTTP message body 情報を便利に照会することができる。
– 自分で作ったオブジェクトを指定することもできる。
– HTTP message converterがHTTP message bodyの内容を私たちが望む文字やオブジェクトなどに変換してくれる。
– **@RequestParam、@ModelAttributeと違って省略してはならない。**
(省略すると@ModelAttributeが適用される。)

## データ形式がJSONの場合
![Untitled (4).png](https://qiita-image-store.

元記事を表示

Query Parameter (GET) と HTML Form (POST) のリクエストパラメータ照会

– @ModelAttribute(最も推薦)、@RequestParam、request.getParameter()を使用してRequestパラメータを照会することができる。

## @ModelAttribute
– オブジェクトを生成し、リクエストパラメータをオブジェクトに自動的に設定してくれる。
– Typeが合わないとBindExceptionが発生する。

“`java
@RequestMapping(“/model-attribute”)
// @ModelAttributeは省略できる。
// public String modelAttributeV1(@ModelAttribute HelloData helloData) {
public String modelAttributeV1(HelloData helloData) {
log.info(“username={}, age={}”, helloData.getUsername(), helloData.getAge());
log.info(“helloData={}”, h

元記事を表示

クライアントからサーバーにリクエストデータを転送する際に主に使用する方法

1. Query Parameter (GET)
> localhost:8080/hello?**username=ABC&age=10**
– **MessageBodyなしで**、URLのクエリパラメータにデータを含めて伝達する。
– 検索、フィルター、ページングなどで多く使用する。

2. HTML Form (POST)
“`html



전송

“`
– 会員登録、商品注文のようにHTML Formを書く場合に使用する。
– HTTPメッセージボディにGETのようなクエリパラメータ形式で伝達する。
– POST HTML Form形式でデータを伝送する形式をapplication/

元記事を表示

【VSCode+SpringBoot】SpringBootでAPIを作る⑥

前回↓

https://qiita.com/NaN-jp/items/59c2a1e37114b4ec44de

# はじめに
今回は`Repository`を作っていきます
### Repository作成
`Repository`はデータアクセスを抽象化し、オブジェクトの集合へ格納・取得・検索するかのような振る舞いを提供します
demo直下に`repository`フォルダを作成してその中に`PersonRepository.java`を作成します
“`java:src/main/java/com/example/demo/repository/PersonRepository.java
package com.example.springbootpostgresql.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.springbootpo

元記事を表示

リクエストのヘッダー値、デフォルト値の照会

– AnnotationベースのSpring ControllerはSpringがサポートする様々なパラメータを使用することができる。
– @Controllerの使用可能なパラメータリストは、以下のマニュアルで確認できる。
https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/arguments.html
“`java
@RestController
public class RequestHeaderController {

@RequestMapping(“/headers”)
public String headers(HttpServletRequest request,
HttpServletResponse response,
HttpMethod httpM

元記事を表示

JavaParserを利用して、javaファイルをパースした際に、メソッド宣言された行の行番号を取得する

# 結論

JavaParserを利用して、javaファイルをパースした際に、メソッド宣言された行の行番号を取得するには、MethodDeclarationクラスのgetBeginメソッドを利用します。

ここで注意すべきは、getBeginで取得できる行番号はメソッドアノテーションを含むということです。たとえば、以下のようなメソッド宣言がある場合、getBeginで取得できる行番号はmethodXが記載されている行ではなく、`@Override`が記載されている行になります。

“`java
@Override
public void methodX(){…}
“`

# 例

以下のようなファイルがあるとします。

“`java:XXX.java
package path.to.example;

public class XXX {
public void methodA() {
// …
}

@Override
public boolean equals(Object obj) {
ret

元記事を表示

JavaのコンテナイメージにAlpineを使ったらどん詰まった話

# Javaを動かすコンテナイメージ

色々ありますよね。
まずOpenJDKがいくつかあって、それぞれが各ディストリビューションのJDKだったりJREだったりを出してます。

* [OpenJDK](https://hub.docker.com/_/openjdk) (今見たらDeprecatedなんですね…)
* [Amazon Corretto](https://hub.docker.com/_/amazoncorretto)
* [Eclipse Temurin](https://hub.docker.com/_/eclipse-temurin)

など

あとはGoogleが出してるDistrolessもJava用のイメージがありますね。
* [Distroless/Java](https://github.com/GoogleContainerTools/distroless/tree/main/java)

個人的にはEclipse Temurinがなんとなく好きで、Alpine Linuxが軽量なのは知っていたので、AlpineベースのJREイメージを安易に利用していま

元記事を表示

JSP(Java Server Pages)が令和時代のWebサービス開発に向いていない話

# はじめに
Happy Holidays!
今年はとあるプラットフォームチームで大規模サービス[^1]をパブリッククラウドに移行するため、気の遠くなる一連の改修、設計、テストをしていました。クラウドネイティブに進むためクラウドネイティブの真逆な地獄の日々を送っていましたが、ある程度本番リリースがある程度できて一安心な冬を過ごしています。[^2]
[^1]: 20年以上使われていますが詳しくは秘密です
[^2]: まだ本番リリース物は残っていて2024年最初の3ヶ月くらい詰まっています。1年かけても終わらない

その一環でJSPはこれ以上使わなくていいかなあと思ったので、年末のまとめにアドベントカレンダーに参加することにしました。

# お断り

この記事はJSPが最早Webサービスの現場にフィット[^3]しない部分が多いという、実務の話です。JSP自体のアーキテクチャを否定する意向がないことを踏まえてお読みください。
この記事ではJenkins自体も否定はしていません。個人的には安定性や互換性もしっかりしており評価はできますが、Webサービス開発ではGitHub ActionなどのC

元記事を表示

自社のデータ収集システムが驚くほどコンパクトになった話

# はじめに
こんにちは。オークファンのエンジニアで、今年の10月からマネージャー(仮)になった@tmotです。マネージメントという新しいフィールドにも挑戦し始めているこの頃です。

マネージメントとは関係ないですが、自社のデータ収集システムの改修に結構苦労したので、今回はその話をしたいと思います。

# バッチに問題発生
今年の初めあたりから、弊社で長らく使われていたデータ収集システムが、ときどきOutOfMemoryErrorで失敗するようになってしまいました。
弊社サービスで提供しているデータの根幹となるバッチであり、このエラーを放置していると弊社サービスの大部分に影響を及ぼすため、早急な対応が求められました。

## バッチの詳細
データを収集し、Elasticsearchに保存するバッチです。データをなるべく漏れなく取得するため、1日2回実行しています。
AWS EC2インスタンス(`i3.4xlarge`)上で稼働しており、実行環境はJava11です。

# 暫定対応
まずはバッチを継続して動かしておくことが最優先なので、以下の暫定対応を施しました。
– 割り当てるJVMメ

元記事を表示

Spring Boot 3.1系で単体テストをやってみた

# はじめに
今回はSpringBoot3.1におけるモック化を含めた単体テストを実装してみたいと思います。プロジェクトの作成から始めるので、
* これからSpring Bootで開発するよ
* 単体テストを初めて実装するよ

という方のご参考になれば幸いです。

## 環境
### 実行環境
Windows+WSL2
IntelliJ IDEA 2023.2.5

### バージョン情報
| ソフトウェア | バージョン |
| — | — |
| Java | 21|
| Spring Boot | 3.1.5 |
| Gradle | 8.4 |
| JUnit | 5 |
| mokito | 5.6.0 |

# 事前準備
## プロジェクト作成・ロード
[Spring Initializr](https://start.spring.io/)を使います。
今回はJava21とSpring Boot 3、Gradleを用いて開発します。
以下の通りに入力してGENERATEをクリックし、DLしたファイルを解凍します。
![spring_initializr.

元記事を表示

【VSCode+SpringBoot】SpringBootでAPIを作る⑤

前回↓

https://qiita.com/NaN-jp/items/ca04be9e34732d1204c9

# はじめに
今回はControllerを作成していく

### Controller作成
`Model`と`View`を操作する`Controller`を作成していきます
demo直下にcontrollerフォルダを作成してその中に`PersonController.java`を作成します
“`java:src/main/java/com/example/demo/controller/PersonController.java
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind

元記事を表示

Ajaxというのを業務で経験したので勉強

# 目次

[1. Ajaxとは](#ajaxとは)
[2. 今回の勉強用アプリについて](#今回の勉強用アプリについて)
[3. Ajax使用箇所解説](#ajax使用箇所解説)
[4. 終わりに](#終わりに)

# Ajaxとは
Asynchronous JavaScript and XML の造語?

## Asynchronous
「非同期」という意味

同期
・【リクエスト→処理A開始→処理A終了→処理B開始→処理B終了→レスポンス】のように順番にプログラムを処理する。
・「ECサイトで商品を購入確定後、在庫状況を更新する」ような処理
非同期
・【リクエスト→処理A→処理B→レスポンス】の順番で動くアプリだけど、【処理A→処理C】も別で実行させる
・「ECサイトで商品を購入確定後、在庫状況を更新するのと並行して、配送作業を行う」ような処理

## JavaScript

ブラウザ上で動作するスクリプ

元記事を表示

【後編】Javaでオブジェクト指向を学びなおす

前回の続きです!
継承、ポリモーフィズム編になります!

https://qiita.com/suda_imagitech/items/d9f3fc3327d306a0d8ec

# 1.継承(Inheritance)について
>継承は、既存のクラスから新しいクラスを作成する仕組みです。新しいクラスは既存のクラスの特性(データやメソッド)を継承し、必要に応じて追加や変更ができます。

これは覚えてるぞー
だけどしっかりコード化しよう

“`java:java
// 親クラス(スーパークラス)
class Person {
String name;

public Person(String name) {
this.name = name;
}

public void eat() {
System.out.println(name + “は食事している”);
}

public void sleep() {
System.out.println(name + “は寝ている”);

元記事を表示

【VSCode+SpringBoot】SpringBootでAPIを作る④

前回↓

https://qiita.com/NaN-jp/items/ff35d79be65edc13dc8c

# はじめに
今回は前回に引き続きMVCモデルのViewを作成していく

### View作成
ユーザーが触れる画面になるViewを作成していきます
`templates`直下に`index.html`を作成する
“`java:src/main/resources/templates/index.html



View


元記事を表示

Spring bootでHelloWorldするまでの手順

:::note warn
Eclipseのインストールが完了してから読むことをオススメします。
↓↓↓ インストール先はこちら
[Eclipse Downloads|The Eclipse Foundation](https://www.eclipse.org/downloads/)
:::

## はじめに
* EclipseにSpring bootをインストールする手順とHelloWorldするまでの手順をまとめました。
* 画像多めの構成です。

## この記事の目的
* インストールから正常な環境構築ができているかの確認まで終えられるようにする。
* 今後自分で再度インストールする機会が訪れた時の手順再確認用。

# そもそも“Spring boot”とは
* アプリケーションを手軽に作成するためのフレームワーク(**枠組み・ひな形**)の集合体である**Spring Framework**に搭載のされているものの一つ。
* 集合体である機能を使いやすくするためのもの。

# HelloWorldとスモールスタート
* **環境が正しく構築できてるか**を確認することも重要な作

元記事を表示

【VSCode+SpringBoot】SpringBootでAPIを作る③

前回↓

https://qiita.com/NaN-jp/items/61faa709dac6e000eea7

# はじめに
今回からSpringBootの実装に入る
まずはMVCモデルのひとつであるModelの作成

#### 📚そもそもMVCモデルとは??
MVCモデルとはコードを管理する上で便利な**Model,View,Controller**の3つの頭文字をとった概念である。

### Model作成
まず部品であるModelを作成していきます
demo内にmodelフォルダを作成してその中に`Person.java`を作成します
“`java:src/main/java/com/example/demo/model/Person.java
package com.example.demo.model;

import jakarta.persistance.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persis

元記事を表示

(初心者用)Junit備忘録

# はじめに
単体試験をがっつりJunitで行う現場に初めて入り、
今まで「Junit」という名前しか聞いたことのなかった私が
日々アワアワしながらテストコードを書いていた時に知ったJunitに関する備忘録+陥ったことの紹介です。
なので初心者向けだと思いますが、Junitって何?とか設定とか基本的な書き方とかそこらへんは調べたら山のように出てくると思うのであまり丁寧に書きません。

# 環境と依存関係
Junit : Junit5
IDE : Eclipse
Java : 8

ユニットテストでモックするフレームワークとしてMockitoを使用しており
Mavenでプロジェクト作成していたのでpom.xmlに依存関係追記しています。
(ここは環境に合わせてご自由に)

“`xml:pom.xml


org.mockito
mockito-all
1.10.19

元記事を表示

Javaで実現するUUID v7:時刻順序を考慮したユニーク識別子

この記事は[グロースエクスパートナーズ アドベントカレンダー2023](https://qiita.com/advent-calendar/2023/gxp)の13日目の記事です。
今年は2023年新卒入社の方などの投稿で盛り上がり、シリーズ2もつくられました。シリーズ2にふさわしい、簡単に読めて役立つ記事をお届けしたい所存です。

# はじめに

UUID v7を試してみよう

この記事では時間順序を持ち、ランダム性も備えたUUID v7を紹介するとともに、JavaでのUUID v7の生成とUUID v7からタイムスタンプを取得する実装も紹介します。

## 要約
* UUID v4をRDBのプリマリーキーとして用いると、B-Treeインデックスの断片化や挿入処理遅延の懸念がある
* 解決策としてUUID v7が提案されている
* JavaにもUUID v7を生成するライブラリがあり利用可能になっている
* 生成したUUID v7の値からタイムスタンプが取得できる

# UUID v4の課題
ユニークな値が欲しいとき、UUIDが真っ先に浮かぶという方は多いと思います。
下記のような文

元記事を表示

OTHERカテゴリの最新記事