JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

コンストラクタ

コンストラクタを用いるとクラス側で初期化を行う事が出来ます。

コンストラクタはプログラムで直接呼び出す事は出来ません。
クラスがnewで作成された後、コンストラクタも自動的に実行されます。

クラスメイト全く同じ名前でメソッドを作成すると、コンストラクタとして扱われます。
ただし、コンストラクタではvoidを含めた戻り値の型を使用する事は出来ません。

元記事を表示

例外処理 try-with-resource文 / try-catch-finally文 / InputMismatchExceptionクラス

# 例外処理とは
例外処理はプログラムを実行中に異常な事態が起きた時に、対処する場合に使う

##### 障害の種類は3種類
##### 1. エラー
javaの動作環境の問題など、プログラムでは対処できない致命的な状況を表す
##### 2. 検査例外
例外処理が実装されたことをコンパイラがチェックする例外なので、実装する必要がある
##### 3. 非検査例外
例外処理が実装されたことをコンパイラがチェックしない例外なので、実装するかは任意

**Exceptionクラス**
例外を処理するクラスの継承元となるクラス

Exceptionクラスの継承先は、
* 非検査例外であるRuntimeExceptionクラスと、
* 検査例外であるクラスの2つに分かれる 

[参考URL](https://zenn.dev/kojikaya/articles/ad6903f3f6bbc8)
>非検査例外とは
非検査例外は RuntimeExceptionクラス配下の例外クラスが対象になります。
非検査例外は try-catchが必要ないため、「非」検査例外と言われます。
非検査例外

元記事を表示

[Google Sheets API] シートを追加・複製・削除する、シートの情報(名前等)を更新する

Google Sheets API v4(Java)を使用して、
スプレットシートのシートの追加、更新、複製、削除する方法
についてご紹介します。

コードを実行する際は、
[⧉[Google Sheets API] Google Sheets API v4をJavaで操作する](https://qiita.com/doran/items/3d43f776188b2281044c)
を参照ください。
“`
例:requests.add(moveDimension(sheetId)); //実行したいリクエストのMethodを指定
“`
|No|目次|
|—|—|
|0|[シートの情報](#0-シートの情報)|
|1|[シートを追加](#1-シートを追加)|
|2|[シートの更新](#2-シートの更新)|
|3|[シートの複製](#3-シートの複製)|
|4|[シートの削除](#4-シートの削除)|

## 0. シートの情報
シートの情報は***SheetPropertiesクラス***で設定します。
|項目名|メソッド|内容|
|—|—|—|
|シートID|s

元記事を表示

Java の文字化け対策 on Powershell

Java の文字化けって厄介ですよね。いろいろな要因が影響し、ひどいときには二重・三重に文字化けして見たこともないような化け方をします。しかもオブジェクトによってデフォルトの文字コードの決定方法が違ったりして、標準出力に複数の文字コードが混在したりします。

さらに困ったことに、PowerShell 上で動かしたりコンパイルしようとすると、問題は更に複雑になります。

この記事では文字化けの直し方は勿論、原因箇所の特定方法を含めて細かく解説させていただきます。

尚、この記事では基本的にすべてのエンコードを UTF-8 (BOM無し) に揃える前提で進めます。

# 実行環境
当記事執筆時に利用した Java の実行環境は以下です。
> openjdk 11.0.2 2019-01-15
> OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
> OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

※ PowerShell は Windows PowerShell 5.1

元記事を表示

CAP JavaでリモートのODataサービスを利用する

## はじめに
CAP JavaでリモートのODataサービスを利用したい場合、2つの方法が考えられます。一つはCAPの[Querying API](https://cap.cloud.sap/docs/java/query-execution)を使用して、SQLライクな書き方でクエリを実行する方法、もう一つはSAP Cloud SDKの[OData Client](https://sap.github.io/cloud-sdk/docs/java/features/odata/vdm-generator)を使う方法です。
この記事では、Querying APIを使ってリモートサービスに接続し、データを読み込んだり更新する方法について紹介します。接続先はBTPにDestinationとして登録されていることを前提とします。

CAPireの[ドキュメント](https://cap.cloud.sap/docs/guides/using-services)に説明がありますが、ドキュメントでは省略されているステップもあって**かなり**苦労したので、記事に残しておきます。ソースコードは以下

元記事を表示

Java学習1

## 変数
+ データ型と変数名で変数宣言して変数を作る
“`java
int length; //整数 lengthを宣言
length = 3; //length に3を代入
“`
+ 型推論で変数を作る
“`java
var length = 3; //lengthに3を代入して型推論
// 代入された値からデータ型が決まるので、宣言不要
“`
## 演算子
特に変わった使い方はしてない

元記事を表示

【Java初心者】Google Tinkを使った電子署名

# 電子署名とは

Wikipediaには
“`
電子署名とは、電磁的記録に付与する、電子的な徴証であり、
紙文書における印章やサインに相当する役割をはたすものである。
主に本人確認や、改竄検出符号と組み合わせて偽造・改竄の防止のために用いられる。
電子署名を実現する仕組みとしては、公開鍵暗号方式に基づくデジタル署名が有力である。
“`
とあります。

自分の秘密鍵でファイルに署名し、それを予め配布しておいた公開鍵で検証することで、送信者が「正しい人」であることがわかります。

# Javaで書いてみました

Tinkは、バージョンアップのたびに、APIが変わり、以前書いたコードが非推奨となることが多いため、その都度ドキュメントを見ながら修正しています。

以下に示すコードはtink-1.12.0.jarを用いています。依存ライブラリーとして protobuf-java と gson が必要です。

“`java
package sample2024;

import com.google.crypto.tink.CleartextKeysetHandle;
import co

元記事を表示

メソッド

# メソッドとは
public static voidを使用するとメソッドが作成されます。
メソッドでは引数を渡すことも可能です。

~~~:メソッドの作成方法
public satic void メソッド名(引数){
メソッドで行う処理内容
}
~~~

~~~:メソッドの呼び出し方法
メソッド名(引数)
~~~

# メソッドの利点
メソッドは複数の処理をまとめ、一つの処理として扱う事が出来ます。
これにより、複雑な処理を行う際もプログラムが見やすくなり便利です。

元記事を表示

java basic

### ラベルを用いて多重ループを自由に移動 or 抜ける
“`
labalName: for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { if (何らかの条件) { break labalName; // このbreak文で外側のループまで一気に抜ける } } } ``` この時continue文を用いてラベルを指定すると指定したラベルの初めにジャンプして次の繰り返しを行う。 ---

元記事を表示

Entityがnullかどうかを知る

## 背景
javaの資材を修正した際に、作成されたentityListがnullかどうかで条件分岐した箇所があった。そこで自分は、CollectionとEntityをごっちゃにして考え、null判定をするためにメソッドを理解するのに時間を要した。そこで、メモとしてここに書き留めておく

## EntityがNullかどうか判定する
“isNull”, “nonNull”,”==null”, “!=null”の4つ。
直観的にわかりやすいのは”isNull”, “nonNull”かと思う

## Listの中身がnullかどうか
“isEmpty()”,”list.size()==0″

元記事を表示

手続き型から関数型への書き換え 言語別ガイド

# はじめに

この記事では、手続き型プログラミングと関数型プログラミングの違いを明らかにし、複数の言語を通じて、同じ問題を解決するための両アプローチを示します。

# 手続き型と関数型の基本的な違い

手続き型プログラミングと関数型プログラミングは、コードの書き方とプログラムの設計において根本的に異なるアプローチを取ります。これら二つのスタイルの基本的な違いを理解することは、プログラミングの柔軟性を高め、より効果的なコードを書く上で重要です。

## 手続き型プログラミング

手続き型プログラミングは、命令の列としてプログラムを考えます。このアプローチでは、データ構造を操作するために一連の手続き(関数やサブルーチン)を作成し、プログラムの状態を変更するためにこれらの手続きを実行します。手続き型プログラミングの特徴は、プログラムがどのように実行されるか(アルゴリズムと手順)に焦点を当てている点にあります。C 言語や Java(オブジェクト指向の側面を除く)などが、このパラダイムの典型的な例です。

## 関数型プログラミング

関数型プログラミングは、計算を数学的関数の評価として扱い、

元記事を表示

GWT は日本語の文字も、サーバクライアント通信も簡単

# GWTは、いちいち日本語を通信する際の文字処理もそのままでできますよ
![GIF 2024-02-18 4-50-09.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132663/b9c916eb-7884-e41e-5668-ca51193ab08b.gif)

元記事を表示

【Java初心者】Google Tinkを使ったハイブリッド暗号

# ハイブリッド暗号とは
Wikipediaによると
“`
公開鍵暗号方式と共通鍵暗号方式を組み合わせた暗号方式である。
公開鍵暗号方式と共通鍵暗号方式の欠点を補い合い、
2つの暗号方式のそれぞれ利点を同時に利用することができる。
“`
とあります。

具体的な方法については
“`
1. Aは共通鍵を生成する
2. Aは共通鍵を公開鍵暗号方式で暗号化してBに送信する
3. AとBは安全に共有された共通鍵を用いて共通鍵暗号方式で通信を暗号化する
“`
となっている。

これならば、公開鍵暗号でもいいのではないかと思うが 上記wikipediaでは
“`
公開鍵暗号方式には、共通鍵暗号方式と比較して処理速度が非常に低速という欠点と、
事前の鍵共有が不要という利点がある。
そのため、公開鍵暗号方式のみで通信を暗号化するのは非効率的である
(中略)
ハイブリッド暗号方式には、公開鍵暗号方式と比較して処理速度が非常に高速という利点と、
事前の鍵共有が不要という利点がある。
つまり、ハイブリッド暗号方式は公開鍵暗号方式と共通鍵暗号方式の利点を
どちらも同時に利用できる、優れたそして大きな

元記事を表示

[Java] 2つの合計 (アルゴリズム)

## 課題

### 問題:

> 与えられた整数の配列**`nums`**と整数**`target`**に対して、その和が**`target`**になるような2つの数のインデックスを返します。各入力には**正確に1つの解**が存在し、同じ要素を2回使うことはできません。答えは任意の順序で返して構いません。
>

**例 1:**

“`
入力: nums = [2,7,11,15]、ターゲット = 9
出力: [0,1]
説明: nums[0] + nums[1] == 9 であるため、[0, 1] を返します。

“`

**例 2:**

“`
入力:数値 = [3,2,4]、ターゲット = 6
出力: [1,2]

“`

**例 3:**

“`
入力:数値 = [3,3]、ターゲット = 6
出力: [0,1]

“`

### **制約:**

– `2 <= nums.length <= 104` - `109 <= nums[i] <= 109` - `109 <= target <= 109` **フォローアップ:** 時間の計算量よりも少

元記事を表示

Entity、DTO、VO

Javaでオブジェクトを実装する方法としては、Entity、DTO、VOなど様々な方法がある。

# Entity

– 実際のデータベースと1:1にマッピングされるclass
– @Entity を付ける。
– オブジェクトの一貫性を高めるために、無分別なsetter の使用を推奨しない。
– 生成者を通じて値を入れて一貫性を維持するようにすることをお勧めする。 基本生成子のアクセス制御子をprotectedと宣言し、希望通り生成子を作成するようにすることで、オブジェクト自体の一貫性を高めることができる。

“`java
@NoArgsConstructor(access = AccessLevel.PROTECTED)
“`

– 別々に使用する必要がある場合は、setter 以外に使用した意図や意味が分かる別途のメソッドを作成することを推奨する。
– 小規模な個人プロジェクト程度であれば、エンティティを直接使用することがコードの簡潔性とメンテナンスに容易である。

# DTO

– 階層間データ交換のためのオブジェクト
– 別途のロジックなしに主に

元記事を表示

要素数の取得

# .length
配列名や文字列変数名の後ろに.lengthと続けることで該当の配列・文字列の要素数を取得する事が出来ます。

この時、半角・全角どちらも同じ1文字として扱われます。
.lengthの表記方法はプログラム内のマジックナンバーを減らす事が出来ます。

元記事を表示

Scanner クラス 

# Scannerクラス
* キーボードやファイルから入力された情報を取り込む。
* Javaで入力処理を行うクラス。入力処理は、キーボードから入力を行う場合や、ファイルから入力を行う場合などに使う。
* 入力処理は、ユーザーによる任意の情報をjavaのプログラムで扱う場合に必要。

## Scannerクラスのメソッド一覧
| メソッド | 用途 |
|:-:|:-:|
| next | 区切り文字までの入力を取得する(デフォルトの区切り文字は空白) |
| nextLine | 改行までの入力を取得する |
| nextInt | 整数の入力を取得する |
| nextDouble | 小数点を含む数値の入力を取得する |
| nextBoolean | 真偽値の入力を取得する |
| useDelimiter | 区切り文字を指定する |
| hasNext | 入力の読み込みが続くか判定する |

### next,nextLine,nextInt,nextDoubleの4つを実装してみる
## next()
“`java
ackage text_

元記事を表示

Javaの組合せ最適化ソルバー「Timefold」をさわってみる

本記事では、OSSの組合せ最適化ソルバーであるTimefoldを紹介していきます。

## Timefoldとは

Javaで実装されたOSSの組合せ最適化ソルバー(以下、ソルバー)です。
ソルバーとは、組合せ最適化問題を解く目的で利用できるツールのことです。

組合せ最適化問題とは、様々な制約の下で多くの選択肢の中から、定義されたスコアによる評価が最も高くなる組合せを求める問題のことです。
巡回セールスマン問題などが広く知られております。

Javaで作られたソルバーとしては、Optaplannerなどが有名です。
今回紹介するTimefoldはOptaplannerをforkしたもので、もともとOptaplannerのコミッターであったエンジニアの方々が開発に携わっています。

## サンプルアプリ

Timefoldを使って、簡単な組合せ最適化問題を解いていきます。
サンプルアプリのコード全量はGithubにアップしています。

https://github.com/Hami1ton/study_or/tree/main/solver/timefold/shift-schedul

元記事を表示

GWT 最初の画面は何か?

# GWTの最初の画面はEntryPoint インターフェースを継承したクラス
通常、サンプルの画面から改造していけば、できます。

図は新規プロジェクトから、ローカルで立上げまで再現しています。

![GIF 2024-02-17 5-11-18.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132663/e55f2b55-0600-0785-52ae-0e43f6d113b8.gif)

元記事を表示

TimeSlotTrackerで作業時間を計測集計する

# 目的

大量の小さいタスクを抱えている。タスクごとの作業時間を把握管理したい。

# 制約

お客様環境で利用したい。

個人契約ウェブアプリ利用や個人購入アプリの持込みは不可。

但し、githubなど禁止されていないサイトからライセンス上問題のないアプリであれば利用可能。

# (参考)いままで

フリーランス時代は、PerlでWebアプリを自作して、まぁまぁ機能していた。(今でも個人タスクでは利用してる)

しかし上記の制約で、お客様環境では利用不可。

現環境では、Excelベースの作業時間表をつくって枠ごとに集計したりしてた。

ただ、タスク増えすぎて限界に達していたのと、単軸ではなく「いろんな切り口」での数字報告を求められるようになった。
さすがに限界に達し、なにか探し始めた、というのが今回の経緯。

# 候補さがし

[SourceForge](https://sourceforge.net/)の[Time Tracking Software](https://sourceforge.net/directory/time-tracking/)から、[Window

元記事を表示

OTHERカテゴリの最新記事