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

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

JDBC基礎

“`DBManager.java

package jp.co.sss.jdbc.chapter01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBManager {
/** ドライバクラス名 */
private static final String DRIVER = “oracle.jdbc.driver.OracleDriver”;
/** 接続する DB の URL */
private static final String URL = “jdbc:oracle:thin:@localhost:1521:XE”;
/** DB 接続するためのユーザ名 */
private static final String USER_NAME = “jdbc_user”;
/** D

元記事を表示

JAVA 継承

“`Constant2301.java

package lesson23;

public class Constant2301 {
public static final String POLICE = “警察官”;
public static final String TEACHER = “教師”;
public static final String CHEF = “料理人”;
}

“`

“`Chef2301.java
package lesson23;

public class Chef2301 extends Worker2301 {

public Chef2301(String name, int age) {
super(Constant2301.CHEF, name, age);
}

public void doWork() {
System.out.println(“食事を作ります。”);
}
}

“`

“`Display2301..java
package lesson23;

public class Displ

元記事を表示

[Java]Android Fragment間のデータ受け渡し Bundle vs ViewModel

# 目的
Android, Javaで開発するにあたり、Fragment間のデータ受け渡しにBundleとViewModelどちらを使うべきか指標を明示する。
※ただしデータの値は変更しない前提です。

# 結論
Bundle:Fragment間で受け渡すデータ数が少ない場合
ViewModel:Fragment間で受け渡すデータ数が多い場合
のように使い分けるのが良いと思います。

# はじめに
初めてAndroid開発をしたときに、Fragmentから別Fragmentにデータを受け渡すとき、メジャーな方法としてBundleとViewModelがあると知りました。
両方使ってみて、それぞれの利点・欠点が少し分かったので、まとめてみます。
ちなみに筆者は最初はBundleを使いまくっていたのですが、以下に記載する欠点により、ViewModelをメインで使うようになりました。

# Bundle vs ViewModel
BundleとViewModelの利点・欠点をまとめます。

| |Bundle|ViewModel|
|—|—|—|
|利点|データの定義が不要

元記事を表示

[Java] 匿名クラスとインスタンスイニシャライザを使って初期化したデータのシリアライズに失敗した話

以前セッション管理の方法をメモリからDBに変更した際に、シリアライズ周りでエラーが起きたのでそれの原因と対策についてまとめる。

## 前提

Javaではデータの初期化に下記のような方法がある。

“`java
List animals = new ArrayList<>() {
{
add(“いぬ”);
add(“ねこ”);
add(“たぬき”);
}
};
“`

これは匿名クラスとインスタンスイニシャライザを使って初期化を行うという方法である。
通常Listの初期化には`List.of()`, `Arrays.asList()`などを使うが、これはimmutableなListを作成するため、後から要素の追加などが出来ない。
しかし、匿名クラスとインスタンスイニシャライザを使えばArrayListのサブクラスとしてインスタンスを作成するため、その後の要素の追加が可能になる。

## 起きたこと

Serializableを実装したSchoolオブジェクトをシリアライズしようとしたエラーが発生した。

“`java:School.java
/

元記事を表示

Javaのマルチスレッド実装例(前編)

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の1日目の記事です。

こんにちは、シアトルコンサルティングの長岡と申します。
この度、弊社シアトルコンサルティング株式会社でAdvent Calendarに参加することになりました。

よろしくお願い致します!
## はじめに
今回はJavaにおけるマルチスレッドの実装例を紹介します。
実務でシングルスレッドからマルチスレッドへの改修案件に携わったこともあり、振り返りついでに紹介します。
前編は基本的な実装例、後編では実装の注意点について実装例を交えて紹介します。
エンジニアになって初めて担当させて頂いた案件で、駆け出しエンジニアの方たちにも理解できる内容だと思うので、ぜひ読んでみてください!

## マルチスレッドとは
Javaが採用している並行処理プログラミングのモデルが「マルチスレッド」と呼ばれています。
本来プログラムは上から下に順に処理していきますが、マルチスレッドを

元記事を表示

JavaでKotlinと同じくらい安全なコードを書く(前編)

この記事は`Kotlin Advent Calendar`の1日目の記事です。

https://qiita.com/advent-calendar/2021/kotlin

この記事の内容は完全に`Java`ですが、現在`Java`を書いている人が`Kotlin`を導入するきっかけになることを目指して書きますのでご容赦ください。

# 前書き
`Kotlin`の`Java`に対する大きな利点の1つは、コードの安全性を簡単に担保できることです。
一方、安全性はアピールが難しく、「安全だから`Kotlin`を導入したい!」と主張しても「それ、`Java`でもできるのでは?」「どれ位メリット有るの?」と突っ込まれることも有るでしょう。

実際、自分が経験した限り`Java`でも安全なコードを書く(正確には、書ける環境を整える)ことは可能です。
一方、それを実現するには非常に大きな労力が必要で、現実的には安全性を妥協する部分が出てくると思っています。

このシリーズでは、`Kotlin`の導入材料の1つになれることを目指しながら、`Java`で安全なコードを書く大変さと、`Kotlin`で安

元記事を表示

Java 17で追加されたHexFormatクラス

この記事は[SRA Advent Calendar 2021](https://qiita.com/advent-calendar/2021/sra)の1日目の記事です。

こんにちは! 関西事業部の佐々木です。

#3年ぶりのLTSバージョン
2021年の9月にリリースされたJava 17は、2018年リリースのJava 11以来のLTSバージョンになります。
(実際にLTSとするかどうかはJDKのディストリビュータによりますが)
LTSなので当然適用されることも多くなりそうなJava 17ですが、どのような変更点があるのか気になるところです。
JDK 11からの全ての追加APIを知りたい場合は
https://docs.oracle.com/en/java/javase/17/docs/api/new-list.html
を参考にしてもらうとして、この記事では個人的によく使うことになりそうな **HexFormt** クラスを紹介したいと思います。

#16進数表記用のクラス
ここ数年私が関わっているプロジェクトでは「16進数表記」を使う機会がとても多く、バイト配列と16進数文字列

元記事を表示

僕とMavenの3650日

# Mavenって何

MavenはJavaのビルド・パッケージングツールです。誤解を恐れずにいうならばJavaプログラムの **「ビルドサイクルマネージャ」**ともいえます。今回はこのMavenについてまとめていきます。

いつものことですが、この文書には「本当ではないこと」が含まれています。理解しやすさを優先して経緯の時系列や仕様など丸めながら再考しています。読んでくれた方の興味関心に少しでも応えられたらうれしい限りです。

## Mavenと僕

僕の今の会社での最初の仕事は、Javaのプロジェクトをコンパイルすることだった。大規模な金融バックシステムをコンパイル、パッケージングするためのビルドツールとして僕はAntをを選んだ。Antはきちんと仕事をして、予定通り動作しリリースすることがきた。Subversionと連動したこの自動ビルド・リリースの仕掛けは、当時としてはちょっとした物だったけど、私のオリジナルだったことからなかなかに手離れが悪いものとなった。以後数年このビルドシステムの子守を僕がすることになってしまった。

**「Ant書けるなんてすごいじゃん。ところでMaven

元記事を表示

SpringSecurityログインページをカスタマイズする

#はじめに
SpringSecurity その2です。今回はログインページをカスタマイズしていきます。
完全に理解することができていない為、不備等あるかもしれませんがご了承ください。

#SpringSecurityシリーズ 項目表
|NO |タイトル |
|—-|————————–|
|その1|[SpringSecurity導入から基本的な認証フロー](https://qiita.com/ryo0527/items/dbdbb2a476cc74e9116b)|
|その2|[SpringSecurityログインページをカスタマイズする](https://qiita.com/ryo0527/items/2ee963cea31e82fd3dc5)|
|その3|DBアクセス処理実装 (現在執筆中)|

前回の続きからとなる為、その1を実装後にご覧ください。

#実装
###SpringSecurity設定
ログインページをカスタマイズするための設定を追加します。

“`java:SecurityConfig.j

元記事を表示

SpringSecurity 導入から基本的な認証フロー

#はじめに

Javaの学習を始めて最も躓いた`SpringSecurity`について調べ実装することができたので、記録として残しておきます。
完全に理解することができていない為、不備等あるかもしれませんがご了承ください。

#SpringSecurityシリーズ 項目表

|NO |タイトル |
|—-|————————–|
|その1|[SpringSecurity導入から基本的な認証フロー](https://qiita.com/ryo0527/items/dbdbb2a476cc74e9116b)|
|その2|[SpringSecurityログインページをカスタマイズする](https://qiita.com/ryo0527/items/2ee963cea31e82fd3dc5)|
|その3|DBアクセス処理実装|

#実装

### 依存関係の追加
SpringSecurityを使うには、`spring-boot-starter-security`を追加します。
※今回はmavenでの実装とします

元記事を表示

Java tomcat setenv.sh

“`bash

cd /usr/local

curl -OL –header “Cookie: oraclelicense=accept-securebackup-cookie” “http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz”

tar xvzf ./jdk-8u131-linux-x64.tar.gz

mv jdk1.8.0_131 java

export JAVA_HOME=/usr/local/java

echo $JAVA_HOME

/usr/local/java

/usr/local/tomcat/bin/

#メモリ見ときましょう
free

vi setenv.sh

-Xmx 最大ヒープサイズ(最大メモリ使用量)
-Xms 初期ヒープサイズ(初期メモリ使用量)
-Xss プロセスに割り当てられるスタックサイズ(228k以上必要になります)

参考にするとこんな感じかな

元記事を表示

[Effective Java 第3版]項目18 – 継承よりもコンポジションを選ぶ

継承はコードを再利用するには便利な機能ですが、常に既存のメソッドを継承し、拡張することがベストな方法とは限りません。
サブクラスとスーパークラスが同じ開発者の管理下にあり、同じパッケージ内にある場合は比較的安全といえます。
しかしパッケージをまたがり具象クラスを継承することは危険です。

#継承の不適切な使用例
HashSetが生成させてからいくつ要素が追加されたかを確認するため、getAddCountを実装します。
要素の挿入回数 addCountをフィールドに保持し、HashSetクラスの要素を追加できるaddとaddAllをオバーライドし要素が追加されるとaddCountをカウントアップします。

“`Java:InstrumentHashSet.java
public class InstrumentedHashSet extends HashSet {

// 要素の挿入回数
private int addCount = 0;

@Override
public boolean add(E e) {
addCount++;
return s

元記事を表示

break、continue、label、returnの使い方メモ

#目次
[1.break](#1-break)
[2.continue](#2-continue)
[3.label](#3-label)
[4.return](#4-return)
[5.さいごに](#5-さいごに)

#1. break
直前のループを抜ける。
##

“`java
List numberList = new ArrayList();
numberList.add(1);
numberList.add(2);
numberList.add(3);

// 拡張for文でnumberListをぐるぐる回す
for (Integer number : numberList) {
System.out.println(number);

// numberが2のとき直前のループを抜ける
if (number == 2) {
break;
}
}
“`
出力結果は下記の様になる。

“`
1
2
“`

ループが二重になっている場合はこちら。

“`java
List countList

元記事を表示

Javaのシステムでcsvからインポートする機能を実装する方法

まずはJSPから。

formは以下のように書く。

“`

“`

inputのタイプはfileに

“`

“`

JSPは以上です。
サーブレットはアノテーションのすぐ下に以下を追記

“`
@MultipartConfig(
maxFileSize=10000000,
maxRequestSize=10000000,
fileSizeThreshold=10000000
)
“`

doPostを以下のように記述

“`
protected void doPost(HttpServletRequest request, HttpServletResp

元記事を表示

Javaのシステムで画像を取り扱う方法

まずはJSPのformで下記を追記します。

“`
enctype=”multipart/form-data”
“`

こんな風になります。

“`

“`

インプットタグはタイプをfileにします。

“`

“`

JSPは以上です。

サーブレットでは以下の記述をアノテーションのすぐ下に追記します。

“`
@MultipartConfig(
maxFileSize=10000000,
maxRequestSize=10000000,
fileSizeThreshold=10000000
)
“`

画像データの取り込み部分

“`
// 画像のファイル名取得
Part part = requ

元記事を表示

Ajaxのソースコード

実務でJavaのシステムで実装したAjaxのソースコードを自分用にメモとしてまとめました。

まずはJavaScriptでイベントを作成し、通信する。

“`
$(‘#button’).click(function() {
var req = new XMLHttpRequest();
var url = ‘コンテキスト以降のURL’;
req.open(‘GET’,url);
req.send();

req.onreadystatechange = function() {
if (req.readyState === 4 && req.status === 200) {
let info = (req.responseText)?JSON.parse(req.responseText):null;
if (info) {
console.log(info);
}
}
}
});
“`

指定したURLのサーブレットを作ってJSONデータを返す。

“`
// レスポンス用JSON文字列生成
String resData =

元記事を表示

個人的「Java Bronze試験つまずいた項目」5選

先日、オラクル認定資格のJava Bronze試験を受験しました。Javaの資格試験としてはもっとも難易度の低いものとして知られていますが、プログラミング初心者にとってはかなり難しいタイプの試験なのではないかと感じました。

今回の記事ではJava Bronze試験の学習経験を踏まえ、つまづきやすかったり、なかなか覚えられなかった文法項目を5つ取り上げてまとめました。

このJava Bronze試験にはバージョンがさまざまあるようなので、ご注意ください。

– 受験した試験:Java SE Bronze (試験コード1Z0-818)

# 1.使用した主な参考書や教材
Java Bronze試験の対策本としてはいくつか有名なものがあります。私は「黒本」と言われる「[徹底攻略Java SE Bronze問題集[1Z0-818]対応](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-Bronze%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-818-%E5%AF%BE%E5%BF%9

元記事を表示

Progate Java編 I 個人的備忘録

# 出力

Javaで出力するには、`System.out.println()`を使う。

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

“`console:コンソール
Hello World
“`

# Javaの構造

Javaの基本的な構造は、クラス部分、メソッド部分、処理部分に分けられる。
クラス部分の中にメソッド部分があり、そのメソッド部分の中に処理部分がある。

“`java:Main.java
class Main { // クラス部分
public static void main(String[] args) { // メソッド部分
System.out.println(“Hello World”); // 処理部分
}
}
“`

# 変数定義とデータ型

Javaでは変数を定義するときに**「データ型」**を指定する必要がある。

・数字の変数定義の場合、`int 変数名`で定義する。
・文字列の変数定義の場合、`String 変数名`で定義する。

“`java:

元記事を表示

Intellijでjlinkビルドエラーが出たとき文字化けした話

Intellij IDEA Ultimateを使ってJavaFXアプリケーションを開発しているとき、jlinkを使ってビルドしたくなって設定に`clean javafx:jlink`と入力した。
そしたらなんと!!エラーが出てビルドが失敗してしまったのだ…
エラーを読んでググって解決すればいいと思ってエラー文を見ると

“`
[WARNING] Required filename-based automodules detected. Please don’t publish this project to a public artifact repository!
�G���[: jlink�ł͎������W���[���͎g�p�ł��܂���: file:///C:/Users/mfmii/.m2/repository/net/synedra/validatorfx/0.1.13/validatorfx-0.1.13.jar�����validatorfx
[ERROR] Command execution failed.
“`

…読めない

そう、文字化けが発生

元記事を表示

Docker 環境で Jetty または Tomcat を使って Webアプリを実行する。

#前提

– Windows環境
– 「c:\usr\webapps」にWARを配置しておく。

#コマンド

##Jetty 最新版を利用する場合

“`
docker run –rm -it -p 8000:8000 -p 8080:8080 -v c:/usr/webapps:/var/lib/jetty/webapps jetty
“`

##Tomcat 9.0 を利用する場合

“`
docker run –rm -it -p 8000:8000 -p 8080:8080 -v c:/usr/webapps:/usr/local/tomcat/webapps tomcat:9.0
“`

以上。

元記事を表示

OTHERカテゴリの最新記事