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

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

抽象クラス

抽象クラスはインスタンス化の出来ないクラスです。
抽象クラスを親として継承する場合は、抽象クラス内の全てのメソッドを子クラスがオーバーライドをする必要があります。

~~~:抽象クラスの宣言方法
アクセス修飾子 abstract 戻り値の型(void) クラス名(引数);
~~~

# 利点
抽象クラスは継承時に親として利用する場合、子クラスが全ての機能を実装するように強制出来ます。

これにより
・子クラスでのオーバーライド忘れ
・親クラスを誤ってインスタンス化
などを防ぐ事が出来ます。

元記事を表示

Hello Worldからの復習 ~オブジェクト指向編~

何でも一人で抱え込むのは良くなくて、誰かと手分けしたり、協力し合っていかないとうまくいかない。
人一人が出来ることはたかが知れていて、(まれに出来る天才はいるかもしれないが・・)
あのフェルマーの最終定理を証明したアンドリュー・ワイルズも誰かの定理を使ったり、計算の協力者がいたりと、どんな天才も一人ではできなかった。

そりゃ凡人の私は絶対一人でなんて何もできませんよ。

##### お品書き
+ オブジェクト指向って?

◆オブジェクト指向って?

ざっくり言うと、みんなで手分けしてやりましょってこと。

今までの復習はメインのクラスを作り、その中で処理をバーっと記述して処理を行ってきた。

javaのクラスには2種類のクラスがある。
**実行用クラス**と**設計図クラス**

**実行用クラス**とは“mainメソッド“があるクラス。
今まで作ってきたから何となくわかる。

**設計図クラス**とは**属性**と**操作**というものを扱う。

“`mermaid
classDiagram
メンバー –|> 大輔
メンバー –|> 花帆
cla

元記事を表示

[Google Sheets API] 連続したデータを設定する(オートフィル)

Google Sheets API v4(Java)を使用して、
スプレットシートの既存のデータを元に連続したデータを設定する方法
についてご紹介します。
オートフィルと呼ばれている機能です。

SheetsAPIでは、オートフィル機能を適用する方法は2パターンあります。
それぞれの状況に応じて使い分けるといいかと思います。

コードを実行する際は、
[⧉[Google Sheets API] Google Sheets API v4をJavaで操作する](https://qiita.com/doran/items/3d43f776188b2281044c)
を参照ください。
“`
例:requests.add(moveDimension(sheetId)); //実行したいリクエストのMethodを指定
“`
|No|目次|
|—|—|
|1|[元となる範囲を指定するオートフィル](#1-元となる範囲を指定するオートフィル)|
|2|[元となる範囲を指定しないオートフィル](#2-元となる範囲を指定しないオートフィル)|

## 1. 元となる範囲を指定するオートフィル

元記事を表示

Hello Worldからの復習 ~繰り返し処理編~

なんだかんだ続いている復習アウトプット。
自分で見直してて「言っている意味がわからん」となっては意味がないので、必要最低限シンプルにしようと思っているが、振り返ってみて訂正していると、これまた復習になっている。(と思う)
繰り返し繰り返し一歩筒ずつ前に進むしかない。
焦ると大体良いことなんてない。

**繰り返し繰り返し・・・**

##### お品書き
+ 前回の分岐処理
+ while文
+ for文

**◆繰り返しって?**

前回、分岐処理編の構造化プログラミングで繰り返し処理の図を描いたので参考に。

https://qiita.com/tianshandafu894/items/c5156017b50253b2d5e9

**◆while文**

条件を満たす間ずっと処理を繰り返す文。
条件を満たさなくなったら抜ける。

“`java:java
while(条件式){
処理
}
“`

“`mermaid
graph TD
start–>a{条件};
a{条件}–>|true|処理;
処理–>start;

元記事を表示

[Google Sheets API] Basicフィルタを追加・削除する

Google Sheets API v4(Java)を使用して、
スプレットシートのシートにBasicフィルタを追加・削除する方法
についてご紹介します。

#### フィルタとは
スプレットシートには下記2種類のフィルタが存在します。

・Basicフィルタ(フィルタ)
シートに一つだけ設定できるフィルタです。
シートメニュー:「データ」⇨「フィルタを作成」または「フィルタを削除」で
追加・削除ができます。

・フィルタビュー(フィルタ表示)
名前をつけてフィルタを定義できます。
複数定義することが可能で、使用したいフィルタを自由に呼び出すことができます。
シートメニュー:「データ」⇨「フィルタ表示」で追加・削除・編集ができます。

コードを実行する際は、
[⧉[Google Sheets API] Google Sheets API v4をJavaで操作する](https://qiita.com/doran/items/3d43f776188b2281044c)
を参照ください。
“`
例:requests.add(moveDimension(sheetId)); //実行したい

元記事を表示

複数のプロパティファイルの情報をMap>の変数に格納

■test.properties
“`test.properties
#\u3053\u306E\u30B5\u30A4\u30C8\u304B\u3089\u2192http://otndnld.oracle.co.jp/products/jdev/htdocs/1013/jdev_oc4jdp4/jdev_oc4jdp4_buildsample.html
# JDeveloper\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA
jdev.home=D:/JDeveloper1
# OC4J\u3092\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3057\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA
oracle.home=D:/oc4j1
# Model\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u8A2D\u5B9A
model.dir=

元記事を表示

バリデーションチェック時のnullと空文字との違い

Spring Bootを使用して以下のようなバリデーションを想定します。
nullと空文字それぞれで挙動を確認します。

“`java
public class SampleRequest {
@NotBlank(message = “空白です”)
@Size(max = 10, min = 10, message = “10桁で入力してください”)
@Positive(message = “正の数を入力してください”)
private String number;
}
“`

“`java
@RestController
@RequestMapping(“/api/v1”)
public class SampleController {
@PostMapping(value = “/hello”)
public String post(@RequestBody @Validated SampleRequest request) {
return “hello”;
}

@ExceptionHandl

元記事を表示

BootRunを実行してもビルドアプリケーションが開始しない

## 状況
Spring Boot + IntelliJを使用。
http://localhost:8080/sample にアクセスし、Hello Worldを表示したい。

“`JAVA:MainController.java
package com.example.sample.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

@GetMapping(“/sample”)
public String helloWorld() {
return “Hello World”;
}

}
“`

BootRunを実行すると…

“`
BUILD SUCCESSFUL in 2s
4 actionable tasks: 3 exec

元記事を表示

JavaのJDK内部APIへのリフレクティブなアクセスについての変遷

# はじめに
Javaのリフレクションは強力な機能の1つだと思います。
しかし、強力であるが故に使い方を誤ると想定しない問題を発生させてしまう可能性もあると想像します。
特にJDK内部APIというコア機能に対する操作はより影響が大きいと言えるでしょう。
その様な背景も有るのか、バージョンアップに伴ってその利用について調整が発生しています。
今回はそれらを時系列的に見てみました。

# JDK8以前
特に制限等は見付けられませんでした。

# JDK11
“`
WARNING: An illegal reflective access operation has occurred
“`
このバージョンから危険性が認識される様に、警告が出力される様になっている様です。
しかし、未だ警告の段階で有り、–illegal-access パラメータで警告や許可、不許可を設定可能です。

illegal-access 設定例
warn : 警告の出力
permit : リフレクティブなアクセスの許

元記事を表示

JavaでJSONの要素を取得する。

まずは、要素を取得したいJSONを用意します。
“`json:person.json
{
“name”:”Taro”,
“age”:20
}
“`

次に、JSONに対応したクラスを用意します。
“`java:Person.java
public class Person {
private String name;
private int age;
// getterとsetterは省略
}
“`
最後に、ObjectMapperを使用してJSONファイルをJavaオブジェクトに変換します。
“`java:Main.java
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;

public class Main {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapp

元記事を表示

[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を指定
“`

## テキストを列に分割させる
セルを指定してテキストを列に分割させます。

区切り文字はTextToColumnsRequestクラスのsetDelimiterTypeメソッドで指定します。
CUSTOMの場合は、setDelimiterメソッドで区切り文字を指定します。
|type|区切り文字|
|—|—|
|COMMA|カンマ 「,」|
|SEMICOLO

元記事を表示

Hello Worldからの復習 ~分岐処理編~

たまには前置きをせずに復習を始めてみよう。

##### お品書き
+ 構造化プログラミング
+ if文
+ else if文
+ switch文
+ if文とseitch文の使い分け

—–

**◆構造化プログラミング**

下記の構造を組み合わせてプログラムを書くこと。
プログラムがわかりやすくなる。

##### ①順次進行
処理を上から順々に実行していく構造

“`mermaid
graph TD;
start–>
A処理–>B処理;
B処理–>C処理;
“`

##### ②分岐
ある条件を通って満たされるなら**true**
満たされないなら**false**を
という処理をわける構造
“`mermaid
graph TD;
Start([Start])–>B{条件}
B{条件}–>|true|1処理;
B{条件}–>|false|2処理;
1処理–>END;
2処理–>END;
“`

##### ③繰り返し
ある条件が満たされている間は同じ処理を繰り返す構造
“`

元記事を表示

Javaのリフレクションで

以下の記事を参考にすると解決できる。

https://qiita.com/h_sakata/items/ecf82d60329a0c1668f1

https://www.zunouissiki.com/java-reflection-privatemethod-accessible/

そのうち、きちんとまとめる。

元記事を表示

[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を指定
“`

## 指定した範囲を並び替える
指定したセルの範囲を並び替えることができます。

並び順はSortSpecクラスのsetSortOrderメソッドで指定します。
・降順:DESCENDING
・昇順:ASCENDING

範囲(GridRange)の指定で
・範囲を指定しない場合、範囲はシート全体が対象
・終了行・列を指定しない場合、開始行・列からデータがある行・列までが対象

元記事を表示

Leaning Technologies、CheerpJ 3.0を発表

![cheerpj-3.0-1024×538.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486144/941e4d0b-86b0-4870-d566-7e19b7838509.jpeg)

# 未修正の Java アプリケーションをブラウザで実行するための WebAssembly ベースの革命的ソリューション

[ 2024年 2月1日 リーズ・イギリス ]
革新的なウェブのソリューションのパイオニアであるLeaning Technologiesは、CheerpJ 3.0を自信を持って紹介します。CheerpJは、大規模で変更されていないJavaアプリケーションをブラウザでシームレスに実行するためにデザインされた、画期的なテクノロジーの最新版です。
前作の成功に基づき、CheerpJ 3.0は完全に新しいアーキテクチャを導入し、パフォーマンス、Java互換性、使いやすさを向上させる多数の機能をもたらします。

CheerpJは大成功を収め、2017年の最初のリリース以来、世界中で13万人以上のユー

元記事を表示

[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を指定
“`

## 指定した行をランダムに並び替える
指定したセルの範囲を行単位でランダムに並び替えることができます。

範囲(GridRange)の指定で
・範囲を指定しない場合、範囲はシート全体が対象
・終了行・列を指定しない場合、開始行・列からデータがある行・列までが対象
となります。

**サンプル コード**
ランダムに並べ替えたい範囲をしていするだけ、非常にシン

元記事を表示

汎化と特化

継承では
・親クラスになるほど一般的で抽象的な内容(汎化)
・子クラスになるほど特殊で具体的な内容(特化)
になると好ましいとされています。

ただし、安易な継承はプログラムの可読性を下げてしまう為、クラスの内容を一部変える場合は委譲の利用が推奨されます。

https://qiita.com/joshua_kanae/items/a62608bb19eeae0db8bb

# 参考文献
https://usd.sie.dendai.ac.jp/programming/2019/object_aj/C1_3.htm

元記事を表示

[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|目次|
|—|—|
|1|[セルを挿入する](#1-セルを挿入する)|
|2|[セルを削除する](#2-セルを削除する)|

## 1. セルを挿入する
セルを挿入して既存のセ

元記事を表示

tabulaでPDFから表を抽出する

今回はPDFから表を抽出することができるtabulaライブラリを紹介します。

トヨタ自動車の23年3月期決算資料のPDF資料から営業収益、営業利益、税引前利益、当期利益、親会社の所有者に帰属する当期利益、当期包括利益をpandasの表として抜き出し、CSVファイルに出力してみました。

## tabulaとは

Pythonのtabulaライブラリは、PDFファイルや画像ファイルから表データを抽出するオープンソースライブラリです。Javaで開発されたTabulaライブラリのPythonラッパーであり、使いやすさと高い精度で知られています。

主な機能としては以下のようなものがあります。
– PDFファイルや画像ファイルから表データを抽出
– 抽出した表データをpandasのDataFrameに変換
– 複数ページにわたる表データの抽出
– 表データのヘッダー行の自動認識
– 抽出対象となる表の範囲指定

## tabulaの使い方

まずはtabulaのインストールを行います

“`python:tabula.py
pip install tabula-py
“`

続いてライブ

元記事を表示

Java ~論理演算子~

## :pushpin:前回の記事はこちら
https://qiita.com/nukoxo/items/a733d0eac169bd737640
## :ledger:論理演算子
前回の記事で紹介した関係演算子は「AはBより大きい」など
2つの値の比較を行うことが出来ました。

本日の論理演算子は複数の条件を組み合わせてより
複雑な条件式を組み立てることができます。

演算子 意味
&& A&&B AかつB(AとBが共にtrueならtrue)
|| A||B AまたはB(AとBどちらかがtrueならtrue)
!