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

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

変数のデータ型の種類

変数のデータ型の種類や使い方などを、学習し直した為、まとめていきたいと思います。
変数については以前簡単にまとめた記事がありますのでよろしければどうぞ。
[変数の定義 基本的な使い方](https://qiita.com/singekino-ojisan/items/12a51976b827e7dedb1c)

# 基本データ型の種類
javaでデータ型には大きく分けて、`基本データ型(プリミティブ型)`と`オブジェクト参照型(リファレンス型)`の2種類があります。
`オブジェクト参照型(リファレンス型)`には、`String型`、文字列を扱えるデータ型です。
[変数の定義 基本的な使い方](https://qiita.com/singekino-ojisan/items/12a51976b827e7dedb1c)こちらで、記事にしています。

`基本データ型(プリミティブ型)`は、数字や文字などの、最も基本的なデータの種類を扱うことができ、8種類あります。
ビット数とはPCのメモリ上で確保される桁数のことです。
同じような表現でバイト数というのもあり、一般的に`8ビット=1バイト`で

元記事を表示

Liberty で httpsession を JCacheに永続化

# 目的
tWASではDBに保存していた httpsessionが Libertyでは JCacheで保存できるようになったので、その構成をします。

# Gitレポジトリ
用意したGitレポジトリをクローンします。

“`
git clone https://github.com/pdprof/security-auth.git
cd httpsession/jcache-docker
“`

# Libertyイメージのビルド
Liberty Docker イメージをビルドします。localhost 以外の docker を動かしているホストのIPアドレスをACCESS_HOSTに指定します。

“`
export ACCESS_HOST=172.17.0.1
./setup-docker.sh
“`

# Libertyとhazelcastの起動
続けて以下のシェルを実行して起動します。テストなので hazelcast は永続化をしていません。

“`
./hazelcast-start.sh
./httpsession-start.sh
“`

# HttpSess

元記事を表示

【初心者専用】Java8のOptionalクラスについて

## 0. 最初に
開発経験のない新入社員が突然、現場に放り込まれて「簡単な開発だから」と任されたけど、わからなさすぎて泣き寝入り状態だったので、自分の研鑽かつ同様の境遇の人達を救うためJava8(Optional編)についてまとめた。

## 0.5. ラムダ式
Optionalを記す前に、ラムダ式といったものの説明をしないとだめだと気付きました。

ラムダ式をひとことで表すと、、、**省略して、矢印みたいになってるもの**
“`
({引数} -> {処理})
“`
こんな感じです。

サンプルコードを作ってみると
これがインターフェースで
“`java
interface Color{

void printColor();

}
“`
これが匿名クラス(匿名クラスとは[こちら](https://cyzennt.co.jp/blog/2020/10/16/%E7%84%A1%E5%90%8D%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A8%E3%81%AF/#:~:text=java%E3%82%84C%23%E3%81%A7%E3%81%A

元記事を表示

default method of interface

default methodはextendsによりoverrideされる
“`java
interface A {
default void method() {
System.out.println(“aaaa”);
}
}
interface B extends A {
}

public class Outer implements B {
@Override
public void method() {
System.out.println(“aaaa2”);
B.super.method();
}
public static void main(String[] args) {
new Outer().method();
}
}
“`
“`
aaaa2
aaaa
“`

元記事を表示

例外について要点まとめ

## 目次
 [1.例外の種類](#1-例外の種類)
 [2.例外の継承関係](#2-例外の継承関係)

## 1. 例外の種類
例外とは、Throwableクラスのサブクラスのオブジェクトのことを指す。
Throwableクラスのサブクラスとして、Errorクラス、Exceptionクラスが存在している。

###### ◆ Errorクラス
 プログラムが実行できないなどの重大な例外を扱うため、例外処理は通常おこなわない。
 例 IOError:重大な入出力エラー発生時にスロー

###### ◆ Exceptionクラス
 クラス名の末尾に必ずExceptionが付く。
 RuntimeExceptionクラスに属するクラスと、
 それ以外のExceptionクラスに属するクラスとに分類される。

 RuntimeExceptionクラスに属するクラスは「非チェック例外クラス」と呼ばれ、
 例外処理をおこなわなくてもコンパールエラーにならない。
 例 NullPointerException    :null値の参照型変数を参照しようとした場合にスロー
   IndexOutOf

元記事を表示

static methodは継承されないし、overrideできない

“`java
interface A {
static void method() {
System.out.println(“aaaa”);
}
}

public class Outer implements A {
static void method() {
System.out.println(“aaaa2”);
}
public static void main(String[] args) {
A.method();
Outer.method();
}
}
“`
“`
aaaa
aaaa2
““

元記事を表示

static method of interface

継承先でstatic method of interface利用できない
“`java
interface A {
static void method() {
System.out.println(“aaaa”);
}
}
interface B extends A{
}
class C implements A{
}

public class Outer implements A {
public static void main(String[] args) {
A.method();
B.method();
C.method();
method();
}
}
“`
“`
com/mycompany/mavenproject1/Outer.java:[27,8] シンボルを見つけられません
シンボル: メソッド method()
場所: インタフェース com.mycompany.mavenproject1.B
com/mycompany/mavenproject1/Ou

元記事を表示

anonymous classのclass name, methodsを確認

class name = Outer$1という名前のclass name
methods name = Object’s methods + added method

“`java
public class Outer {
public static void main(String[] args) {
var obj = new Object() {
public void test() {
System.out.println(“i am test method”);
}
};
System.out.println(obj.getClass());
Method m[] = obj.getClass().getMethods();
for(Method mc:m) {
System.out.println(mc);
}
}
}
“`
“`
class com.mycompany.mavenproject1.O

元記事を表示

不変マップを初期化する際はMap.ofEntriesを推奨

# 不変マップの初期化方法
不変マップの初期化方法は大きく下記2つの方法があります。
– Map.of()
– Map.ofEntries()

いずれもJavaSE9、JDK9以降に導入された機能になります。
https://docs.oracle.com/javase/jp/9/docs/api/java/util/Map.html

それではそれぞれの使い方を見ていきましょう。

## `Map.of()`
下記ドキュメントを参照しますと分かるとおり、of()の引数は、0〜10個の要素(キーとバリューのマッピング)を指定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630308/325691c9-bd59-12eb-3c69-b97d716a01ab.png)

例えば、要素数が2つの不変マップを初期化する場合
“`java
import java.util.Map;

Map mapOf = Map.of(
“key

元記事を表示

Secure コーディングには、参照共有・複製・不変と可変について知っておかなきゃいけないって話

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650867/2e2e7250-f0cc-515e-724a-7121a33ce88c.png)

本記事ではセキュアなコーディングを行う上で必要な知識を、別名参照問題を入り口にしてまとめています。
言語には Java を用いていますが、Ruby・Python・PHP であればほとんど当てはまる様な内容かなぁ、と思います。

具体的には以下の事柄と関係するセキュアなコーディング方法を取り扱います。
普通のコーディングテクニックとして頻出するものばかりですが、落とし穴が多く存在します。何が危険なのか?なぜ危険なのか?どうやって解消するのか?など、具体的なコードも交えて説明したいと思います。

1. 別名参照問題
1. 不変(immutable)オブジェクト・可変オブジェクト
1. 複製(シャロウコピー・ディープコピー)
1. ディフェンシブコピー
1. コピーコンストラクタ・static ファクトリ
1. スレッドセーフ(ちょっとだけ)

元記事を表示

SpringBoot2とReactJSで簡単なTodoListを作成

# 初めに
はじめまして。
今回、学習のため、SpringBoot2とReactJSを把握次第、簡単なTodoListを作成した。

# 目的
フレームワークSpringBoot2とReactJSを用いての開発をすることで、下記事項が理解できているかを確認する

・Spring Boot Flow Architecture
・RestAPI service
・Redux store
・ReactJS Functional Components

# スペック
■言語
Java(17)
JavaScript
HTML
CSS

■DBMS
MySQL 8.0.31

■フレームワーク
ReactJS(18.2.0)
SpringBoot2(2.7.4)

■IDE
FrontEnd: Visual Code
BackEnd: IntelliJ

# プロジェクトの機能概要

CRUDという4つの基本機能でTaskを管理するTodoList。

# 結果
https://drive.google.com/file/d/1wxhPNwDdoERaSb-lpPZ0GdI3iAKZnZK-/vi

元記事を表示

今日起ったtomcatがらみの障害

## これ何
今日お昼ご飯食べられなかったので。

## 何が起ったの
午前中画像とかアップロードできなくなった。

## 原因は
tomcat上で運用されているSpring Bootのサーバでtempが溢れた。

## 問題の説明

tomcatにはデフォルトで動的に書き込まれるディレクトリが2つあります。
一つは `logs`、もう一つは `temp`。
workやwebappsも動的といえば動的だけどある程度以上膨れることはないので除外します。

`logs` はアプリケーションのログ(catalina.out) とかアクセスログ(access_log.txt)とかもろもろ吐かれるところ。
1日に1回程度cronか、log appenderによるローテーションがかかるように設定するのがセオリー。

`temp` はjavaのテンポラリディレクトリのことで、tomcatではデフォルトここに置かれるというもの。
さまざまなライブラリが一時保存先として利用している。
つまり、javaをつるしで起動すると `/tmp` になるし、tomcat上でなにもしないと `$TOMCAT_HOME

元記事を表示

Javaのレコードクラス

# 記事の目的
DDD(ドメイン駆動設計)では値オブジェクトはイミュータブルであることが求められる。
エンティティオブジェクトも可能であればイミュータブルとすべきである。

レコードクラスはイミュータブルであることが強制できるので、DDDと相性が良い。

DDDに限らず、オブジェクト指向でプログラミングするのであれば、予期せぬオブジェクトの状態変化でつまらないバグにハマることも無くなるので、オブジェクトは極力イミュータブルになるようにしたほうが良いと思っている。

世の中にはクラスに無条件かつ盲目的にgetter/setterをつくる思考停止なプログラミングが溢れていて、Lombokのようなライブラリがそのような悪いプログラミングの量産に拍車をかけている気がする。
「Lombokイコールすべて悪」とは言わないが、なぜそのフィールドがprivateなのか、本当にsetterが必要なのかを考えること無く、なんとなく動く(だけど危うい)プログラムがラクに書けてしまうので、少なくとも自分の携わるプロジェクトではLombokは利用禁止にしている。

Java16から正式実装されたレコードクラスを

元記事を表示

【Android】テストを書くときに使う@get:RuleとかRuleChainってなんぞよ

# はじめに

Androidでインストゥルメント化単体テストを作成するとき、`@get:Rule`を使ってテストを書いたことはありませんか?

“`kotlin
@HiltAndroidTest
class AppTest {

private val hiltRule = HiltAndroidRule(this)
private val composeTestRule = createAndroidComposeRule()

@get:Rule
val rule: RuleChain = RuleChain
.outerRule(hiltRule)
.around(composeTestRule)

}
“`

この、`@get:Rule`や`RuleChain.outerRule().around()`がよくわからない状態で、今まではテストを書いてきました。

ということで今回は、`@get:Rule`とかの**Rule**ってなんぞやということをまとめていきたいと思

元記事を表示

paizaラーニング Aランクレベルアップメニュー マップの判定・縦横

# STEP: 1 盤面の情報取得
## 問題
https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_snake_map_step1

## 解答
“`java:step1.java
import java.util.*;

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

Scanner sc = new Scanner(System.in);
int h = sc.nextInt();
int w = sc.nextInt();
int n = sc.nextInt();
// 改行
sc.nextLine();

String[][] board = createBoard(h, w, sc);

displayCoordinatesInText(board,

元記事を表示

【祝】2023年の初投稿 簡単な自己紹介とブログ運営について

# はじめまして! からの自己紹介

## 目次
1. [ジョニーってどういう人?](#introduction)
1. はじめに
1. 宣伝(笑)
1. [ブログ運営について ](#todo)
1. 更新タイミング
1. 配信内容

## ジョニーってどんな人?

どんな人? それは僕が一番聞きたいですが、都内のとある会社でエンジニア業を営む23歳の現役SEです。名前に突っ込みを入れないでください。れっきとした日本人です。

主に次のような業務に携わっています。
– 業務用アプリケーションの開発
– kubenetes基盤の維持管理(今後やるよてい)
– 機械学習系

あんまり細かく書くと身バレするのでこれくらいにします(笑)
日々の業務での日記や、技術的な発信を行っていこうと思います。
配信は、週1くらいでやっていきます。新人SEの日記なので読み物感覚で読んでください✨

## ブログ運営について

基本的に毎週金曜の退勤したあとに更新していこうと思います。

元記事を表示

新卒SE選択ソート書いてみた

基本情報技術者の擬似言語の学習のため実際にプログラム化してみました。
基本情報の問題集をもとにフローチャートを作成し、コーディングをおこなっております。

“`java:Qiita.java
import java.util.*;

public class SelectionSort {

public static void main(String[] args){

try {
Scanner sc = new Scanner(System.in);
System.out.println(“作りたい配列の要素数を入力してください。降順に並べます。”);
int size = Integer.parseInt(sc.next());
int[] data_array = new int[size];

/*
* テストデータ
* 要素数 8
* 47,33,68,55,74,89,25,10
* 3,5,8,4,0,6,9,1
* 7

元記事を表示

ABC284A~Eの解答[Java]

## はじめに
今回はEまで解けたのでコンテスト中に提出したコードを載せようと思います。

では、見ていきましょう。

## A – Sequence of Strings
問題文は[こちら](https://atcoder.jp/contests/abc284/tasks/abc284_a)

配列で受け取って逆順に出力しました。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(String[] args){

//N、Sの受け取り
int N = System.in.nextInt();
String[] S = System.in.next(N);

//逆順で出力
while(N–>0){

元記事を表示

mockito基本

# 基本

## Mockしたクラスのメソッドが呼ばれることのテスト

“`java
@ExtendWith(MockitoExtension.class)
public class IndexSelectScanTest {
@Mock
private User user; // mockしたいClass

@Test
public void testMock() {
Example expl = new Example(user);
expl.doSomethingForUser(); // ExampleのdoSomethingForUser()メソッドをコール
verify(user).doSomething(); // userのupdateIdメソッドも呼ばれたことをテスト
}
}
“`

## Mockしたクラスで返す値をセットしておく

“`java
@ExtendWith(MockitoExtension.class)
public class IndexSelectScanTest {
@Mock
pr

元記事を表示

var

varは型推論
Objectに存在しないtestメソッドを定義することで
Objectではない別のクラスを推論して宣言する

“`java
public class Outer {
public static void main(String[] args) {
var obj = new Object() {
public void test() {
System.out.println(“i am test method”);
}
};
obj.test();
}
}
“`
“`
i am test method
“`
Objectで宣言するとエラー。
“`java
public class Outer {
public static void main(String[] args) {
Object obj = new Object() {
public void test() {
System.

元記事を表示

OTHERカテゴリの最新記事