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

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

@ConfigurationPropertiesを使用した内部クラスの問題記録

私たちはよく@ConfigurationPropertiesを使ってカスタム設定を注入しますが、設定ルールが複雑な場合、複数のクラスを定義して設定をマッピングする必要があることがあります。このとき、これらのクラスを単独で定義するか、内部クラスとして定義するかという問題に直面します。

私は内部クラスを使用することを選びました。**理由は、管理とメンテナンスが容易だからです。**

内部クラスの方法を使用しているときに、設定が注入できないという問題が発生しました。ネットで色々と調べましたが、うまくいきませんでした。その後、Datasourceの設定が比較的複雑な設定であることを思い出し、どのように実装されているかを確認しました。**すると、このような方法で定義する場合、内部クラスをpublic staticとして定義する必要があることが分かりました。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809422/4bded3de-dcc9-cc11-5f5e-831054986f99

元記事を表示

競技プログラミング練習 ビット全探索(Java)

競技プログラミングで必要になったので、ビット全探索のシンプルな演習をしてみた。

“`java:ビット全探索練習

class Main {

public static void main(String[] args) {

// 集合{a,b,c}の部分集合を列挙する

String[] s= {“a”,”b”,”c”};

//要素数
int n=3;

//2^nパターンを探索
for(int i=0 ;i< (1<>j)==1) sub += s[j];

}
System.out.println(“{“+sub+”}”);

元記事を表示

Java リフレクション

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

# リフレクション

**リフレクション**は、クラス、メソッド、フィールドなどの**実行時**の情報を動的に取得したり操作したりする機能のことを指す。

リフレクションを使用することで、プログラムの実行時にクラスやオブジェクトのメタデータを取得し、メソッドの呼び出し、フィールドへのアクセス、インスタンスの生成などを行うことができる。

また、リフレクションを利用することでアノテーション情報を取得することができる。

実際にリフレクションを利用するには`java.lang.reflect`パッケージを使用する。

https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/lang/reflect/package-summary.html

## `Class`

`java.lang.Class`クラスは、クラスが持つメタデータを表す。

リフレクションを利用して`Class`オブジェクト取得する方法にはいくつかのバリエーションがあり、取得した`Class

元記事を表示

Java プロパティファイル

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

# プロパティファイル

アプリケーションの設定情報を、外部ファイルとしてアプリケーションと分離させることでコードのコンパイルやアプリケーションのビルドをせずに挙動を変える手法がある。このときの外部ファイルを**プロパティファイル**と言う。

プロパティファイルの実体は、キーバリュー形式で値を保持する単なる**テキストファイル**である。このファイルの拡張子は通常 `.properties` とする。`settings.properties`や`config.properties`というファイル名が多く使用される。

キーとバリューは以下のように記述する。`=`と`:`を利用することができる。

“`text:config.properties
password=hello
database.password=world
database.username:suzuki
“`

プロパティファイルを扱うためには[`Properties`](#properties)クラスか[`ResourceBundle`](#resourcebu

元記事を表示

Javaで「可変引数」の動作を確認してみた

# 概要

Javaで「可変引数」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index9.html

# 実装

以下のファイルを作成しました。
“`JSample9_1.java
class JSample9_1{
public static void main(String args[]){
System.out.println(sum(4, 10));
System.out.println(sum(7, 2, 8));
System.out.println(sum());
}

private static int sum(int… nums){
int sum = 0;

for (int i = 0; i < nums.length; i++){ sum += nums[i]; } return sum; } } ``` 以下のコマンドを実行しました。 ``` $ javac JSampl

元記事を表示

変数・値・参照・代入

# これは何?

変数ってなに? という話。
値なのか、参照なのか、代入したらどうなるのか、とか。そのあたり。

# いくつかの言語の事例

いくつかの言語の事例を書いてみる。

## C言語の場合

C 言語の変数は(概念としては)型が付与された一連のメモリである。この文脈ではオブジェクトと言ってもいい。
変数の型が決まれば、バイト数が決まる。

オブジェクトの正体は、構造体かもしれないし、ポインタかもしれない。

「概念としては」と書いたのは、コンパイルの結果その変数自体が消滅したり、いろいろあり得るから。

C言語では、同じ「一連のメモリ」を別の変数が直接指すということはできない。そうしたければポインタを使う。
あるいは `union` を使えば異なるメンバが同じ「一連のメモリ」を指すことが出来る。

Pascal なんかも同じだと思う。

“`C:C
a=b;
“`

という代入文は、暗黙の型変換が入らない場合「b が指す一連のメモリを a が指す一連のメモリにコピーする」という意味になる。
つまり、代入が行われても依然として a は b と別のもの(アドレスが異なる)であ

元記事を表示

AOP思想、動的プロキシ、Spring AOPの三者の関係

**基本的な概念については繰り返し説明しません。疑問がある方は、以下のリンクをご参照ください**:https://yo1000.gitbooks.io/self-study-spring/content/chapter7.html

## 1.AOP思想、動的プロキシ、Spring AOPの三者の関係
![未命名文件 (8).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809422/6c9e2a0b-4d32-7139-8f4d-df56c23189a9.jpeg)

:::note info
Spring AOP の実装は、主に動的プロキシを使用してアスペクト指向プログラミングを実現します。インターフェースに基づく場合、Spring AOP は JDK の動的プロキシを使用してプロキシオブジェクトを作成します。一方、クラスに基づく場合には、CGLIB 動的プロキシ(コード生成ライブラリ)を使用してプロキシオブジェクトを作成します。

具体的には:

JDK 動的プロキシ:対象オブジェクトが1つ以上

元記事を表示

Javaで「メソッドのオーバーロード」の動作を確認してみた

# 概要

Javaで「メソッドのオーバーロード」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/method/index8.html

# 実装

以下のファイルを作成しました。
“`JSample8_1.java
class JSample8_1{
public static void main(String args[]){
System.out.println(plus(10, 7));
System.out.println(plus(3.2, 4));
System.out.println(plus(7, 1.223));
System.out.println(plus(5.08, 2.4));
}

private static int plus(int n1, int n2){
System.out.println(“int + int”);
return n1 + n2;
}

private static double pl

元記事を表示

Sliding Window アルゴリズムを利用した問題解決

## LeetCode
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824062/2916d7f2-414e-ad35-e982-f90b651560e0.png)

https://leetcode.com/problems/longest-substring-without-repeating-characters/

#### 目的
与えられた文字列において、重複する文字がない最長部分文字列の長さを求めるアルゴリズムを改善します。このためにスライディングウィンドウ手法を使用します。

#### 初期コードの問題点
初期コードでは、重複する文字が見つかるたびに`left`ポインタを重複する文字が位置するインデックスの次の位置に移動させる方式で最長部分文字列を計算しています。しかし、この過程で`left`ポインタが非効率的に移動する可能性があります。

#### 改善されたアルゴリズム
改善されたアルゴリズムは、重複する文字が見つかった場合、`left`ポインタを一度にジャンプさ

元記事を表示

No.13 定数

**【動画URL】** https://youtu.be/00kl-vDQNuU?feature=shared

◆上書きできない変数のこと

◆finalをつける

◆慣例として以下がある
・すべて大文字
・複合文字の場合は区切りをアンダースコア “_” で結合

<使用例>
![](https://storage.googleapis.com/zenn-user-upload/9c231c32f9da-20231009.png)

まとめてご覧になりたいあなたは
https://zenn.dev/codek2/books/63c880c460c21e

詳しく学びたいあなたは
https://zenn.dev/codek2/articles/e9e44f3e0023fb

Youtube
https://youtube.com/@codek2_studio?feature=shared

Twitter
[https://twitter.com/kunchan2_](https://twitter.com/kunchan2_)

元記事を表示

[備忘録 その7] Java Silver ~基本データ型の型変換~

# 基本データ型の型変換(キャスト)
基本データ型の型変換は、プログラム内でのデータ型を変更するための操作です。Javaでは、データ型の変換には2つの主要な方法があります。
1 \. 暗黙的型変換(自動型変換) 
2 \. 明示的型変換(キャスト)

## 1 \. 暗黙的型変換(自動型変換)
暗黙的型変換は、コンパイラが自動的に行う変換で、変換先の型が変換元の偏りも広い(より大きな範囲を持つ)場合に適用されます。例えば’int’型の値を’long’型の変数に代入する場合などです。

“`java
public class Main {
public static void main(String[] args) {
int intValue = 100;
long longValue = intValue; // intからlongへの自動型変換
System.out.println(“Long value: ” + longValue); // Long value: 100
}
}
“`
この例では、intか

元記事を表示

[備忘録 その6] Java Silver ~文字列の取り扱いとデータの比較~

# 文字列の取り扱い
## Stringクラス
‘String’クラスは、変化不可(イミュータブル)な文字列を表します。一度作成された’String’オブジェクトの内容は変更できません。文字列操作を行うと、新しい’String’オブジェクトが生成されます。

### 特徴
* イミュータブル(不変)
* スレッドセーフ
* 文字列リテラル’String’オブジェクトとして作成される

“`java
public class Main {
public static void main(String[] args) {
// 文字列の作成
String str1 = “Hello”;
String str2 = “World”;

// 文字列の連結
String str3 = str1 + ” ” + str2;
System.out.println(str3); // Hello World

// 文字列の長さ

元記事を表示

これから始める Semantic Kernel【2024年7月版】

# はじめに

Semantic Kernel は GPT などの AI モデルの呼び出しと C# や Java, Python のコードを統合して使用することができる Microsoft 製のオープンソース SDK です。2023年4月にプレビューを開始し、12月には Version 1.0.1 として正式リリースされました。そして7ヶ月が経過した2024年7月の現時点で Version 1.15.x がリリースされていることからもわかる通り、非常に早いペースで機能追加・改善が進んでいます。

Semantic Kernel が目指す方向性は当初から何も変わっていませんが、正式リリースからまだ1年も経っていないにも関わらず2024年2,3月頃から概念が大きく変わってしまいました。MS Learn もその新しい概念に合わせるように少しずつ更新されていましたが、2024年6月末頃、ようやく完全に対応したバージョンとなりました。そのため、「Semantic Kernel」で Web 検索して表示されるブログなどの情報と、 MS Learn で説明している内容が異なってしまっており混乱の元と

元記事を表示

Java ローカライズ

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

# ローカライズとは
localize

アプリケーションを異なる国、地域に対応させるプロセスを**ローカライズ**、または **i18n** と言う。

i18n は、internationalization の **i** と **n** の間の文字数が **18** 文字であることに由来する用語。

ローカライズの対象には以下のものが含まれる。

– 言語
– 日付の表示形式
– 時刻の表示形式
– 暦の表示形式
– 通貨の表示形式

# `Locale`
locale = (物語の)舞台、現場、場所
locale ≠ local

ソフトウェアにおける言語、国、地域などの設定のことを**ロケール**(locale)と呼ぶ。(最初 local だと思っていた。。。)

ロケールは単に「国」のことではなく、例えば英語とフランス語が公用語とされているカナダのようにおいては、「カナダで英語を使用する地域」と「カナダでフランス語を使用する地域」などがロケールに相当する。

Javaでは`java.util.Local`クラスがロケール

元記事を表示

[備忘録 その5] Java Silver ~演算子~

# 演算子
演算子は、プログラミングにおいて変数や値に対して操作を行うため記号やキーワードです。javaでは、多くの種類の演算子が提供されている。

演算子の優先度と結合規則

Javaで「return文」の動作を確認してみた

# 概要

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

https://www.javadrive.jp/start/method/index7.html

# 実装

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

test(15, 4);
test(7, 0);
}

private static void test(int n1, int n2){
if (n2 == 0){
System.out.println(“0で割ることはできません”);
return;
}

System.out.println(n1 + ” / ” + n2 + ” = ” + (n1 / n2));
return;
}
}
“`

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

Nablarch 6のRESTfulウェブサービスのExampleで開発中に再デプロイしたい

# What’s?

タイトルとおりで、Nablarch 6のRESTfulウェブサービスのExampleを開発中に再デプロイできるように設定してみます。

# お題

デプロイ対象のアプリケーションサーバとMavenプラグインを使って、ソースコードを変更した際に再デプロイして開発を効率化したいという話です。

アプリケーションサーバは以下で試しました。

– Jetty
– Open Liberty

試したものの、諦めたのは以下です。

– Payara Micro
– WildFly

そもそも利用できるものがなかったのはApache Tomcatです。

Payara Microは、うまく起動できませんでした…。
WildFlyは、プロジェクトの構成(URLマッピングやActionの実装)をけっこう変えないといけなさそうだったので諦めました…。

# 環境

今回の環境はこちら。

“`shell
$ java –version
openjdk 21.0.3 2024-04-16
OpenJDK Runtime Environment (build 21.0.3+9-U

Java アノテーション

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

# アノテーションとは
Annotation = 注釈

メタデータとしてコードに付加される情報を**アノテーション**と言う。メタデータとは、情報自体に対する付随的な情報のことを指す。

“`java:アノテーション
@アノテーション名(属性名=値)
“`

## `@Deprecated` / `@SuppressWarnings`

特定の要素(クラス、メソッド、フィールド、コンストラクタなど)が**非推奨**であることを示すために使用されるアノテーションとして`java.lang.Deprecated`がある。

https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/lang/Deprecated.html

また`@Deprecated`アノテーションは、`forRemoval`と`since`と言う属性を持つ。

– `bool forRemoval()`
– 将来のリリースで削除される予定であることを示す
– `String since()`

[備忘録 その4] Java Silver ~変数と配列 その2~

# 配列
配列は、同じデータ型の要素を一定の順番で並べたデータ構造です。プログラミングにおいて、複数のデータを効率的に扱うために広く使われています。配列を使うことで、データの集まりを一つの変数で管理し、インデックスを用いて個々の要素にアクセスできます。
## 配列の基本
* 固定長:配列の長さは一度作成されると変更できません。要素数を変更したい場合は新しい配列を作成し直す必要があります・
* 同じデータ型:配列に格納されるすべての要素は同じデータ型である必要があります。
* インデックスによるアクセス:配列の要素にはインデックス(番号)を使ってアクセスします。インデックスは0から始まります。

## 配列のメリット
* 簡単なデータ管理:複数の同種のデータを一つの変数で管理できるため、コードが簡潔になります。
* 効率的なアクセス:インデックスを使って特定の要素に直接アクセスできるため、効率的です。

## 配列のデメリット
* 固定長:配列の長さは変更できないため、要素数が事前にわからない場合は不便です。
* メモリの無駄:必要な要素数より大きな配列を作成するとメモリの無駄が生じます

[備忘録 その3] Java Silver ~変数と配列 その1~

# 変数
## リテラル
リテラルとは、プログラムのなかで直接記述される値のことです。リテラルは具体的な値を表し、変数や定数に代入されたり、計算や比較に使用されたりします。
### 1\.整数リテラル
整数リテラルは、整数値を表します。デフォルトでは’int’型として扱われますが、’long’型として扱いたい場合は、末尾に’L’または’l’を付けます。
“`java
int decimal = 10; // 10進数
int octal = 012; // 8進数(10進数で10)
int hex = 0xA; // 16進数(10進数で10)
int binary = 0b1010; // 2進数(10進数で10)

long longValue = 10L; // long型
“`
### 2\.浮動小数点リテラル
浮動小数点リテラルは、小数点を含む数値を表します。デフォルトでは’double’型として扱われますが、’float’型として扱いたい場合は末尾に’F’または’f’を付けます。
“`java
double doubleValue = 3.14;
float

優先度 演算子 結合規則 説明
1 [] () . 左から右 配列アクセス、メソッド呼び出し、フィールドアクセス
2 ++ —