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

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

さまざまな場面で使う三項演算子

## 目次
 [1.基本構文](#1-基本構文)
 [2.条件によって出力の内容が異なる場合](#2-条件によって出力の内容が異なる場合)
 [3.条件によって代入する値が異なる場合](#3-条件によって代入する値が異なる場合)
 [4.return文に記載する場合](#4-return文に記載する場合)
 [5.応用編](#5-応用編)

## 1. 基本構文
“`java
条件 ? trueの場合 : falseの場合
“`
三項演算子を使用することで、コードの記述量を減らし実装を簡潔にすることができます。
また、if文のネストが深くなりすぎるのを防ぐこともできます。

では実際の実装例を見ていきましょう。
※実装例に記載の魚リストの要素数はさいごまで2のままです。

## 2. 条件によって出力の内容が異なる場合
### if文ver.
“`java
// 魚リスト
List fishList = new ArrayList();
fishList.add(“まぐろ”);
fishList.add(“かつお”);

// if文ver.

元記事を表示

e.printStackTrace()とSystem.out.println(e)とSystem.out.println(e.getMessage())の違い

e.printStackTrace()

System.out.println(e)

System.out.println(e.getMessage())
の違い。

“`java
public class App {
public static void main(String[] args) throws Exception {

String aaa = “aaa”;

try{
aaa.substring(1000);
}catch(Exception e){
e.printStackTrace();
System.out.println(e);
System.out.println(e.getMessage());
}
}
}

“`

## e.printStackTrace()の場合

“`
java.lang.StringIndexOutOfBoundsException: begin

元記事を表示

新人SEが効率的に成長するために必要なこと

# 新人SEが効率的に成長するために必要なこと

**軽く挨拶**
記事を閲覧していただきありがとうございます。当記事は、SIerで働く新人SEの葛藤と日々のアウトプットを行うための記事です。技術的な話もしますが今回は「新人がいち早く戦力になる」ためにどういうステップを踏めばいいのかという観点で話していこうと思います。

1. [結局アプトプットを出せるかだと思う](#anchor1)
1. [エンジニアとして成長するために必要なこと](#anchor3)
1. [まとめ](#anchor4)


## 結局アプトプットを出せるかだと思う

1. エンジニアにおけるvalueとは
いきなりですが、私の思う価値のあるエンジニアとは、「生産性の向上にに貢献できる」エンジニアだと思います。これはベテランであっても新人であっても共通にしてチームに貢献することが大切だと思います。
「生産性」という言葉が抽象的なので一つ階層を下げてみましょう。例えば以下のようなものがありますね
– プロ

元記事を表示

JavaGold受かりました。

JavaGoldに受かりました。

自分は、どうやらJavaGold受かったそうです。

勉強時間は一か月です。

覚えたところもありましたが、読むのなら大丈夫という感じです。

元記事を表示

迷路作成

proになるJava読書中、難しくなってきたのでメモがわりに。

– Sample Code

projava/Maze.java

package projava;

import java.io.IOException;

public class Maze {
public static void main(String[] args) throws IOException {
record Position (int x, int y){}
int[][] map = {
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 1, 0, 1, 0, 0, 1},
{1, 0, 1, 0, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 0,

元記事を表示

Optional class

Optionalはnullかnull以外かのどちらの値も格納できるclass
Optional.ofNullable(xxx)はnullならemptyに読み替えて格納する。
array refer時のArrayIndexOutOfBoundsExceptionやNullpointerExceptionを回避してくれるようなものではないので注意

“`java
public class Outer {
public static void main(String[] args) {
String strArray[] = {“1a”,”2a”,null};
System.out.println(get(strArray,3));
System.out.println(get(strArray,2));
System.out.println(get(strArray,1));
System.out.println(get(null,1));
}
static O

元記事を表示

複数methodをまとめて排他

first,second,thirdをまとめて排他にするときは
別class化(Test)してReentranLockを持たせる。
lockするとunlockするまでlockできない。
Reentrantを共有ため、threadは単一のTestを共有

“`java
class Test {
final ReentrantLock re = new ReentrantLock();
void lock() {
this.re.lock();
}
void unlock() {
this.re.unlock();
}
void first() {
System.out.println(Thread.currentThread().getId() + “:1”);
}
void second() {
System.out.println(Thread.currentThread().getId() + “:2”);
}
void third()

元記事を表示

ArrayListを更新中に参照する

forでlistを読み込み中に、別スレッドでlist addすると
exceptionが発生する
“`java
class ReadTask implements Runnable {
List l;
ReadTask(List l) {
this.l = l;
}
@Override
public void run() {
try {
for (String str:this.l) {
System.out.println(str);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
ex.pr

元記事を表示

SpringBoot SwaggerUI(JWT SpringSecurity付)の実装

# 概要
SpringBootでSwaggerUIの実装をします。
SwaggerUIはAPIをドキュメンテーション化ができるツールです。

# 開発環境
OS:windows10
IDE:IntelliJ Community
spring-boot-starter-parent 2.75
java : 11

# 実装
## Swaggerの導入
### pom.xmlにswaggerを追加する
“`pom.xml

io.springfox
springfox-boot-starter
3.0.0

“`

### SpringSecurityでSwaggerのアクセス許可をする
“`java:WebSecurity.java
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

元記事を表示

Java Spring Boot勉強用①

Spring Bootの勉強をしています。
日々の学習記録として本記事を残します。
今日学んだことは、画面からform実行からSpring Boot側でどのように実行されているかの流れ。
間違い・勘違いはあるものとして考えております。
もしお手すきの時は温かいご指摘をよろしくお願いいたします。

■処理の流れ
画面
thymeleafで作成

Controllerで受け取る
@Controller – クラスに付ける
@GetMapping – メソッドに付ける
@PostMapping – メソッドに付ける
※Model modelは忘れずに

モデルでパラメータを受け取るときにvalidationチェック
@Validated
@ModelAttribute

モデルはgetter, setterがあるプロパティクラス
validationの(自分の中での)イメージは、
setterで画面からの値を入れるときに条件を満たしているか判定する感じ

@BindingResultでvalidationの結果受けとり

Model modelにaddAtt

元記事を表示

jenvでgradle実行時のUnsupported class file major versionを回避する

Unsupported class file major version XX
は、GradleのバージョンがJavaに対して古い場合に起こります。

– Gradleのバージョンアップ
– Javaのバージョンダウン

が考えられますが、諸事情で前者が選択できなかったので今回は後者の方法の解決です。

## 前提

– macOS
– jenvをインストールしていること
– `brew install jenv`

## 解決方法

指定したディレクトリ以下を古いJavaのバージョンを使うように設定

“`sh
# 古いバージョンのJavaをインストール
brew install openjdk@11
# brewでインストールしたので、シンボリックリンクを貼る(↑のインストール時コンソールに出力されます)
sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/
# jenvに追加
jenv

元記事を表示

org.h2.jdbc.JdbcSQLSyntaxErrorException: Table “PERSON” not found; SQL statementエラー

エラー内容。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3097775/630aeb2e-429a-e815-2f4a-2953a06dd74e.png)

resources/data.sqlにテストSQLを書いて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3097775/4bbbedf3-80fc-3a9c-cfa1-625d211fa763.png)

以下のテストコードを実行すると、テーブルを見つけられないエラーが発生してしまった。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3097775/d3e5f2b3-5281-0e0e-e9f8-43fdb9e057f7.png)

エンティティクラスにEntityアノテーションを定義してあったのに、テーブルを参照

元記事を表示

Springでポートフォリオを作成する

# Springでポートフォリオを作成する
本日からSpringを用いてポートフォリオを作成する過程を投稿していきたいと思います。
今回は、まず始めに要件定義を書いていきます。

# 要件定義
## プロジェクト名
*ToDoQuest*

TODOリストにRPG要素を組み合わせたWebアプリを作成していこうと思います。
名前は今考えました。

## プロジェクト概要
– [ ] TODOリストとRPGを組み合わせ楽しみながらタスクを管理する
– [ ] 業務の効率化を図る

TODOリストとRPG要素を組み合わせることで、本来つまらないであろう仕事を少しでも楽しく取り組めるようにしていきたいという目的があります。

## 既存のプロセス
現在はメモ帳にTODOリストを作成し、終わったタスクをマークするというプロセスになっています。

## 現状の問題点
### 自分
– [ ] タスクのやり/抜け漏れが多い
– [ ] メモ帳でTODOリストを作成してもすぐにやめてしまう
– [ ] タスクを放っておいて提出物などの期限が過ぎてしまうことがある

### メモ帳
– [ ]

元記事を表示

AtomicIntegerでsyncronized

ValueをAtomicValueに差し替え
int numをAtomicInteger numに差し替え
AtomicInteger#addAndGet()を使うことにより
排他をしなくても読み替えから足しこみまでをatomicに行う

これは発生しない
1st thread num ref
2nd thread num ref
1st thread num + 100

こういったかんじ
1st thread num ref and +100
2nd thread num ref and +100

“`java
class Value{
int num;
public void add(int num) {
this.num += num;
}
public int get() {
return num;
}
}
class AtomicValue extends Value {
AtomicInteger num = new AtomicInteger(0);
@Override

元記事を表示

【完全自分用メモ】コードレビューを依頼する前に見直した方が良いポイント(Java編)

# この記事の目的
完全に自分用です。
Javaで実装したプログラムのコードレビューで指摘されたことがあるポイントをまとめて、定期的に見返すことで再指摘されないように気を付ける!(新たな指摘があるごとに増やすかも)

### String.equalsメソッドで比較するとき
定数と比較する場合は定数に対してequalsメソッドを実行するようにする。
定数の中身は明示されていると思うので、ヌルポで落ちるなどが減る。
`定数.equals(変数)`

### 単純に文字列結合をする
単純に文字列結合をする場合はStringBufferではなく、StringBuilderを使用する。
↓の記事が参考になる
https://qiita.com/gksdyd88/items/d3873600829337bebedd

### 区切り文字で文字列を結合する
以下のいずれかかを使用することで実現可能。
目的や環境によりどれかを使用するかは考える。
– StringJoiner ※Java8から使用可
– String.join() ※Java8から使用可
– StringUtils.join() ※

元記事を表示

dead lock of thread

1st thread b1.deposit() lock b1
2nd thread b2.deposit() lock b2
この状態で処理を進めると
1st thread b2.deposit() cannot update b2 because 2nd locked b2
2nd thread b1.deposit() cannot update b1 because 1st locked b1

“`java
class Bank {
int amount;
void deposit() {
amount++;
}
void withdrawal() {
amount–;
}
}
public class Outer {
public static void main(String[] args) {
ExecutorService e = Executors.newFixedThreadPool(10);
Bank b1 = new Bank();

元記事を表示

synchronized modifier

thread of same instanceを大量発行する

本来
0を読み出し+100
100を読み出し+100
で200となるはずが、

読み出しタイミング同時だと
0を読み出し+100
0を読み出し+100
で100となる

“`java
class RunnableSampleClass implements Runnable {
int num;
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(RunnableSampleClass.class.getName()).log(Level.SEVERE, null, ex);
}
add();
}
void add() {
num = num + 100;
}
}
public class Outer {

元記事を表示

VSCodeのSonarLintを設定

## 内容。
VSCodeでJavaを開発中、SonarLintによって品質向上を実施したかったので、導入手順の個人的記録です。
###### 設定したい内容。
SonarQubeは使わず、ローカルだけでSonarLintを実施。

###### 前提の環境。
VSCodeによるJava開発の環境は構築済。

## 手順。
###### 1.拡張機能を追加。
VSCodeの拡張機能から、SonarLintを選んでインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351480/f4cfe487-a2bd-c29f-e961-7f67b175d730.png)

###### 2.SonarLintの指摘を確認
Javaのソースを編集すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351480/3854201f-52ec-162a-48cf-4aeec88558e5.

元記事を表示

CyclicBarrier class

指定した数のスレッドが終了したら、終了後メソッドを実行させるコントローラ
await methodが終了通知

疑問点
newFixedThreadPool(2),CyclicBarrier(3,…)にすると、
2個目の処理までは行われ、3個目の処理が動き出さない事象が
確認している。
CyclicBarrierに使用しているthread poolは占有されていて使いまわしが
できない?

また、CyclicBarrier(3,…)、実行するスレッドが7の場合、
shutdownしても実行終了しない。
CyclicBarrierが残りのスレッド要求を待ち続けているようだ。
強制的に終了させる方法が不明

“`java
class RunnableWithCyclicBarrier implements Runnable {
private CyclicBarrier c;
RunnableWithCyclicBarrier(CyclicBarrier c) {
super();
this.c = c;
}
@O

元記事を表示

Adobe Document Generation APIで動的なPDFを作成しよう

## Adobe Document Generation APIとは
[Adobe Acrobat Services](https://developer.adobe.com/document-services/) (2022年12月 Adobe Document Servicesという名前から名称が変更されました)はPDFに関する様々なAPIサービスを提供していますが、今回はこの中の1つ、[Adobe Document Generation API](https://developer.adobe.com/document-services/apis/doc-generation/)を紹介します。

### Adobe Document Generation API
Adobe Document Generation APIはテンプレートとテンプレートに差し込むデータから、PDF(またはWordドキュメント)を作成するAPIです。PDFの作成処理はクラウド上で行われます。テンプレートとなるドキュメントは、Wordドキュメント、データはJSON形式で用意します。従来、こういった動的なP

元記事を表示

OTHERカテゴリの最新記事