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

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

配列とCloneメソッドの挙動について

Java Silverの学習中、配列とcloneメソッドの問題とその解説が全く理解できなかったので色々調べた結果、ようやく自分が納得できる形でまとめることができたので、情報整理も兼ねて投稿します。

## 悩みの種
次のコードを確認し、trueを返すコードとして正しいものを選びなさい。(一つ選択)
“`java
char[][] array1 = { { ‘a’ , ‘b’ } , { ‘c’ , ‘d’ } };

char[][] array2 = array1.clone();

char[] array3 = array1[1].clone();
“`
A. array1[1] == array3

B. array1[1] == array3[1]

C. array1[1] == array2[1]

D. array1.equals(array2)

### 正解は…
C. array1[1] == array2[1]

## 解説(長すぎるので少し抜粋)
①Cloneメソッドは新しい配列を作り、その配列に同じ要素への参照をコピーする。

②Cloneメ

元記事を表示

仕様書なし、テストなし、運用手順書なしのレガシーシステムを運用するのが辛いので改善する

# 自己紹介と現在の状況
こんにちは。
地方中小IT企業で働いて6年目になりました。
題名でわかる通り、2022年から大変レガシーなシステムを運用担当することになりました。
そのせいで残業がとても増えてしまって辛いので少しでも残業を減らせるように改善したことを書いていきます。
ちゃんとしたIT企業で働いている方からすれば何を今さら…なことも多いかと思いますが、
同じような境遇にいる方もいらっしゃると思うので少しでも助けになれれば幸いです。

# 何が辛いのかをリストアップしてみる
まずは問題を具体的にとらえるために何が問題だと思っているのかを書き出します。

– 画面の仕様がわからない
– 全体的なテスト仕様書がない(細かいのはある)
– どんな画面があるのかわからない
– どんな帳票があるのかわからない
– マジックナンバー多すぎ
– 手作業で管理するマスタ多い
– テストがない
– テストを書く文化がない
– ソースしか信じるものがないというのがデフォ
– でもバグもある
– 保守契約してない
– ミスると客から怒鳴られる
– 業務改善の時間がない
– 例月、例年の作業が自動化さ

元記事を表示

[Java] インターフェースとdefaultメソッド

### はじめに
Java学習を始めたばかりです
Java8

### インターフェース
定数と抽象メソッドをもつクラスを他のクラスに**実装**して使う
継承関係にないクラスでもimplementsすれば使うことが出来る
→違うパッケージ内だとimportが必要?
implementsしたら絶対にinterface内の抽象メソッドの実装(オーバーライドしての使用)がそのクラスに必要
継承は一つのクラスしか出来ないがインターフェースは複数指定できるのも特徴

インターフェースはクラスに色を塗るイメージ
(「継承」は枝分かれさせるイメージ)

例)
留学生が来たからStudentクラスとClubクラス(Studentクラスを継承していないと仮定)の名前の表記を英語にしたいな〜ってとき
両方のクラスに英語表記のメソッドを書いていくのはしんどい
(仮にStudentクラスとClubクラスが継承関係であればスーパークラスにメソッドを書けばオッケー?)
→英語表記が出来るメソッドを使ってクラスに同じインターフェース色を塗るイメージ

### 使い方

インターフェース側
“`
public i

元記事を表示

AccessDB(*.accdb)のテーブル一覧をkotlin, javaで取得

# UCanAccessを使いましょ
“`build.gradle.kt
implementation(“net.sf.ucanaccess:ucanaccess:5.0.1”)
“`

# テーブル一覧を取得
コツっていうんですかね、接続URLに“`;sysSchema=true“`が必要です。
そんだけです。kotlinとJavaと両方のコードを載せておきます。

“`acc.kt
import java.sql.DriverManager

fun main() {
val accdb = “c:/hoge.accdb”
DriverManager.getConnection(“jdbc:ucanaccess://$accdb;sysSchema=true”).use { conn ->
conn.createStatement().use { st ->
st.executeQuery(“SELECT * FROM sys.MsysObjects”).use { rs ->
whi

元記事を表示

JVMバイトコード入門(第1回)

# JVMバイトコード入門(第1回)

## 目的

難読化ツールを自作できるようになる・難読化を解読できるようになる。

## JVMの動作原理

JVMは「スタックマシン」と呼ばれます。スタックマシンというのは、読み込まれたデータをスタックという場所の一番上に積んでいき、そのスタックに対して命令を実行することで上に積まれたデータに対して処理を実行する仕組みのことです。

## JVM命令の例

以下のような例を考えてみます。

“`java
int i = 100 + 10 – 1;
“`

この場合のJVM命令は以下のようになります。

“`jvm
BIPUSH 100
BIPUSH 10
IADD
ICONST_M1
ISUB
ISAVE 0
“`

ではこの場合の例について、順を追って見ていきましょう。

“`text/plain
1行目: BIPUSH 100
““

これは「100」という数字をスタックに載せるということを意味しています。

“`text/plain
2行目: BIPUSH 10
“`

2行目もBIPUSHですね。スタックマシンでは読み

元記事を表示

Mockitoが難しいのでUdemyで勉強しました ②

# 概要
前回の続きです。
https://qiita.com/RYA234/items/40f50205bde33dbb24ac

転職の面接で見せるSpringBootのポートフォリオ作成しています。
現在テストコードで苦戦してるのでUdemyの講座で勉強しています。
今回はSection10:Behavior Driven Mockitoを取り組みました。
内容については大まかに何やってるかを見てもらえれば幸いです。
詳細は講座のほうで確認お願い致します。

https://www.udemy.com/course/testing-spring-boot-beginner-to-guru/

# Behavior Driven Development(BDD)とは
以下リンクで理解しました。
mockitoはBDDに対応してるみたいです。

https://shiftasia.com/ja/column/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E9%96%8B%E7%99%BA%E3%81%AB%E3%81%8A%E3%81%9

元記事を表示

Java学習まとめ②

### はじめに
Javaの学習をはじめたばかりです。
まとめメモの様になってしまっています、ご了承ください🙇‍♀️
自分なりにまとめたり、学習してきたRailsと少しリンクさせて理解を深めようとしていますが、間違っている可能性があります。

### static
オブジェクトを生成していなくても利用できるメンバ変数やメソッドを定義するときに使用
`クラス名.変数名[メソッド名]`で使用可能

##### 使い所
– 全てのインスタンスから共通して使う変数やメソッドを作りたいときに使う
– クラスの関連する便利なメソッドをまとめたいとき 

例)いくつオブジェクトを生成したかcountしたいとき
“`java:Student.java
class Student {
int counter = 0;
// コンストラクタにインクリメント
Student() {

counter ++;
}

void display() {
System.out.println(counter + “人です”);
}
}
“`
これで行けるか

元記事を表示

DTOとは

### DTO(Data Transfer Object)とは

* ユーザーの要請データをサーバに受け渡し、サーバの応答データをユーザーに渡すオブジェクト
* MVCでは、ControllerがModelとViewのデータを送受信するときにDTOを使用する
* User ⇄ View ←(DTO)→ Controller ←(DTO)→ Model

#### DTOを使用する利点
* Modelをカプセル化し、UI画面で使用するデータのみを選択的に送信することで情報漏洩を防止する
* 複数のデータをまとめて1つの要請に送ることができ、データの検証とロジック処理が1回で終わる
* 検証とロジック処理を何度もしないことで安定性が高くなり、処理時間が短縮される

元記事を表示

[Java] 基礎的な例外処理について

### はじめに
Javaの学習のまとめです
今回は例外に絞って投稿しています。

### かなりオススメします

https://www.youtube.com/channel/UC57H40XcMcL4Lbp_Uq2MVaQ

とてもわかりやすいし、説明がすんなり入ってきます。
なぜ使うのか・いつ使うのかも含めて丁寧に説明してくれているのでJava学習をはじめたばかりの方はぜひ!
わかりやすいように構成が考えられているようで、その時その時に必要な情報を出してくれるのでパンクしないで済みます。
また、オブジェクト指向についても解説してくれていますので曖昧な方もぜひ!

### 例外
実行時に発生するエラーのこと
例外処理を行わないとプログラムにエラーが出た箇所で止まってしまい(異常終了し)、最後まで実行されない
→これだと困るので例外処理が必要になる

##### 何が起きているのか
例外が発生すると例外クラスのオブジェクトが**自動生成**される
Javaには発生するエラーごとに例外クラスが存在していて、エラーが発生するとそこからオブジェクトを自動で生成して表示してくれる

###

元記事を表示

【初心者】プログラムを作る材料5つ その3「コンパイラ」

# はじめに
IT歴2ヶ月の初心者プログラマー鹿太郎です。
初心者なりに感じた疑問や分からないことを発信していきたいと思います!

続いては、プログラムを作る材料その3!「コンパイラ」について紹介します!

# コンパイラとは
コンパイラとは人間が理解できる言葉で書いたプログラム(ソースコード)を、コンピュータが理解できる「機械語」に変換するプログラムのことです。

「機械語」とは0と1の2種類で表現されるデータのことで、コンピュータはこの機械語で構成されたものしか読み取れません。

しかし、人間が機械語でコードを書くのは非常に効率が悪く、また難解です。

よって、コンパイラが必要なのです。

# コンパイラがプログラムを機械語に変換する仕組み
コンパイラは以下の5つのステップを踏んで、プログラムを機械語に変換しています。

## ① 字句解析
「字句解析」とは、ある言語で書かれたプログラムについて、構成要素を解析し、言語的に意味のある最小の単位に分解する処理のことです。

予約語や識別子、演算子などの単位で分け、プログラムのどこにどのような要素があるのか把握するのが目的となります。

元記事を表示

JibのDockerベースイメージのバージョンを固定してみた

# はじめに

こんにちは!毎日あれこれくだらないことを思い巡らすシステムエンジニアのfengdidiです。
本日はJibのDockerベースイメージのバージョンを固定する方法をご紹介させていただきます。

# Dockerベースイメージのバージョンを固定する理由

先日、Google Jibを使ってSpringbootのプロジェクトをデプロイしていました。

> Jibは、Javaアプリケーションの構成を読み取り、ビルドプロセスの中でJDKが入っているベースイメージにJavaアプリケーションを加えてコンテナイメージを生成し、Dockerコンテナのレジストリへの登録まで自動的に行ってくれるビルドツールです。

Jibは非常に便利ですが、JibはデフォルトでDockerベースイメージを固定しないので、Jibのバージョンにより、ビルドする時に使うDockerベースイメージは違う可能性があります。

Jibの公式ドキュメントによりますと、

> Starting from version 3.2, the default base image is the official eclipse

元記事を表示

AmazonHttpClientにて、プロキシが自動で設定されてしまうことにハマった

## 背景
ある日、DynamoDBをローカルで動かすようなプログラムをいつものように実行したら、プロキシ関係のエラーではまった。
結局は単純だったが、かなり時間かけてしまったので、ほかに自分みたいな人間が生まれないように、記録。

## 起きたこと

JavaプログラムからAWS SDkを使用して、Awsのサービスにアクセスしようとした。
これまでは、問題なくアクセスできていたが、サービスにアクセスできない事態が発生。

スタックトレースには、以下のエラーが発生。
“`console
com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: null (Service: AmazonDynamoDBv2; Status Code: 502; Error Code: null; Request ID: null; Proxy: proxy.*****)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(Amaz

元記事を表示

Mr.Nam 先生の講義要約 Chapter 2, 27-35

27番 例外処理(1)-実習

ExceptionController.java
メソッドの前に@ExceptionHandlerを付けてtry-catchのcatchのように使用可能。ただし、同じクラス内で使用。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

28番 例外処理(2)-理論
@ExceptionHandlerと@ControllerAdvice
例外処理のためのメソッドを作成し、@ExceptionHandlerを貼り付ける。

@ControllerAdviceで全域例外処理クラスを作成可能(パッケージ指定可能)
例外処理メソッドが重複の場合、コントローラ内の例外処理メソッドが優先。

@ResonseStatus
応答メッセージのステータスコードを変更する際に使用

例外処理メソッド
例外処理をすると200(成功)が出る。–>405に変更

ExceptionResolver
ばねの例外処理基本戦略
handlerExceptionResolver
1. ExceptionHandlerExc

元記事を表示

Mr.Nam 先生の講義要約 Chapter 2, 14-26

14番 サブレットとJSP(2)
有効範囲(scope)と属性(attribute)
HTTP特徴-状態情報保存X(Stateless)
したがって、貯蔵所が必要(Stateful)-状態情報保存ができます。

4つの貯蔵所(アクセス範囲、生存期間によって区分)
貯蔵所はMap形態(Key:属性、Value:属性値)

Mapに読み込み、書き込み可能。
読み:getAttribute()
書き方:setAttribute()
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

15番 サブレットとJSP(3)
URLパターンの種類と優先順位
1.exactmapping(正確)
– URL pattern : /login/hello.do
– マッチングURL:http://localhost/ch2/login/hello.do

2.pathmapping(経路マッピング)
– URL pattern : /login/*
– マッチングURL:http://localhost/ch2/login/~~~~~~

元記事を表示

[Java] 基礎的なカプセル化について

### はじめに
Javaの学習のまとめです
以前にもざっくりとしたまとめを書きましたが、今回はカプセル化に絞って投稿しています。

### かなりオススメします

https://www.youtube.com/channel/UC57H40XcMcL4Lbp_Uq2MVaQ

とてもわかりやすいし、説明がすんなり入ってきます。
なぜ使うのか・いつ使うのかも含めて丁寧に説明してくれているのでJava学習をはじめたばかりの方はぜひ!
わかりやすいように構成が考えられているようで、その時その時に必要な情報を出してくれるのでパンクしないで済みます。
また、オブジェクト指向についても解説してくれていますので曖昧な方もぜひ!

### アクセス修飾子
クラス・メンバ変数・メソッドの**公開範囲**を指定できる
| 修飾子 | 同クラス | 同パッケージ | サブクラス | その他 |
|:-:|:-:|:-:|:-:|:-:|
| public | ◯ | ◯ | ◯ | ◯ |
| protected | ◯ | ◯ | ◯ | |
| (無し) | ◯ | ◯

元記事を表示

CordaにおけるReference Stateの活用方法(デモンストレーション編)

## まえがき
今回、Reference State(以下Ref.State)に関する細かな動作確認を行うため調査を行いました。
調査にあたりましてサンプルプログラムを作成しました。**[コード解説編](https://qiita.com/ShotaIMO/items/c9a7fbac0ee2c33196cf)**と**デモンストレーション編**の2部編成でお届けしたいと思います。**本記事はRef.Stateについて詳しく知りたいCordaに精通していらっしゃるエンジニアの方やセールスの方を対象としております。** Cordaについて詳しく知りたい方は **[R3公式ドキュメント](https://docs.r3.com/)** や **[株式会社digglueさんの記事](https://baasinfo.net/?p=2205#outline__2_2)** をご覧ください。また、Cordaの概念であるUTXOモデルについて知りたい方は、**[こちらの解説記事](https://medium.com/corda-japan/corda%E3%83%87%E3%83%BC%E3%8

元記事を表示

CordaにおけるReference Stateの活用方法(コード解説編)

## まえがき
今回、Reference State(以下Ref.State)に関する細かな動作確認を行うため調査を行いました。
調査にあたりましてサンプルプログラムを作成しました。**コード解説編**と **[デモンストレーション編](https://qiita.com/ShotaIMO/items/8be229ab8cd873d87c89)**の2部編成でお届けしたいと思います。**本記事はRef.Stateについて詳しく知りたいCordaに精通していらっしゃるエンジニアの方やセールスの方を対象としております。** Cordaについて詳しく知りたい方は **[R3公式ドキュメント](https://docs.r3.com/)** や **[株式会社digglueさんの記事](https://baasinfo.net/?p=2205#outline__2_2)** をご覧ください。また、Cordaの概念であるUTXOモデルについて知りたい方は、**[こちらの解説記事](https://medium.com/corda-japan/corda%E3%83%87%E3%83%BC%E3%

元記事を表示

アルゴリズム②【最大値と最小値】






実行結果

![スクリーンショット 2022-06-21 4.47.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2133160/e64d91f6-e3e6-9063-1c51-7cad9ff47eaa.png)

コード

“`java
//最大値と最小値
public class Rensyu0620b {
public static void main(String[] args) {
int[]data = {31, 41, 59, 26, 53, 58, 97, 93, 23, 84};

int maxData = data[0];
for(int i = 0; i < data.length;i++) { if(maxData < data[i]) {//trueの場合、maxDataにdata[i]を

元記事を表示

JavaメインからRuby学習で困惑した点(unless)

# はじめに
もともと、工業高校でC言語から始め、社会人にてJavaで活動していた
SEが転職を期にRubyを学んだ時の混乱について一部書きます。(条件分岐について => タイトル通りです)

## お馴染みの条件分岐(if else)
Rubyを学ぶまで、if(もし)、else(でなければ)
の2つで条件分岐は丸く収まると思っていました。

## unlessが登場
基本的には、言葉の文法通りに想像するなら
「もし~なら、でなければ」と基本的にはなると思います。

ところが「でなければ」から始まる構文が
Rubyでは存在しました。
これが「unless」です。

極端な例:偶数かそうでない場合の判別
(どの言語でも分かりやすいようにevenメソッドは使用しません + 括弧も付けます)
“`ruby:example_if_else.rb
# if、elseのパターン
if (num % 2 == 0)
puts “偶数”
else
puts “奇数”
end
“`

“`ruby:example_unless.rb
# unlessのパターン
unless (num %

元記事を表示

サービスアカウントでspreadsheet-apiへアクセスする(java)

# 概要

ネット上ではいろんなサンプルコードがあったが、javaバージョンは少なかったので、個人メモ用で、
gcpのサービスアカウントを使って、spreadsheetのデータを取得する方法について、記載する。

### step1: gcp上でサービスアカウントを作成し、サービスのキーを作成する

![スクリーンショット 2022-06-21 0.50.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1184340/c83b3043-a1ba-ba6b-131f-e95f04806a7f.png)

– キーを記載しているjsonファイルをダウンロードする
– 単純に、spreadsheetのデータを取る場合、ロールなど付与しなくても良い。[詳細の理由](https://stackoverflow.com/questions/55527829/what-is-the-role-which-allows-to-use-gcp-apis-such-as-drive-sheets-etc)

###

元記事を表示

OTHERカテゴリの最新記事