- 1. java初学者の学習メモ-Part2-
- 2. JVMを意図的にクラッシュさせる方法
- 3. 休憩催促通知機能を作ってみた
- 4. Project Wakefieldをビルドしてみる
- 5. java初学者の学習メモ~Swingのインストール~
- 6. 【Selenium】SpringBootで作成したアプリケーションの結合テスト
- 7. Sentryでエラーをモダンに確認しよう!
- 8. SpringBootでschema.sqlに書いた初期化用SQLが実行されない
- 9. Java Gold ラムダ式(関数)について
- 10. SQLの変数チェック
- 11. Apache HttpClientで、リクエストヘッダーに”Accept-Encoding” の設定でgzipを自動設定しないようにする方法について
- 12. Java Gold ScheduledExecutorServiceのまとめ
- 13. char型とint型の関係
- 14. クラスとインターフェースの違いをちゃんと理解する
- 15. 中間コード方式について簡単に
- 16. 私がJavaプロジェクトが嫌いな7つの理由
- 17. javaのapiにレスポンスのbody設定して返却したら、改行コードがあるから解析できずエラーについて、原因として考えられること
- 18. JavaGold 主要な関数型インターフェースと使い方
- 19. Gradleでビルドすると’Task :resolveMainClassName FAILED’で失敗する
- 20. chart.jsを利用してDBに登録してあるデータをグラフ描画する
java初学者の学習メモ-Part2-
## 概要
今回はjavaで基礎学習用のコードを書いてみました。
これから少しずつjavaの学習記録を残してまいります。
学習のメモ程度に記述していますのでご承知ください。## 実行環境
・windows:Windows11Pro 23H2
・java:22.0.1
・統合開発環境:Eclipse## ソースコード
“`Sample.java
package helloworld;public class Sample {
public static void main(String[] args) {
int item_num;
final int NOT_SET = 0;
Ref ref = new Ref();
ref.set_item_num();
item_num =ref.get_item_num();
if (item_num != NOT_SET) {
System.out.println(“item_num >>>” + item_num);
}else {
System.out.println(“item_n
JVMを意図的にクラッシュさせる方法
# はじめに
「JVMをクラッシュさせるとしたらどんな手段を取りますか?」この質問に答えることができるでしょうか?私はできませんでした。
私は業務でJavaを利用し始めておよそ5年以上経過します。毎日使っているプログラミング言語の仮想マシンのことなので、これはエンジニアとして知っておくべきだなあと思い、色々試してみました。その過程と結果を記事にまとめます。# Unsafeクラスを使って不正なメモリアクセスを実行
ピュアJavaでJVMクラッシュを再現する場合、sun.misc.Unsafeクラスを使って不正なメモリ操作を実行することでクラッシュが可能です。
“`java
import sun.misc.Unsafe;public class CrashUnsafe {
public static void main(String[] args) throws Exception {
var field = Unsafe.class.getDeclaredField(“theUnsafe”);
field.setAccessible(true)
休憩催促通知機能を作ってみた
# 休憩催促通知
## ・はじめに
日常生活の中で仕事や家で長時間PCと睨めっこをしている人は多いだろう。長時間画面を見続けると目も疲れるし体もずっと固定されたままなので疲労が溜まり生活に支障が出てしまう。そこで私は長時間使用し続けると休憩の催促がくる機能を作成した。## 実行画面ショット
![chacha.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3658530/a60a6a48-edfc-9b6c-ab3e-6a97de381b00.png)## ・構成
このプロジェクトは2つのJavaファイルから構成される。
1. **sendNotification.java**: 通知を表示するためのクラス。
2. **timerPreference.java**: 指定された時間後に通知表示を発火するクラス。## ・ファイル説明
### sendNotification.java
主な機能
– **notificationDisplay()**:
– システムトレイに
Project Wakefieldをビルドしてみる
[前回の記事](https://qiita.com/hatano/items/aac635d6ef2f5af4e84f)ではSDKMAN!を用いてJetBrans Runtimeでjdk21を選択するとWLToolkitで動かすことができるという話をしました。
今回は実際にWakefieldのリポジトリからWLToolkitをビルドする手順をまとめました。Ubuntuでの手順になります。
まず[wakefieldのリポジトリ](https://github.com/openjdk/wakefield)をクローンしてきます。
“`
% git clone https://github.com/openjdk/wakefield.git
“`ブランチとして[jdk21.0.1-wayland](https://github.com/openjdk/wakefield/tree/jdk21.0.1-wayland)を選択します。
“`
% git checkout -b jdk21.0.1-wayland origin/jdk21.0.1-wayland
“`この状態
java初学者の学習メモ~Swingのインストール~
## 概要
今回はjava Swingのインストールをみました。
これから少しずつjavaの学習記録を残してまいります。
学習のメモ程度に記述していますのでご承知ください。## 実行環境
・windows:Windows11Pro 23H2
・java:22.0.1
・統合開発環境:Eclipse## インストール
以下の記事を参考にEclipseからインストールしました。https://oomilkywayoo.com/java-eclipse%E3%81%A7swing%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
## 実行スクリプト
“`sample.java
package helloworld;import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.bord
【Selenium】SpringBootで作成したアプリケーションの結合テスト
JUnitを使用した単体テスト書く経験は何回かありましたが、先日Seleniumを使用した結合テストを行ったので、要点をまとめたいと思います。
## Seleniumとは
Seleniumは、Webアプリケーションをテストするためのフレームワーク。
Java以外にもC#、Groovy、Perl、PHP、Python、Ruby、Scalaなどにも対応している。
pom.xmlのdependencyに追記することで、Javaからブラウザを使った結合テストを行うことができる。## 環境
– macOS Sonoma 14.6.1
– Java 17
– Spring-Boot 3.3.3
– selenium-java 4.24.0
– webdrivermanager 5.9.2
– Thymeleaf
– Maven
– ChromeDriver## 実際にやってみた
簡単なWebアプリケーションを作成して試してみました。
#### Controller/Repository
importは省略します
“`java:SeleniumRepository
@Re
Sentryでエラーをモダンに確認しよう!
## Sentryとは?
Sentryはエラーモニタリングツールになります!アプリケーションのエラーや例外をリアルタイムで検出し、
詳細な情報を収集・表示するためのツールです。## Sentryを導入するといいこと
Sentryを導入することで、以下の利点があります::::note info
### Sentryの利点
– リアルタイムなエラー検知:エラー発生後通知を受け取り、早期対応が可能
– エラーレポート可視化:スタックトレース等、エラーが発生した状況をすぐに把握可能
– 頻度やユーザー影響の確認:エラーの回数、どのユーザーに影響があったのかを確認することができ、優先度を決めやすくなります!
:::## Sentryの導入方法(Spring Boot)
今回はSpring Bootのプロジェクトを例に、導入をしてみます。### 1. Sentryの新規登録
下記からSentryの公式から新規登録をしてください!
個人開発レベルであれば、課金は不要かと個人的に思います。https://sentry.io/signup/
#### 新規登録
公式ページ
SpringBootでschema.sqlに書いた初期化用SQLが実行されない
## 状況
schema.sqlの内容
“` sql
–テーブル作成などのSQLを記述する用のファイル
CREATE TABLE IF NOT EXISTS tasklist (
id VARCHAR(8) PRIMARY KEY,
task VARCHAR(256),
deadline VARCHAR(10),
done BOOLEAN
);
“`## 解決方法
application.propertiesの設定が間違ってました
どうやら参考にしていた学習書に記載されていた設定方式が古かったらしい、、
springboot2.5以降で記載形式が変わった模様
“` properties
#修正前
spring.datasource.initialization-mode=always
#修正後
spring.sql.init.mode=always
“`
Java Gold ラムダ式(関数)について
# ラムダ式とは何か
ラムダ式は、匿名関数(名前を持たない関数)を簡潔に表現するための構文です。従来、匿名クラスを使用して記述していたコードを、よりシンプルに書くことができます。これにより、コードの可読性が向上し、開発効率もアップします。例:匿名クラスとラムダ式の比較
“`java
// 匿名クラスを使用
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println(“Hello, World!”);
}
};// ラムダ式を使用
Runnable runnable = () -> System.out.println(“Hello, World!”);
“`
# ラムダ式の基本構文
ラムダ式の基本的な構文は以下のとおりです。“`rust
(引数リスト) -> { 処理内容 }
“`引数リスト:関数が受け取る引数をカンマで区切って列挙します。
矢印演算子(->):ラムダ式であることを示します。
処理内容:メソッ
SQLの変数チェック
“`VarCheck.java
package varCheck;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;public class VarCheck {
private ListlistKey =new ArrayList ();
private Listdata=new ArrayList ();
private ListlistVar=new ArrayList ();
private Setset1=new TreeSet ();
private Set
Apache HttpClientで、リクエストヘッダーに”Accept-Encoding” の設定でgzipを自動設定しないようにする方法について
## 案1
リクエストヘッダーの “Accept-Encoding”の値を “”:空文字、または、 “identity” 設定参考URL
## 案2
以下のような実装で、自動コンテンツ解凍を無効にできそうです
HttpClient client = HttpClients.custom().disableContentCompression().build();参考URL
https://stackoverflow.com/questions/32354232/how-to-disable-compression-handling-in-apache-httpasyncclient
https://hc.apache.org/httpcomponents-client-4.5.x/current/httpclient/apidocs/org/apache/http/impl/client/HttpClientBuilder
Java Gold ScheduledExecutorServiceのまとめ
# 1. ScheduledExecutorService の特徴
### ScheduledExecutor=スケジュールドエグゼキュータ
`遅延実行`: タスクを指定した遅延時間の後に1回だけ実行できます。
`定期実行`: タスクを一定の間隔で繰り返し実行することができます。
`スレッドプールの管理`: 複数のスレッドでタスクを管理し、スレッドの使い回しによるリソースの効率化を実現します。
これにより、タイマーのような動作が必要な場合や、特定の時間ごとに実行したい処理を簡単に実装できます。# 2. ScheduledExecutorService の作成方法
ScheduledExecutorService インタフェースのインスタンスは、Executors クラスを使って作成できます。“`java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;public class Main {
public static void m
char型とint型の関係
## はじめに
文字列探索のアルゴリズムのひとつである**Boyer-Moore法**(BM法)を学習しているときに、とある疑問が浮かんだ。まずは、BM法のコードを示す。(BM法の詳細は割愛)
“`java:BM法
package org.example;public class StringSearch {
public static int bmSearch(String text, String pattern) {
int textLength = text.length();
int patternLength = pattern.length();int[] skipTable = new int[256]; // 1byteの文字に対応
for (int i = 0; i < 256; i++) { skipTable[i] = patternLength; } for (int i = 0; i < patternLength - 1; i++) { skipTable[patt
クラスとインターフェースの違いをちゃんと理解する
## はじめに
デザインパターンの勉強をしていてこんなことを思いました。
「抽象クラス」と「インターフェース」の違いってなんだ?
どう使い分けしたらいいんだろう?
インターフェースっていらなくね?
以上を踏まえて、今回は「抽象クラス」と「インターフェース」について知らべてみました。## 抽象クラスとは?
抽象クラスは「継承関係」にあり、実装クラスに「処理の再利用」を行いたいときに使用する。### 抽象クラスの特徴
– 抽象クラスを継承した場合、抽象クラス内の抽象メソッドのオーバーライドしないといけない
– インスタンス化できない
– 多重継承はできない
– フィールドをもてる### IS-Aの法則
抽象クラスは「IS-Aの法則」を満たす必要があるといわれています。 例えば、Car(車) は Vehicle(乗り物) であるという関係です(Car is a Vehicle.)。抽象クラスを利用することで、基底クラスの共通機能を継承し、サブクラスにて特定の機能を実装する形が一般的です。
### サンプルコード
“`
abstract class Vehicle {
中間コード方式について簡単に
## 概要
– コンパイラ方式とインタープリタ方式の中間的な方法
– 言語特有の環境用機械語にコンパイルし、実行時に逐次実行か機械語に翻訳後実行される
– Java、Pythonで採用## この方式の特徴と利点
– コンパイラ方式には及ばないが、インタープリタ方式よりは早い
– 一度中間コードにコンパイルするとwindowsでもmacでも動く## なぜ同じ方式のJavaとPythonで実行速度に差があるのか
– Javaは静的型付け、Pythonは動的型付けであるので型チェックの時間で差が生まれる
– JavaはJITコンパイラでネイティブコードに変換されるがPythonは逐次解釈するから
私がJavaプロジェクトが嫌いな7つの理由
### Java vs Kotlin: 7つの違いとコード例、比較表
JavaとKotlinの違いを比較しながら、Javaにおける課題とKotlinが提供する解決策について解説します。
—
### 1. 冗長なコード
**Java**ではシンプルなモデルクラスを作成するだけでも多くのボイラープレートが必要です。Kotlinは`data class`によって、ボイラープレートなしで`equals`、`hashCode`、`toString`などが自動生成されます。
#### コード例
**Java:**
“`java
public class User {
private String name;
private int age;public User(String name, int age) {
this.name = name;
this.age = age;
}public String getName() { return name; }
public void setNa
javaのapiにレスポンスのbody設定して返却したら、改行コードがあるから解析できずエラーについて、原因として考えられること
JSONの改行コードによる解析エラーが発生する場合、相手先のJavaのAPIの実装が原因である可能性があります。一般的には、JSONのパースは改行やインデント(整形されたJSON)の影響を受けず、正しいフォーマットの文字列であれば正常に解析されるはずです。
**考えられる原因**としては次のようなことが挙げられます:
## 1. **APIが改行や空白を処理できない設計**
JSON文字列を受け取る際に改行をそのまま文字列として扱う実装になっており、パースに失敗している可能性があります。一般的には改行やインデントを取り除くか無視するような設計が求められます。
## 2. **特殊な文字列エスケープ処理の問題**
改行コードが適切にエスケープされていない、もしくはJSONライブラリが何らかの理由で改行を誤って扱っている可能性があります。## 3. **文字エンコーディングの違い**
JSONが正しい形式で送信されていても、エンコーディングの問題が絡んでくることがあります。例えば、UTF-8で送信されたJSONを受け取る側が別のエンコーディングで解析しようとした場合、エラー
JavaGold 主要な関数型インターフェースと使い方
| パッケージ | インタフェース | 戻り値型 | メソッド |
| — | — | — | — |
| java.util.function | Supplier\| T | get() |
| java.util.function | Consumer\| void | accept(T) |
| java.util.function | BiConsumer\| void | accept(T, U) |
| java.util.function | Predicate\| boolean | test(T) |
| java.util.function | BiPredicate\| boolean | test(T, U) |
| java.util.function | Function\| R | apply(T) |
| java.util.function | BiFunction\| R | apply(T, U) |
| java.util.function |
Gradleでビルドすると’Task :resolveMainClassName FAILED’で失敗する
こんにちは。
この記事を閲覧しているということはエラーメッセージをピンポイントで検索したと思われますので、細かい話は抜きにして早速見ていきましょう。
# 環境
自分の環境はこちらです。:::note info
Gradle:v8.10.2
Java:__Amazon Corretto v23.0.1_8__
SpringBoot:v3.2.2
IDE:IntelliJ IDEA 2024.1.4 (Community Edition)
:::
後述しますがJava22以降で同様の現象が起こるようです。
IDEやGradleではなくJavaのバージョンが強く影響していました。
# エラーメッセージ
“`powershell
PS C:\Users\User\IdeaProjects\sample-project> gradle build
chart.jsを利用してDBに登録してあるデータをグラフ描画する
## 記事のゴール
画像左上のプルダウンで指定されたアイテムの月別の金額をグラフ表示できるようになる。(UI的な部分は一旦おいといて)
![スクリーンショット 2024-11-07 22.10.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630554/0527b7b5-ed05-e2e5-b6a2-49b813cd517f.png)
## HTMLを記載
“`HTML
“`chart.jsを利用するには、`canvas`タグを利用する。その部分にJSで記載したグラフ情報が乗っかってくる。
## JavaScriptを記載
“`JavaScript
`use strict`// ①sele