JAVA関連のことを調べてみた2023年02月10日

JAVA関連のことを調べてみた2023年02月10日

Spring Boot WEBサービスを Docker コンテナとして起動する

# Spring Boot WEBサービスを Docker コンテナとして起動する

## 目的
Spring Boot WEBサービスを Docker コンテナとして起動して理解を深めます。
※ Windows 11 Home 22H2 を使用しています。
※ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方にも参考になると思います。

## 環境

WSL (Microsoft Store アプリ版)

“`sh
> wsl –version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
“`

Ubuntu

“`sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22

元記事を表示

最小構成 Spring Boot WEBサービスの Hello World!

# 最小構成 Spring Boot WEBサービスの Hello World!

## 目的
Spring Boot で最小構成のWEBサービスを作成して理解を深めます。
※ Windows 11 Home 22H2 を使用しています。
※ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方にも参考になると思います。

## 環境

WSL (Microsoft Store アプリ版)

“`sh
> wsl –version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
“`

Ubuntu

“`sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
“`

J

元記事を表示

①フロントとサーバの通信方法(RPC) テキスト 定義

動作環境 windows10 Java6 GWTSDK2.7 Eclipse4.4 (基本他の条件でも動作すると思います)

GWTでは、フロントとサーバで通信ができます。
もちろん、みんなが大好きなJavaだけで・・
定義する箇所は4つのみ
なれないうちは、戸惑うかもしれませんが、基本的に定義なので、1度書いてしまえば終わりです。
また、今回はテキストのみですが、Javaの得意分野の独自オブジェクトも送受信が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132663/ca63c5f4-f533-a46c-ce4f-ec36a309d148.png)

A 名前は任意(サーバ処理用インターフェース
“`
package kut.hp_rc.client;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelat

元記事を表示

Javaで分数が使えるクラス

はじめに

 今回ふと思い立ち、javaで分数が使えるようにするクラスを作ってみました。実用性があるかは分かりませんが、劣化しない小数として使うくらいなら問題ないかと思います。

 本来javaでは変数名やクラス名は省略せずに明記するのがjavaの記法らしいのですが、今回は見やすさを重視して所々省略してますので、コメントを見ていただけると仕様が分かるかと思います。

コード

自作クラスがちょくちょくあるので、
こちらで解説してます。

~~~java:Frac.java
package com.algorithm.math.frac;

import com.algorithm.lang.Judge;
import com.algorithm.lang.error.IllegalFractionValueException;
import co

元記事を表示

Fracクラスで使ってるクラスについて

分数を扱うクラスで使用してるクラスを解説する予定です。

元記事を表示

【メモ】WebSocket使ってみた

## はじめに
Websocket使って双方向通信ができるように実装してみました。
フロントは素のjavascriptでバックはjavaです。

### javascript

“`javascript:test.js
var connection = new WebSocket(‘ws://localhost:8080/test’);

connection.onopen = function(e) {
connection.send(‘test’);
};

connection.onerror = function(error) { };

connection.onmessage = function(e) {
console.log(‘メッセージを受け取った’);
console.log(e.data);

};

connection.onclose = function() { };
“`

### java

“`java:WebSocketConfig.java
package com.example.demo.web

元記事を表示

インターフェース(Java)

## インターフェースとは
プログラムを作成するときに、決められた操作を行うためのメソッドがまとめて定義されているクラスのようなもの。そのクラスで使うメソッドをインターフェースで定義しておく。インターフェースではメソッドの中身は空にしておいて、インターフェースを使うクラス内で中身を実装することが多い。
“`java
//インターフェース
interface インターフェース名{
//メソッド定義
void method A(){}
void method B(){}
}

//インターフェースをクラスに実装
class A implements インターフェース名 {
public void methodA {
//実装する
}
}
“`

## インターフェースの役割
#### 1. ポリモーフィズムを実現する
オブジェクト指向しおけるポリモーフィズム(多様性)を実現する。
ポリモーフィズムとは、複数のオブジェクトが同じ命令に対して違う挙動を可能にすること。
例えば猫、犬、鳥のオブジェクトがあった時、どれも鳴くという共通の命

元記事を表示

Spring MVC WEBアプリを Docker コンテナとして起動する

# Spring MVC WEBアプリを Docker コンテナとして起動する

## 目的
Spring MVC WEBアプリを Docker コンテナとして起動して理解を深めます。
※ Windows 11 Home 22H2 を使用しています。
※ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方にも参考になると思います。

## 環境

WSL (Microsoft Store アプリ版)

“`sh
> wsl –version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
“`

Ubuntu

“`sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04

元記事を表示

最小構成 Spring MVC REST WEBサービスの Hello World!

# 最小構成 Spring MVC REST WEBサービスの Hello World!

## 目的
Spring MVC REST で最小構成のWEBサービスを作成して理解を深めます。
※ Windows 11 Home 22H2 を使用しています。
※ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方にも参考になると思います。

## 環境

WSL (Microsoft Store アプリ版)

“`sh
> wsl –version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
“`

Ubuntu

“`sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.0

元記事を表示

最小構成 Spring MVC WEBアプリの Hello World!

# 最小構成 Spring MVC WEBアプリの Hello World!

## 目的
Spring MVC で最小構成のWEBアプリを作成して理解を深めます。
※ Windows 11 Home 22H2 を使用しています。
※ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方にも参考になると思います。

## 環境

WSL (Microsoft Store アプリ版)

“`sh
> wsl –version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
“`

Ubuntu

“`sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
“`

Java

元記事を表示

? wildcard type parameter

type undeterminedの状態で動かすには\を指定
以下の制約がある
・nullしか渡せない
・Objectが返却される

“`java
class X {
T t;
X(T t) {
this.t = t;
}
T get() {
return t;
}
void set(T t) {
this.t = t;
}
}
public class Outer {
public static void main(String args[]) {
X x = new X<>(“xx”);
String s;
s = x.get(); //err
s = (String) x.get();
x.set(null);
x.set(“100”); //err
}
}
“`
“`
——————————–

元記事を表示

type parameter with restriction

? extends Xは、?そのものか、サブクラスを意味する
T extends Aは、AかAのサブクラス(以下の例ではB)
“`java
class A{
void method(){
System.out.println(“A”);
};
}
class B extends A{
@Override
void method(){
System.out.println(“B”);
};
}
class C {
void method(){};
}
class X {
void method(T t) {
t.method();
}
}
public class Outer {
public static void main(String args[]) {
X x1 = new X();
x1.method(new A());
x1.method(new B());
X

元記事を表示

covariant, invariant

Objectの変数にStringの変数を代入できるのはcovariantという
Objectの変数にStringの変数を代入できないのはinvariantという

# array
arrayはcovariant
arrayの場合、declareしたarrayのtypeではなくarray ref先のarrayのtypeを示している
初期化子を使ってdeclareすると初期化のtypeではなく、declareに指定したtypeになる。
# generics
genericsはinvariantなので、
List\ l = new ArrayList\();は compile-error
List\にadd(String)とすれば、その要素はStringになる。
プログラム的にはList\なので、for(Object o:li)のように取り出す。
new ArrayList();のはプログラム的にも意味をなしていないように見える。

“`java
public class Outer {

最小構成 Java Servlet WEBアプリの Hello World!

# 最小構成 Java Servlet WEBアプリの Hello World!

## 目的
Java Servlet で最小構成のWEBアプリを作成して理解を深めます。
※ Windows 11 Home 22H2 を使用しています。
※ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方にも参考になると思います。

## 環境

WSL (Microsoft Store アプリ版)

“`sh
> wsl –version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
“`

Ubuntu

“`sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
“`

J

型推論

代入、値の受け取りで、宣言部のtypeと値を渡す側のtypeがチェックされる
以下の例ではnew arrayList()のが、declare のListと型があっているかチェックされる
<>(型未指定)、もしくは以外はエラーになる

“`java
public class Outer {
public static void main(String args[]) {
method(new ArrayList<>());
method(new ArrayList()); //warn 2重定義
method(new ArrayList()); //err
method2(new ArrayList<>());
method2(new ArrayList()); //err
method2(new ArrayList());

一時保管

https://snownotes.org/how-to-build-web-application-using-java/

最小構成 Maven の導入と Hello World!

# 最小構成 Maven の導入と Hello World!

## 目的

Maven で Java プログラムをビルド・実行する最小限の環境を構築します。
※ Windows 11 Home 22H2 を使用しています。
※ [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/about) の Ubuntu を操作していきますので macOS の方にも参考になると思います。

## 環境

WSL (Microsoft Store アプリ版)

“`sh
> wsl –version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
“`

Ubuntu

“`sh
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
“`

Java JDK

Eclipse jarファイルのエクスポート

## jarファイルの作成
①Eclipseのパッケージエクスプローラの対象プロジェクト名上で右クリックし、「エクスポート」を選択
②「エクスポート」ウィンドウが表示されるので、「Java > 実行可能JARファイル」を選択し、「次へ」ボタンを押下
③「実行可能JARファイル エクスポート」ウィンドウで「起動構成」にmain()メソッドのクラスを指定する
④同ウィンドウで、「エクスポート先」を指定する

## jarファイルの実行方法
「java -jar FILE_NAME.jar」
「start FILE_NAME.jar」

参考: https://java.keicode.com/lang/how-to-compile-jar-with-eclipse.php

二次元配列・多次元配列 

# 二次元配列や多次元配列について。
javaで個人的にややこしかった部分を整理しておきます。

一次元の配列を宣言するとこのような形になります
“`java
public static void main(String[] args) {
int[] array = new int[3];
}
“`
宣言時は以下のように三つの格納スペースを持った配列の参照先が変数arrayに格納されます。**⚠︎arrayの中に配列が格納されるわけではありません、参照型なので参照値が入ります**
![スクリーンショット 2023-02-09 0.47.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087483/7409f114-5a3d-3b1e-5f9d-bd3ae743c505.png)
“`java
public static void main(String[] args) {
int[] array = new int[3];
boolean[] array2 = new bo

日本語トランスコンパイラ言語 Re:Mind (自作言語)と他言語との構文比較(FOR文)

# はじめに
[前回のIF文の比較](https://qiita.com/mylifewithviolin/items/579e6c9b77dcd2adda0f)で、自作の日本語トランスコンパイラ言語では、条件分岐構文のはじまりとおしまいに全角記号の◇を使うことを開示しました。今回は繰り返し構文のFOR文です。ということは、まさかのまさか!?

日本語トランスコンパイラ言語の詳しい利用シーンのイメージは[こちらへ](https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde)

## この記事内容の作業目的
[日本語トランスコンパイラ言語 Re:Mind という自作言語](https://qiita.com/mylifewithviolin/items/9d58db8a101807c19bde)の制御構文をターゲット言語のそれと比較して検討する。
if文につづいてfor文。しかもbreak条件はなしとして、あとで考えます。つまり、無限ループの書き方です。

## この記事内容の保証
※この記事には実装的な情報が含まれます。