JAVA関連のことを調べてみた2020年06月14日

JAVA関連のことを調べてみた2020年06月14日

同一と同値について

今回はJavaにおいて「同じ」という概念についての話です。

# 同じという言葉の2つの異なる意味
– 同じインスタンスを参照していること
– インスタンスは異なるけれど、値は同じであること

前者を「同一」であると呼び、後者を「同値」であると呼びます。

# 同一について
“`java
Object hoge = new Object();
Object huga = hoge; //hogeの参照をコピーしてhugaに代入
“`
このとき、hogeとhugaは同一である、と言います。
同一性の判定は ==演算子で判定します。

例えば、

“`java
Object hoge = new Object();
Object huga = new Object();
huga = hoge;
“`
としても、hogeとhugaは同一ではありません(異なるインスタンスだから)。

# 同値について
“`java
public class Cat{
private String name;
public Cat(String name) {
this.name =

元記事を表示

【IntelliJ IDEA】ソースコードを保存したときにローカルでの変更箇所のみフォーマットする方法

## やりたいこと
cmd + s を押下したときに、以下を一括で実行できるようにしたい

– 不要なimport文を削除
– import文の順序を整理
– リポジトリにチェックインしていない変更箇所のみ
– コードを保存する

## 環境
– IntelliJ IDEA 2020.1.2 (Ultimate Edition)
– macOS 10.15.4

## 方法

#### フォーマットの設定
cmd + opt + shift + l を押下して「Reformat File dialog」を表示
Scopeを「Only VCS changed text」に設定して、Optionalの「Optimize imports」をチェックして、「Run」を押下
dialog

「Only VCS changed

元記事を表示

JavaをSDKMANでバージョン管理する

## 背景

Oracle Javaも商用利用が有償化したらしいし、GUIでインストールしたり面倒だったので、なんとなくJavaScriptの`nodenv`みたいにCLIでJavaもバージョン管理できるようにしたいなと思って調べてみました。

## `xxxenv`みたいなJavaのバージョン管理ツールはないのか?

`jenv`なるものがありました。
ただ、Java自体は自力でインストールする必要があるらしく、あくまで`jenv`はバージョン切り替えツールという位置付けっぽいようでした。

`nodenv`みたいにインストールもバージョン切り替えもできるのがいいなぁ。

## SDKMAN

インストールもバージョン切り替えもできるもので探すと、[SDKMAN](https://sdkman.io/)というのがありました。
以下を参考にインストールしました。
[#Java: vol1: 【 java・JDKバージョン管理 ベストプラクティス 】](https://qiita.com/locona_0810/items/f4c0141ca02a191ede52)

ちなみに今回はAd

元記事を表示

とりあえずJavaの外部ライブラリを使う

#プロローグ
なんでもいいのでライブラリを使ってみます。

#やり方
ライブラリのファイルを入手します。
今回はログ操作で有名なslf4jを使ってみます。

[こちら](https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.25/)のslf4j-api-1.7.25.jarからjarファイルをダウンロードします。
1.png

Eclipseの対象プロジェクトを右クリックし、「ビルドパス」の「外部アーカイブの追加」を開きます。
3.pngGradleでCodeArtifactの認証をプロファイル由来の自動化

## はじめに
レポジトリがマネージドになってすこぶる便利になりそうです。
が、[公式ドキュメント][doc]を読むと環境変数にトークンをロードしておけと、、、
毎回そんなめんどくさいことやれと?やりたくない!

というわけでAWS CLIで設定されてるであろうプロファイルから読むように書いてみました。

## 前提
任意のCodeArtifactにアクセスできるAWS CLIのプロファイルが設定済みのこと

## 使い方
以下を丸ごとコピー
※直接ファイルで落としたいときは[こっち][gist]

“`build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ‘com.amazonaws:aws-java-sdk-codeartifact:1.11.801’
}
}

import com.amazonaws.services.codeartifact.AWSCodeArtifactClient;
import com.amazonaws.auth.prof

元記事を表示

VScodeでJavaの勉強をしようとして、pathで少し躓いたハナシ

**VScodeはいいぞ**、と同期に布教されたので触ってみました。
https://www.suzu6.net/posts/130-vscode-for-java/
この方のブログを参考に環境を整えていたところ、pathの通し方で少し躓いたので投稿します。

躓いたところ

VScodeにJava用の拡張`Java Extension Pack`をインストールし、
`ctlr` + `shift` + `p` でmavenを用いてプロジェクトを新規作成し、
意気揚々と`F5`でコンパイルをかけたところ…

“`
Build path specifies execution environment JavaSE-1.8. There are no JREs installed in the workspace that are strictly compatible with this environment.
The compiler compliance specified is 1.8 but a JRE 14 is used
“`
上記のようなエラーを吐かれてしまいま

元記事を表示

Spring Boot Flywayでmigration自動化をしてみる

前回の記事【[Gradleでdocker環境を構築する方法 for intelliJ](https://qiita.com/megumi_622/items/341cfbb684256e7c4dbc)】の続きで、アプリケーション起動時にDBにテーブル作成などを自動で行う設定をします。

前回の記事ではDBに**todo**というデータベースを作るところまでやりました。

## build.gradleの確認
pluginsに**flyway**とdependenciesに**flyway-core**があるか確認します。

“`gradle:build.gradle

plugins {
id ‘java’
id ‘org.springframework.boot’ version ‘2.3.1.BUILD-SNAPSHOT’
id ‘io.spring.dependency-management’ version ‘1.0.9.RELEASE’
id ‘com.avast.gradle.docker-compose’ version ‘0.12.1’

元記事を表示

例外処理だって構造化設計したい

# 動機
色んな例外処理の記事を読んだけど、腑に落ちなかったので、視点を広げて考察した。
「品質向上の為にいかに例外をシステムで生かすか」の観点でまとめる。

# 1. 例外について

## 1.1. 特徴
例外についての特徴を洗い出す。

– 原則、処理に必要な条件が満たされていない場合に発生する
– 例外クラスは、継承を利用して特化や汎化でキャッチ対象を制御できる
– 非検査例外であれば、無視できる
– データを付与できる
– 例外クラス名である程度の説明はつく(ex: NotFoundException)
– 構造化できる(例外をネスト可能である)

## 1.2. 例外の限界
例外の本質は、呼び出し側・例外発生側という関係において、
呼び出し側にメッセージ通知するという機能でしかない。リモートプログラムなど連携先であったりして、全ての原因を追跡するには工夫が必要。

そのまま利用すると

– 例外の発生側は、発生した事象を通知する事しか出来ない
– 例外のキャッチ側は、メソッドが失敗した事しか分からない
– スタックトレースで発生メソッドは特定できる

# 2. 原因調査を例

元記事を表示

いまさらEclipseでjavaのHelloWorld

#プロローグ
ガッツリ初心者向け
EclipseでJavaのHelloWorldを表示するだけ。

Eclipseはどのバージョンでも大した違いはないだろうけど、
この記事でやっているのは、Eclipse 2018年のPhoton

#やり方
「ファイル」の「新規」の「javaプロジェクト」を開く
1.png

プロジェクト名だけ適当に入れる。
Test1とした。
2.png

作成したプロジェクトのsrcで「新規」の「パッケージ」を開く

元記事を表示

rollメソッドにハマった

Calendarクラスのrollメソッドは、第一引数に日付のどの部分を変えるかを指定し、第二引数に変更値を指定します。

4/1が設定された変数があったとして、rollメソッドの第一引数に「日」、第二引数に「-1」を指定して実行した場合、変数の値はどうなるでしょうか?

日が1日戻るから3/31になりそうなものですが、実際は4/30になります。

addメソッドだと、3/31になるみたい。

元記事を表示

VSCode&Java開発環境構築で詰まった点

# VSCodeでも簡単にJavaのデバッグが可能!
構築手順については下記リンク参照。
https://qiita.com/takuma-jpn/items/b49785a314fb4db85775
# デバッグ時になぜかエラー
**Failed to launch debuggee in terminal with TransportTimeoutException**
手順通りにやったのにエラー↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482410/bb855b20-f155-70ce-fe31-a683d2a35721.png)

debugの際にターミナルを利用しようとするから的なことかな、ということで検索したところ
GitHubのissueを見つけた。
Ctrl+Shift+Pからユーザー設定を開き「java debug setting console」と検索。
デフォルトで「integratedTerminal」となっているが「internalConsole」を指定

元記事を表示

【IntelliJ IDEA】大文字/小文字の区別なしでコード補完候補を表示させる方法

IntelliJ IDEAのコード補完候補表示がとても便利でよく使っているのですが、デフォルトの設定では、クラス名のような大文字始まりの候補を表示させるためには、先頭の文字を大文字で入力する必要があります。

小文字で入力した例
小文字始まり

大文字で入力した例
大文字始まり

個人的には小文字で入力しても、大文字始まりのコード補完候補が表示されてほしいので、今回はこれを実現するための方法を紹介します。

## 環境
– IntelliJ I

元記事を表示

Javaで簡単な計算問題ゲームを作りました

# 足算ゲーム
ふと、脳を鍛える大人のDSトレーニングというゲームを思い出し
そのゲームに収録されていた足算をいかに早く解くかというトレーニングを
プレイしたくなったので自分でプログラムを書いてみました。
以下がそのコードです。

“`java:Main.java
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
int count = 0;
long start = 0;
long stop = 0;
long timeresult = 0;
Scanner sc = new Scanner(System.in);
System.out.println(“計算問題を出題します。”);
System.out.println(“10問出題されます。”);
Sys

元記事を表示

入門本では学べないJavaの実用的な書き方【同値検査編】

# はじめに

僕はIT系の専門学生で、まだ実務経験があるわけではありません。ですが、先生はもともとSEとPGをされていたそうで、実務的な書き方を教えてくださいます。その講義をもとに解説を書いています。

もし今そんな書き方しないよというような場合は、教えていただけるとありがたいです?

# 解説

同値検査とは、二つの値が等しいかどうかを判定するものです。この同値検査はプリミティブ型であれば問題ないのですが、参照型の場合は問題があります。

例えば、数値(プリミティブ型)の比較はこのような感じです。

“`java
int a = 1
int b = 1

if(a == b) {
System.out.println(“true”);
} else {
System.out.println(“false”);
}

//=> true
“`

**プリミティブ型**の比較は前述したように問題はありません。なぜなら、a, bそれぞれのメモリの番地に直接、値が格納されるからです。それに対し、**参照型**は以下のようになります。

“`java
String a = ne

元記事を表示

AWS CodeArtifactでJavaのライブラリを管理してみる

# はじめに
2020年6月にGAされたAWS CodeArtifact、大きいプロジェクトなんかで、共通のライブラリを管理するのにローカルリポジトリが欲しいけど、わざわざそのためにEC2立てたりコンテナ立てたりするのはな……と思っている人には大変使い勝手の良さそうなもの。

というわけで、今回は実際にAWS CodeArtifactに触ってJavaのライブラリを管理してみる。
せっかくだから、MavenとGradleで動かしてみるし、CodeArtifactと連携したライブラリのCI/CDまでやってみる。
お供になるのは、いつでも[公式のユーザーガイド](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)(なお、この記事を書いている時点ではまだ日本語マニュアルは存在しない)

あと、ユーザーガイドに書いてあるように、CLIは最新版にアップデートしないと使えないので注意。

# まずはリポジトリを作ってみる
サービス選択から“`CodeArtifact“`を検索してトップ画面にいき、「リポジトリを作成」ボ

元記事を表示

[Java]新仕様のYahoo!商品検索API実装

Yahoo!の商品検索APIが新仕様になるのでメモ。
https://developer.yahoo.co.jp/webapi/shopping/shopping/v3/itemsearch.html

検索ワードのエンコードが必要になり、JSONの構造が変わりました。
JSONを扱うためにJacksonを利用します。導入は各自で調べてください。

##やること
1.HTMLから受け取った検索ワードをAPIに送る。
2.JSONを受け取り必要な情報を抜き出してフォワードする。

###1.HTMLから受け取った検索ワードをAPIに送る。
旧仕様からの変更点として、UTF-8エンコードが必要になりました。

“`java:java
//アプリケーションID
final String appID = “アプリケーションID”;

//検索ワードをUTF-8エンコード
String query = request.getParameter(“searchWord”);
String encodedQuery = URLEncoder.encode(query, “UTF-8”);

//U

元記事を表示

Javaのメソッド呼び出しについての質問です。

Stage stageを仮引数とするメソッドを呼び出すためには実引数はどのような値にすればよいのでしょうか?

public class ShowGraph extends Application{
public static final String USER = “USER”;
public static final String PASS = “PASS”;
public static final String URL =”URL”;

@Override
public void start(Stage stage){
stage.setTitle(“RM推移”);
final CategoryAxis dayAxis = new CategoryAxis();
final NumberAxis RMAxis = new NumberAxis();
dayAxis.setLabel(“実施日”);

final LineChart lineChart =
new LineChart

元記事を表示

アリババクラウド機能計算のための依存ライブラリのインストール

この記事では、既存のツールを使用して、最小限の手動介入で**Function Compute**プロジェクトに依存ライブラリをインストールする方法を説明します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/installing-a-dependency-library-for-function-compute_594410)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#パッケージマネージャのインストールディレクトリ
現在、[Function Compute](https://www.alibabacloud.com/ja/products/function-compute)はJava、Python、Node.js環境をサポートしています。これら3つの言語のパッケージマネージャは、それぞれMaven、pip、NPMです。以下では、これらのパッケージマネージャのそれぞれのインストールディレクトリを説明します。

**Maven**
M

元記事を表示

EclipseでTomcatがタイムアウトエラーにしかならなくて悩まされた話

# はじめに
この記事は以前EclipseからTomcatが起動出来ない事案が発生した際の事をまとめます。
あまりにも原因が盲点な箇所でしたので、同じように悩んでいる人のヒントになりますように。
ターゲットとしては開発環境構築をしている人向けなので、初心者向けとなります。

#環境
OS:macOS Catalina(10.15.5)
Eclipse:Eclipse2020~2018
 ※原因の特定が出来なくて3バージョン程落としました

#事のはじまり
3ヶ月ほど前にstrus2を使用したWEBアプリケーションを作成しようとしていたのですが、長らく放置していたので続きを作るかという流れでごちゃごちゃ触っていました。
(ライブラリが多いのでmavenプロジェクトに移行するぞという意志)
POMの設定も終わり、いざサーバー起動するぞという所でいつもなら秒で起動するサーバーが何故か起動しない…
そのまま待っていると何故かサーバーのタイムアウトエラーになってしまいました。
スクリーンショット 2020-06-12 11.05.07.png

元記事を表示

Androidでシリアル通信を利用する

#はじめに
Androidでシリアル通信をする方法があまり紹介されていないので記載します。

##対象機器
Android
REX-USB60MB (USB-シリアル変換)

##対象環境
Android6.0
AndroidStudio
Kotlin

##ダウンロード

FTDI社のホームページから**Java D2XX Update including FT4222H support**の項目にある**here**をクリックしてライブラリをダウンロードします。
[FTDI社のホームページ](https://www.ftdichip.com/Android.htm)

ダウンロードした圧縮ファイルを解凍します

**ルート**フォルダにある**d2xx.jar**ファイルのみ使用します。
**res/xml/**フォルダにある**device_filter.xml**は中身が古いので使わずに作ります。

##d2xx.jarをライブラリに追加
プロジェクトツリーの1番上**Android**と表示されている右の▼をクリックして表示される一覧から**プロジェクト**を選択します。

元記事を表示

OTHERカテゴリの最新記事