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

JAVA関連のことを調べてみた2020年04月13日
目次

インターフェースのdefaultメソッド、ちゃんと使えていますか?

# はじめに
`Java 8`でインターフェースのdefaultメソッドが導入され、`Java 9`からはインターフェースにprivateメソッドも定義できるようになりました。
便利な機能なのですが、誤った使い方で濫用するとアプリケーションの保守性を下げてしまいます。では、どのような使い方が望ましいのでしょうか?

# 良くない例
“`java
public interface BadUsage {

void someMethod();

// (1) ミックスインや実装継承を目的としたユーティリティ的なもの
default String normalize(String str) {
return str.toUpperCase().trim();
}

// (2) 他のオブジェクトに依存した処理
default int getSomeValue() {
return Singleton.getInstance().getValue();
}
}
“`

上記サンプルコードの(1)は、

元記事を表示

どの8進数リテラルが使えるかはプログラミング言語によって異なる

(この記事は [地平線に行く](https://yujisoftware.hatenablog.com/entry/octet_literal) とのマルチポストです)

8進数を表記する文法は、主に以下の3つがあります。
(二番目と三番目は分かりにくいですが `ゼロ オー`[^octet] です)

* プリフィックスとして `0` を付与する (例: `0123`)
* プリフィックスとして `0o` を付与する (例: `0o123`)
* プリフィックスとして `0O` を付与する (例: `0O123`)

これらのうち、各プログラミング言語がどの文法を採用しているかを表にまとめました。

|言語|`0`|`0o`|`0O`|
|:–|:–:|:–:|:–:|
|C|○|×|×|
|PHP|○|×|×|
|Perl|○|×|×|
|Java|○|×|×|
|Scala (~2.9)|○|×|×|
|Scala (2.10~)|×|×|×|
|Kotlin|×|×|×|
|C#|×|×|×|
|Rust|×|○|×|
|Swift|×|○|×|
|Go|○|○|○|
|

元記事を表示

メソッドの作成方法

※下記内容は、UdemyのURL教材を元に学習しております。
https://www.udemy.com/share/101Wu4AEIbd1ZRRHoF/

メソッドとは

処理に名前をつけていつでも呼び出せるようにしたもの。
例えば、「Hello World」と10回記述したかった時、、、

“`java:method.jv
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out.println(“Hello World”);
System.out

元記事を表示

public static final Stringとして宣言された文字列定数が埋め込まれる

# 事象

文字列定数(`public static final String`)ばかりが定義されたクラス`Const.java`と、その定数を利用する`Main.java`があるとします。

“`java:Const.java
public class Const {
public static final String VALUE = “BEFORE”;
}
“`

“`java:Main.java
public class Main {
public static void main(String[] args) {
System.out.println(Const.VALUE);
}
}
“`

このふたつのjavaファイルをコンパイルし、実行すると、文字列定数`Const.VALUE`の値`BEFORE`が出力されます。

“`
C:\qiita> javac Const.java Main.java

C:\qiita> java Main
“`

ここで、文字列定数`Const.VALUE`の値が変更になったとします。

元記事を表示

試験投稿(Javaによるブロックチェーン向けSHA-256マイニング)

これは試験投稿です( ˶˙ᵕ˙˶ )
Javaを用いて、ブロックチェーンのSHA-256ハッシュ値のマイニングを実験中
![写真 2020-04-04 17 26 24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617906/5449014c-3d50-4fd3-792c-e68e1b9a20c5.jpeg)

– SHA-256によるハッシュ値計算
– ハッシュ値を求める入力データは、以下を文字列連結
– データ本体
– 任意の固定値(通常はタイムスタンプ)
– ノンス(SHA-256のマイニングの計算値の目的の値を求めるのに必要な正解値)
– 100000回、ノンスを1加算しつつ、ハッシュ値を計算する。
– ハッシュ値の先頭が「0000」ならば、それが目的の値となる(正解値)
– 100000回経過しても見つからない場合は、そのハッシュ値をブロックチェーンに用いる

実験環境:Java(openJDK 12+Eclipse)
大抵この難易度で、Windows 10(64bit)でCor

元記事を表示

Javaテストコードメソッド集

“`java:MyTestUtil.java
package domain.unofficial;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate;
import java.util

元記事を表示

【Java初心者】リソース・リーク<~~>が閉じられることはありません

#はじめに
学習開始してから1ヶ月程度の初学者です。
自分の知っている知識内で書いてますので他の考え方などあれば教えていただけたら喜びます。
また誤っている内容が含まれている可能性があります。

##目次
1.できたもの
2.作成中に考えたこと
3.作成中に起きた問題点と解決策
4.課題、改良点
5.コメント、教えていただきたいこと
6.おわりに

##今回の問題
![0412java問題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602209/a66c4cc9-3a80-546b-c578-7d644e7a2917.png)
[北ソフト工房より](http://kitako.tokyo/lib/JavaExercise.aspx?id=3)

##できたもの
switch文を使えばできそうと考えで約40分程度で完成しました。

“`
//北ソフト工房 Java練習問題
import java.util.Scanner;

public class Example {
public static

元記事を表示

Spring Boot + GitHub Search APIで簡単な検索フォームを作ってみました。

#記事を読む対象者
・初めて外部APIを使う方
・spring−boot初学者

を想定して書いています。

#目的
各企業がマイクロサービスを作って、外部APIとして提供していることは多いかと思います。
その中で、外部APIを自分のサービスに取り込む時に、クライアントライブラリの使い方、Json形式のデータからJavaオブジェクトへのマッピング等の基本となる使い方を学んでおくことで、今後の業務に役立てたいと思っています。

#成果物

![GithubAPITest.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537759/e764d0fb-aea3-5116-427e-c7163399c91c.gif)

GitHub Search APIを叩いて、リポジトリを言語別に検索し、リポジトリ名とユーザー名、リポジトリの概要を取得、表示する内容になっています。

#環境
FW:spring-boot 2.2.5
テンプレートエンジン:thymeleaf 3.0.4
HTTPクライアントライブラリ:

元記事を表示

【2020年版】Android Studio Javamailを使ってメールを送信する方法

[Android ゼロからJavamailを使ってメールを送る方法](https://qiita.com/usatie/items/e71b9bb34963b74a8b57)を参考にAndroid Studioでアプリから直接メールを送信するプログラムを書いてみましたが、エラー続出でビルドできませんでした。
検索しても大体の記事が2017年以前に書かれたもので(私のやり方が悪かったのか、もう時代遅れなのか)どれもうまくいかないので、最新の導入方法を探ってみました。

###結論:jarファイルをダウンロードしてライブラリにインポートするやり方はもう古い!
調べて見つかった記事によく書かれている方法は、javamail-androidから3つのjarファイルをダウンロードしてきて、手動でAndroid Studioのlibsフォルダーにコピーして導入するものでした。
しかし、そんな面倒なことをしなくてもbuild.gradleに記述するだけで導入できることが分かったので、やり方を書いておきます。

##:one: AndroidManifest.xmlに記述(インターネットアクセス許可)

元記事を表示

Java String の等価演算子(==)と初期化の関係について。初心者向け

Java 初心者にとってStringに対して等価演算子(==)の意味が”同じ値かどうか”をみるのではなく、
”参照先が同じかどうか”を見ることだというのは一つの学びのポイントであると思う。

“`Java:Test1.java
public static void main(String[] args) {
String str1 = “100”;// ⓵
String str2 = new String(“100”); // ⓶
System.out.println(str1 == str2); //Falseになる。
}
}
“`

このときfalseになるのは理解した。でもStringて⓵でも⓶でも初期化できるわけで。
どういうときに参照先が同じになるのか。例えば、以下。

“`Java:Test2.java
public static void main(String[] args) {
String str1 = “100”;
String str2 = “100”;
System.out.println(str1 == str2); //Tr

元記事を表示

文字コードの違いはアプリケーションが吸収する

## 概要
先日、文字コードについて考えているとき、ふと以下のような疑問を持ちました。
>「バイト列は文字コードによって異なるはずなのに、コンピュータはどうやってそれを認識しているのだろう?」

私自身実力不足で、この疑問を持ちましたが、今回は勉強したことをまとめてみました。

## 結論
結論としては、我々が入力するプログラムの文字コードの違いは、コンパイラ等のアプリケーションによって一意のバイト列に変換されるため、**プログラムの文字コードはCPU等のハードウェアに影響を与えないということが言えます。**

### 本来の私の想定
![図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/34594c59-e1fd-03b6-90ce-427f09bc6de8.png)
### 実際の動き
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/bdb3ea8e-2286-6b8a-5538-

元記事を表示

【salesforce】Tooling APIで静的リソースの登録と更新(Javaサンプル)

#Tooling APIとは

 Tooling APIは、Force.comアプリケーション用のカスタム開発ツールを構築できるSOAPおよびRESTインターフェースを提供します。
 今回はTooling APIでSOAP APIを利用して、静的リソースの登録と更新を行います。Enterprise WSDLを利用します。

#開発流れ

  1. Enterprise WSDL生成及び取得
  2. 必要なJarファイルをプロジェクトにインポート
  3. 1で取得したWSDLにより、Enterprise Jarファイルを生成及びプロジェクトにインポート
  4. ソース実装

#説明
## 1. Enterprise WSDL生成及び取得
  Salesforceのマニュアルをご参照ください。
  ※[ステップ 1: 組織の Web サービス WSDL の生成または取得](https://developer.salesforce.com/docs/atlas.ja-jp.salesforce1api.meta/salesforce1api/meta_quickstart_get_WS

元記事を表示

【初投稿】体育大第二新卒が未経験でプログラマーになる話

#はじめに
Qiita初投稿となります。
投稿目的はプログラミング初学者の情報共有です。
学習に力をいれたいので1日30分程度の予定です。
投稿は細かいペースで簡素なものになると思います。

##自己紹介
学歴          :体育大 
年齢          :第二新卒
プログラミング経験   :なし
勤務先         :1500人規模の中小SI企業
部門          :アプリ、ソフトウェア開発 のはず……
学習言語        :Java SQL 
学習期間        :1ヶ月半程度

##目的
プログラミング初学者による学習の共有とコミュニティーへの参加です。
同じような境遇の方からメンターの立場の方へ
マインドを公表していけたらと思います。

私は今年の4月より入社して3カ月間は研修期間です。
プログラミング研修の中で人によってソースコードの書き方が全然違うことに気づき、
自分の学習にすごくためになると思いましたが……

**コロナ来襲**

今週からテレワークでの自己学習に移り変わりました。
自己学習だけではまずいと思い投稿を始めることにしました。

元記事を表示

【AndroidStudio】TextClock使用時にデザインビューが表示されない件について

# 概要
先日、AndroidStudioの最新版(3.6.2)をインストールしたのですが、前環境で作成していたアプリのデザインビューが表示されなくなってしまいました。
エラーを確認してみると、「Render problem」と示されています。

いろいろ調べたところ、原因はTextClockの使用にあるみたいです。
stackOverflowの情報ですが、これはAndroidStudioのバグだと思われます。

英語のソースがあるのでわざわざ書くことでもないと思いましたが、私がそれで時間を食ってしまったので、共有させてください。
また、初投稿ですので至らぬ点がございましたらご指導のほどよろしくお願いいたします。
<参考文献>
“TextClock render problem in layout preview”
https://stackoverflow.com/questions/60565227/textclock-render-problem-in-layout-preview

# 解決策
これは根本的な解決ではなく、あくまでも対処であります。
[stackOverflow

元記事を表示

javaのコンストラクタを理解する

##はじめに
簡単なことからコツコツとjavaのアウトプットをします。
javaシルバーに合格することを目標に勉強中。

##コンストラクタとは
インスタンス化されたときに必ず実行されるメソッド
変数の初期化などに使用される。

##書き方
“`
修飾子 コンストラクタ名(){
処理内容
}
“`

コンスタラクタ名はクラス名と同じになる。

##書いてみる
“`Main.java
class Cat {
String name;
int age;

//コンストラクタ
Cat() {
System.out.println(“newされると実行されるにゃ〜”);
}
}

public class Main {
public static void main(String[] args) {
Cat obj = new Cat();
}
}
“`

実行結果

“`
newされると実行されるにゃ〜
“`

newした際にコンストラクタが正しく実行されています。

引数を渡すこともできます。

“`Main.java
class Cat {
S

元記事を表示

for文、if文について

※下記内容は、UdemyのURL教材を元に学習しております。
https://www.udemy.com/share/101Wu4AEIbd1ZRRHoF/

if構文を使った処理

ある条件を満たした場合に処理を実行したい場合使う関数。
基本の書き方は以下、

if(条件){
trueの場合に実行したい処理
}

また、falseの場合の処理の設定も可能。
その場合は以下

if(条件){
trueの場合に実行したい処理
}else{
falseの時に実行したい処理
}

for文

繰り返し処理を行える。
基本の書き方は以下、

for(初期値; 条件範囲; 変化式){
繰り返し処理したい内容
}

コードの反省点

偶数だけを二乗して出すと言う課題の処理で、以下のコードを書いた。

for(i = 0; i <= 20; i++){ if(i % 2 == 0){ System.out.printf("%d * %d = %d", i, i, i*i).println(); }} 0 *

元記事を表示

Spring徹底入門のバージョンアップメモ

SpringFrameworkを学ぶには良書と呼ばれる「Spring徹底入門」。
チュートリアルを実装しながら学ぼうとするも、
自分の環境とは異なってつまずくことがあったのでメモしておく。
わかる範囲で直してはみたものの、まだあるかも・・・?

## 環境
| | 本 | 自分の環境 |
|:———————————|:———-:|:——–:|
| Spring Framework | 4.2.6 | 5.2.3 |
| Spring Boot | 1.3.5 | 2.2.4 |
| Thymeleaf | 2.1.0 | 3.0.4 |
| thymeleaf-extras-springsecurity4 | 2.1.2 | – |
| thymele

元記事を表示

自分の為のJava環境設定まとめ[mac]

#OSの選択

Windowsで使う人のが多いと思うけど、個人的な趣味でmacを選択。
めんどいことも多いのでVRとかグラフィック系の処理をしない限りはmacを使ってる。

# Javaインストール

Javaって言っても色んなのあるけど、今回はopenJDKを使う。
Javaのオープンソース。

例えばjava11使いたいなら 「11.0.2 (build 11.0.2+9)」とか選択して入れる。
http://jdk.java.net/archive/

こんな感じで適当な場所に設置。

“`
mv ~/Downloads/jdk-11.0.2.jdk/ /Library/Java/JavaVirtualMachines/
“`

# 環境変数の設定

JAVA_HOMEとPATHを設定

“`:.bashrc
#java
#export JAVA_HOME=”/

元記事を表示

Spring Bootでwebアプリを開発、独立したTomcatサーバーへwarを配置する場合の注意点(個人的メモ)

####Spring Boot開発で、warのみ別APサーバーへ配置した経験がなかったので、調べた内容をメモしておきます。

以下、@TEBASAKIさん投稿の下記記事から抜粋させていただきました。
[Spring Boot解説第4回\(開発環境編:warファイル作成\)](https://qiita.com/TEBASAKI/items/7a22c8b6ac6eb5f1c304)
※Spring bootのバージョンにより、build.gradleの記述方法が異なる様なので注意ください。

####1. プログラム修正
– ApplicationクラスへのSpringBootServletInitializerの継承追加。
– SpringApplicationBuilderメソッドのオーバーライド。

####2. build.gradleの修正

– Spring bootでwebアプリを開発する際、単純にビルドしてできたwarには、組み込みTomcatが含まれてしまう。これを回避する定義を追加する。

####3. Gradleタスク(war)実行

– Gradleタスク(

元記事を表示

printf/引数/変数/型に関して

printf

printfは、引数を渡すことができる

<引数を渡すことができるとは?>
自らが作成した定型フォーマットに対して、設定した文字を自由に入れることができる。
JavaScriptで言うところのテンプレートリテラルに値する??。

ーJavaのprintfの場合
int num = 5;
int num2 = 10;
System.out.printf(“%d + %d = %d”, num, num2, num + num2).println();


5+10=15

変数と型

変数とはデータを一時的に保管する箱のような物。何度でも変更がかけられる。
どの型で変数を指定するかによって、中に入れられるデータの種類、容量(文字数)が変わる。
また、変数名は基本的には自由に決めることが可能だが、いくつかのルールがある。

<変数の型の種類>
byte:より短い数字(大体2桁くらいまで)
short:4桁くらいまで
int:9桁くらいまでの数字
long:世界人口などの大きい桁数
float:浮動小数点。よく分からんが、あんま

元記事を表示

OTHERカテゴリの最新記事