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

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

なぜjavaでfinal class A{abstract class B{}}が許されるのか

javaでは、抽象メソッドを持つクラスは必ず抽象クラス(かインタフェース)になると決まっている。
**しかし抽象内部クラスを持つクラスは、別に具体的クラスでも構わないのである**。

例えば次のようなコードは実行可能である。

“`java:java
final class A
{
static abstract class B{String str=”hoge”;}
}

public class Main
{
public static void main(String…args)
{
System.out.println(new A_B().str);
//System.out.println(new A.B(){}.str); (匿名クラス)でも別に良い
}
}

class A_B extends A.B{}
“`

# もし具体クラスが抽象内部クラスを持てなかったら

一見矛盾する仮定ではありますが、「マクロ(全体)に多様性を認めたくないが、ミクロ(細部)に多様性を認めたい」という場合を考えます。

元記事を表示

初心者から始めるJava、オーバーライド

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
~~**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの~~。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

##環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#オーバーライド
前回でスーパークラスとサブクラスの関係は扱った。

サブクラスにはスーパークラスのメソッドが継承されているが、同じメソッド名を使いながら別の処理を定義したいということがある。
例えば`show〇〇()`でメンバをチェックするためのメソッドを用意する場合。同じチェックするにしても`watch〇〇(),see〇〇(),check〇〇()`と使い分けを作ることはできるだろう。だが、引数や型がそれぞれ違うとなれば覚えて使うのが非常に困難になるし、それだけコードが無駄に長くなれば可読性も落ちる。
サブクラスには、**スーパークラスで実装されたものと全く同じメ

元記事を表示

AWSとオンプレのタイムラグ

検証環境
Red Hat Enterprise Linux release 8.1 (Ootpa)
Tomcat-9.0.30
PostgreSQL 10.7
Aurora PostgreSQL 10.6

下記プログラムの実行結果。10回実行の平均値。オーバーヘッド検証のためレコード件数は数件。
Linux内ローカル:541マイクロ秒
マシン内ローカル(vmホストのWindowsとvmゲストのLinux):988マイクロ秒
自宅マシン(横浜)、AWS東京リージョン(Aurora PostgreSQL)のリモート:7304マイクロ秒

Oracleの場合はJDBCドライバのfetchサイズが小さい(デフォルト10)ので要チューニング。
アプリケーションのレスポンス要件に応じて大きくしたほうがよいです。
とある環境ではオンプレとAWSで38ms(pingのレスポンス時間)だったのでプロトコルオーバーヘッドが相応に大きいケースも考慮にいれるべき。

“`
package test;

import java.io.IOException;
import java.io.PrintWri

元記事を表示

Javaでネットワークインターフェースにアクセスする

# TL;DR

* Javaでネットワークインターフェースにアクセスするには、`java.net.NetworkInterface`を使用する
* ネットワークインターフェース名や、`InetAddress`、Macアドレスなどが取得可能

やったことがなかったので。

# 環境

Ubuntu Linux 18.04 LTS上で、

“`shell
$ uname -srvmpio
Linux 4.18.0-25-generic #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
“`

Java 11。

“`shell
$ java –version
openjdk 11.0.6 2020

元記事を表示

javaのstreamとかラムダ式とかFunctionとか配列とかListやMapとかをこれから実践していくつもりです

# -1.お断り
勉強中の身ながら執筆しております。
下書きが10個たまってしまってこれ以上下書きが増やせないので、全然内容がないけどもう公開しちゃいます。
ここに乗っているのが最適とは限りません。
コメント等いただければ嬉しい限りです。

また、各メソッドについて、所属するクラス名は`Test`とします。
また、`import java.util.Arrays;`, `import java.util.Stream;`をしてください。

# 0. List⇔配列

## 0-1. List\ → Hoge[]
“`java
static class Hoge{String s;Hoge(String s_){s=s_;}String f(){return s;}}

static Test.Hoge[] hoge_list_to_array(List hoge_list)
{
//return (Hoge[]) hoge_list.toArray(); ←ダメな例
return hoge_list.toArray(Test.Hoge[

元記事を表示

Minecraft modding 1.12.2で参考になるサイトまとめ

#導入
####intelij IDEAのプラグインを利用してコマンドを一切打たずに簡単に導入する方法
https://qiita.com/Hiroya_W/items/7ad9bad0387ef3688d1e
####動画で基本的なMOD製作が学べる(英語)

####ブロックの追加からTileEntitySpecialRenderまで、幅広く学べるサイト
https://shadowfacts.net/tutorials/forge-modding-112/
####サイトのコード
https://github.com/shadowfacts/TutorialMod
1.12.2では、setUnlocalizedNameをsetTranslationKeyにする、などの変更が必要です、またCreativeTabの追加はエラーが多いので、削除して、他のサイトをもとに作成するのがいいかもしれません。面倒な変更はありますが、

元記事を表示

初心者から始めるJava、継承

追記2020/3/16
クラス名のつけ方で間違いがあったことを、コメントで指摘いただいたので訂正。

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
~~**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。~~
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

##環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#クラスの拡張
今まで書いてきたクラスはどれも独立して書かれたものだったが、毎回メンバ(フィールドとメソッド)を設定する必要があった。`Cat`クラス程度ならば頑張れば作れるだろうが、膨大なメンバ(フィールドとメソッド)を持つクラスを毎回すべて書くのは現実的ではない。
Javaは、既存のクラスが持っているメンバをそのまま引き継ぎつつ、独自のクラスを作るための**クラスの拡張(extend)**機能がある。

“`Java:extendedHousecat
clas

元記事を表示

EclipseのCheckStyleでCheckstyle execution failed due to an internal error.となった時の取あえずの対応方法

※. このページには、根本的な解決方法は書いていません。解決方法のわかる方は教えてください。

EclipseのProblemビューにエラーが出た。
何年も続いているプロジェクトをインポートするとちょくちょく出る。

|Discription|…省略…|型|
|:-:|:-:|:-:|
|Checkstyle execution failed due to an internal error. Please check the error log for details||Checkstyle 問題|

[Javaのソースで見つけた CHECKSTYLE:OFF って何?から知るCheckstyle](https://qiita.com/ponsuke0531/items/effcdbf890f850030ba3)なんてQiitaに投稿しちゃうぐらいCheckStyleがわかっていない。
このエラーが出ていても動く・・・がプロジェクトに赤×印が出ているのは嫌。

このエラーが出たら取あえず`{ワークスペースのディレクトリ}/.metadata/.log`を見てみます。

# 事

元記事を表示

【アルゴリズム入門】Javaで挿入ソートを実装する

スケベな物の見過ぎだと思いますが挿入という文字列を見るだけでよからぬ気持ちになりますね。

挿入ソートは基本のソートアルゴリズムの一つで、配列を整列済みの部分と未整列の部分に分けてソートを行うものです。

##*ソースコード*

“`InsertSort.java

clas InsertSort {
public static void main(String[] args) {
int[] data = {30, 60, 70, 90, 20};
sort(data);
for(int element : data) {
System.out.println(element);
}
}

public static void sort(int[] data) {
for(int i = 1; i < data.length; i ++) { int temp = data[i]; int j = i; while(i > 0 && temp < data[j - 1]) {

元記事を表示

Visual Studio CodeによるSpring5 MVC Webアプリ開発 SQLServer接続編

#はじめに
[HelloWorld作成編](https://qiita.com/t_skri/items/24d0d353771735b453f7)で作成したプロジェクトを拡張していきます。
SQLServerは[こちら](https://qiita.com/t_skri/items/8d69c423042e310434d0)で作成したDB、テーブルを流用します。

#環境
OS:Windows 10 Pro 64bit
Editor:Visual Studio Code 1.42.1
JDK:AdoptOpenJDK 11.0.6+10 x64
Apache Maven:v3.6.3
Apache Tomcat:v9.0.31

#プロジェクト作成
HelloWorldで作成したプロジェクトを「D:\JAVA\Project\sqlSample」にコピーして作成しました。

#pom.xml
SQLServerにアクセスする為に必要なRepositoryを追加する。

“`

org.springframework

元記事を表示

【Java】初めてのJava学習:その1 Javaってなんぞ?から変数の基礎まで(基礎・コード)

# 最初に
自身で学習してきた内容を書き出していきます。
基本的には自分自身でわかるような内容になりますので、ご容赦ください。
また、誤っている点がありましたら、コメントにてご指摘ください。

(要確認)マークがあるものは、「実行前に必ずググる」べき内容。

# ⚠️今回はインプット寄りの投稿です⚠️
今回は、外部サイト「[Progate](https://prog-8.com/)」にて学習した内容を吐き出します。

# index
– Javaってなんぞ
– 試しにコードを書いてみた
– データ型
– Javaでの変数

# Javaってなんぞ
世界中にたくさんの開発者がいる有名な言語のなかの一つ!
大規模システム、Webアプリケーション、スマートフォンアプリなど、Javaはあなたの周りの様々な場所で使われている。

そして・・・
**⚠️JavaとJavaScriptは全くの無関係である⚠️**

# 試しにコードを書いてみた
#### やりたいこと:「文字列」を、コンソールに出力させたい。

“`java:Main.java
class Main { // ここ

元記事を表示

JdbcTemplateで@OneToMany的な振る舞いをさせる

## TL;DR
ORMにを頼らずNamedParameterJdbcTemplateとRowMapperを組み合わせて結果を取得するシステムでOneToManyなデータの持ち方を実現したい場合はResultSetExtractorを実装したクラスを作ればいいが、構造が複雑になりがちなので新しいシステムを作る時は素直にJPA等に頼ったほうが良い

## 問題点
Spring JDBCには `NamedParameterJdbcTemplate`等のクラスをDIすることで気軽にクエリを発行できる仕組みがある。

“`java

@Repository
public class HogeRepository {

@Resource
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

@Override
public HogeWithPiyo findAll() {
return namedParameterJdbcTemplate.query(“SELEC

元記事を表示

オブジェクト指向プログラミング(素人が浅い知識でまとめさせていただきました)

#クラスとインスタンス(オブジェクト指向)
クラスはくくり、インスタンスはくくりのルールで定義された物。
イメージは車というクラスからプリウスというインスタンスを生み出すって感じ。

#####クラス内でやる事
インスタンスが持っておくべき変数や関数を定義する。
またインスタンス作成時にどのように初期設定をするか書かれる。
→コンストラクタ関数を定義し、引数をもらって初期値を作れるようにする。
→インスタンス作成時に引数として値を渡して、各インスタンスに変数の初期値を入れる。

“`Java
class Person {

private Stirng name; //ここではインスタンスに必要な変数が用意されている。

Person(String name, …) { ////()内に必要な引数を入れられる。インスタンス作成のための初期設定がいろいろ書かれる…
}

public void detailData() { //ここでインスタンスに必要な関数が書かれる
}
}
“`

#####補足
・クラス内で書かれているthisは、作られたこのインスタンス自身

元記事を表示

【初心者向け】今度こそわかるDI〜DIの基礎とSpringにおけるDI〜

## はじめに
DIとはDependency Injectionの略であり、日本語では「依存性の注入」と訳されることが多いです。

新卒だったころにSpringに触れた私は、初めてこの概念を聞いた時に頭に浮かんだのは、はてなマークでした。DIの概念やDIコンテナ、Springにおけるアノテーションとの結びつきがピンとこなかったのです。

今回は初心者だったころの自分にあてて、DIの概念およびSpringにおけるDIについて自分なりに整理しつつ、簡単にまとめていきたいと思います。

##依存性(Dependency)とは
依存(性)とは何かということはソースコードで示したほうがわかりやすいと思います。

“`java:Main.java
public class Main {
public int hoge() {
var sub = new Sub();
return sub.calculate();
}
}
“`

Mainクラスのhogeメソッド内で、Subクラスのインスタンスを生成し、利用しています。
このようなMainクラスが

元記事を表示

デプロイ失敗

エラー内容

[INFO] ————————————————————————
[INFO] BUILD FAILURE
[INFO] ————————————————————————
[INFO] Total time: 2.360 s
[INFO] Finished at: 2020-03-15T14:42:24Z
[INFO] ————————————————————————
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on

元記事を表示

twitter4j使用ソースをデプロイしたら失敗した

■twitter4jをデプロイしたら失敗した

■エラー

[INFO] ————————————————————-
[ERROR] COMPILATION ERROR :
[INFO] ————————————————————-
[ERROR] /tmp/build_a4ed9f5ff44d78cc39ef296374348ae6/src/main/java/dev/GetTweetTest.java:[9,17] package twitter4j does not exist
[ERROR] /tmp/build_a4ed9f5ff44d78cc39ef296374348ae6/src/main/java/dev/GetTweetTest.java:[10,17] package twitter4j does not exist
[ER

元記事を表示

[開発]Javaフレームワーク比較

個人メモ

# 【Javaフレームワーク】
| No | フレームワーク | 開発 | 公開年 | バージョン(確認日時) | 概要 |
|—-|—————————————————————–|—————-|——–|———————-|———————————————————————|
| 1 | [Play Framework](https://www.playframework.com/) | Guillaume Bort | |

元記事を表示

Spring SecurityでDB認証&BCryptでハッシュ化

# 概要
* Spring Securityで必要最低限のログイン機能を実装する。(権限周りは触れません。)
* ログインフォームなどはSpring Securityで用意されているものを使う。
* 仕組みはあまり理解できていないので、また別でまとめます。
* この投稿はとりあえず、動くようになったというところまで!

# 開発環境
* OS:Windows10
* IDE:eclipse 2019-12
* Java:13
* Spring boot:2.2.5(Gradle)
* DB:Oracle 12c

# Spring Securityの導入
## 依存関係で下記の4つを選択
* Spring Security
* Spring Web
* Spring Data JPA
* Oracle Driver ←使用するDBのDriverを選択してください
![2020-03-15-14-06-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364697/5974c5b7-

元記事を表示

Summary of information about OpenJDK and JDK Distributions #minjava

# Introduction
*The original contents is written in Japanese [“OpenJDKと各種JDKディストリビューションの情報源まとめ #minjava”](https://qiita.com/yamadamn/items/2dd26a014791b9557199). If the translation is strange, please send edit requests to this article. Linked contents may be in Japanese.*

—-

This article is part of the Mar 13th, 2020 publication [“Everyone’s Java” (‘Minna-no-Java/a.k.a minjava’ in Japanese)](https://gihyo.jp/book/2020/978-4-297-11199-1) tie-up campaign. 😀

OTHERカテゴリの最新記事