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

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

java try-catch-finallyのreturnについて

***javaのtry-catch-finallyのreturnについて***

javaのtry-catch-finallyのreturnについて意外と見落としがちな部分について記事にしていきます。
このようなtry-catch-finallyがあったとします。![スクリーンショット 2023-01-18 7.13.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087483/09cda797-a396-605a-4516-836b1a6c7417.png)
上記のコードは実行結果は***100***になります。
理由としてはtry文の15行目でRuntimeExceptionが発生してそれをcatch文で受け取りnumに100を代入してrerurnでnumを返してからfinallyでnum+=100されているからです。
***この時に24行目のreturn文は処理されずにtry-catch-finallyをそのまま抜けます。***

—-
考え方としては

try
↓例外発生した
catc

元記事を表示

Leetcode 926. Flip String to Monotone Increasing

https://leetcode.com/problems/flip-string-to-monotone-increasing/

## 難易度
### Medium

## アプローチ
### Prefix Sum, Brute-force

“`java
class Solution {
public int minFlipsMonoIncr(String s) {
int count = 0;
int result = 0;
for (char sChar : s.toCharArray()) {
if (sChar == ‘1’) {
count++;
} else if (count > 0 && sChar == ‘0’) {
count–;
result++;
}
}
return result;
}
}

元記事を表示

HashMap,TreeMapのcomputeIfAbsentでConcurrentModificationException

# 事の始まり
とあるプロジェクトでJavaのバージョン更新(8→17)を行っていた時のこと。
`java.util.HashMap`に対して`computeIfAbsent`を呼び出しているところで`ConcurrentModificationException`が発生するようになってしまいました。
この部分は旧バージョンから特にコードをいじっていないところ、かつ複数スレッドから参照されるものではなかったのでJavaのバージョンに起因するものでないかと考えました。

# 原因のコード
調査すると同じHashMapのインスタンスに対してcomputeIfAbsentが入れ子になっていることがわかりました。
簡単に書くと以下のようなコードです。
“`java
Map map = new HashMap<>();
map.computeIfAbsent(“k1”, tk1 -> map.computeIfAbsent(tk1, tk2 -> “value1”));
“`

実際には”k1″というキーに”value1″が入るだけなので入れ子になっている意味

元記事を表示

lombokで@EqualsAndHashCodeのInclude/Excludeが適用されない

# 問題
lombokでEqualsAndHashCodeを使えば自動的にhashCodeとequalsメソッドを実装してくれる。デフォルトでは、staticではなく、transientでないフィールドはすべて評価の対象となる。特定の対象のみを評価したい場合には、メソッドの前に下記のアノテーションを付ける。
“`java:対象コード
@EqualsAndHashCode
public class Data {
@EqualsAndHashCode.Include
String key;

int value;
}
“`
この場合は、keyのみを評価対象とするhashCodeとequalsメソッドができるのを期待する。しかし、これだとkeyもvalueも評価対象のものができてしまう。

下記のコマンドでlombokが生成しているコードを確認できる。
“`dosbatch:lombokの生成コード確認コマンド
java -jar lombok.jar delombok -p {対象のファイル名}.java
“`

先ほどのコードから生成されたコードを確認すると、
“`

元記事を表示

【Java】EclipseでOracle Databaseに接続する方法

# はじめに
今回は、JDBCを利用し、EclipseでOracle Databaseに接続する方法についてまとます。
大まかな手順と処理について記載しており、技術の詳細には触れていません。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

# この記事の目的
以下内容のアウトプット
– JDBCドライバの追加
– データベースへ接続と切断
– SQLの操作

# 開発環境
– Java 16.0.2
– JDK javac 10.0.1
– JDBC Oracle 12.1.0.1.0 JDBC 4.1 compiled with JDK7
– Oracle Database 11g Express Edition Release 11.2.0.2.0 – 64bit Production
– Eclipse

# この記事の内容
1. 前提
2. チートシート
3. JDBCドライバの追加(準備)
4. データベースへ接続と切断(DBManager)
5. SQLの操作(DBへ問い合わせ)

# 1. 前提

元記事を表示

Exception classのgetMessage

getMessage()とprintStackTrace()の違い
ExecutorServiceを使用した場合に発生するExecutionExceptionのgetMessage()について

“`java
public class Outer {
public static void main(String[] args) throws InterruptedException {
SampleException se = new SampleException(“xxxxxx”);
System.out.println(se.getMessage());
method();
Exception ex = new Exception(“eeee”);
System.out.println(ex.getMessage());
Exception ex2 = new ExecutionException(se);
System.out.println(ex2.get

元記事を表示

Future interfaceでexceptionをキャッチする

f.get()したときに、ExecutionExceptionが発生する
ExecutionExceptionがsubmit()で発生したExceptionを保有している

“`java
class SampleException extends Exception {
public SampleException(String message) {
super(message);
}

public SampleException() {
}
}
public class Outer {
public static void main(String[] args) throws InterruptedException {
ExecutorService e = Executors.newSingleThreadExecutor();
Future f = e.submit(() -> {throw new SampleException(“exxxxx”);});
e.shut

元記事を表示

ExecutorService Runnable/Callable

Runnable:no return
Callable:return
Future interface#get methodでreturnを取得する

“`java
public class Outer {
public static void main(String[] args) throws InterruptedException {
ExecutorService e = Executors.newSingleThreadExecutor();
Runnable r = () -> {
System.out.println(“runnable”);
};
Callable c = () -> {
return 1;
};
Future f = e.submit(r);
try {
System.out.println(f.get());
} cat

元記事を表示

newScheduledThreadPool method

fixedthreadpoolでscheduledThread
“`java
public class Outer {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService s = Executors.newScheduledThreadPool(2);
s.scheduleWithFixedDelay(() -> {
System.out.print(“a”);
},1,1,TimeUnit.SECONDS);
Thread.sleep(500);
s.scheduleWithFixedDelay(() -> {
System.out.print(“b”);
},1,1,TimeUnit.SECONDS);
Thread.sleep(10000);
s.shu

元記事を表示

CentOSでのjavaのインストール

サーバに「JDK11が必要」と言われて、バージョンを確認してみたら、これは何?
そこからJDK11をインストールして、切り替えてみた手順を記録に残しておきます。

自分が今後別のマシンで作業する時のためのメモですので、「そこ違いますよ」という箇所があれば、コメントいただけると助かります。
javaで開発しているのではなく、「ツールを動かすためにJDKをインストール必要があった」というレベルの作業です。

javaのバージョン一覧は[Oracle Java SE Supportロードマップ](https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html)で確認しました

### やったこと
* バージョンの確認
* JDK11のインストール
* バージョンの切り替え

### バージョンの確認
“`
$ java -version
openjdk version “1.8.0_312”
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 6

元記事を表示

Spring Thymeleaf(HTML)のFormとSpring(Javaのデータクラス)のつなげ方

・はじめに

 この記事においては、会員情報の送信などユーザーに何かデータを送信してほしいときによく使うHTMLのフォームとそのFormで送られる情報をJavaで受け取る方法を書いていきます。

・HTMLの設定

“`HTML:createAccount.html


~省略~

会員登録




元記事を表示

Java 教材 勉強

https://github.com/kounosu/java

元記事を表示

勉強

https://github.com/kounosu/java_student

元記事を表示

【順次更新】Minecraft Modding(Forge 1.19.2)を頑張ってみた。

こちらにて、順次更新しております。

https://zenn.dev/cyber_hacnosuke/books/minecraft-modding

# 現在更新されている内容
## [はじめに](https://zenn.dev/cyber_hacnosuke/books/minecraft-modding/viewer/intro)

– この本について
– 私について
– 執筆動機
– 本書の対象
– Minecraft Forge について
– MODについて詳しく
– 更新について
– 参考文献など

## [環境構築](https://zenn.dev/cyber_hacnosuke/books/minecraft-modding/viewer/env)

– エディタの準備
– MDKの準備
– Javaの準備
– MOD設定
– Javaをいじる
– 実行してみる

## [Item(基本編)](https://zenn.dev/cyber_hacnosuke/books/minecraft-modding/viewer/basic-item)

– Itemとは

元記事を表示

printStackTrace

throwable classのメソッドprintStackTrace

“`java
public class Outer {
public static void main(String[] args) {
String s = null;
try {
s.charAt(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
“`
“`
java.lang.NullPointerException
at com.mycompany.mavenproject1.Outer.main(Outer.java:23)
“`

元記事を表示

scheduleAtFixedRate, schedulewithFixedDelay

kickするのを定期的にinterval
scheduleWithFixedDelay 前の処理が終わってから定期的にinterval

below is scheduleWithFixedDelay sample
“`java
public class Outer {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor();
s.scheduleWithFixedDelay(() -> {
int interval = new Random().nextInt(10);
try {
System.out.print(interval);
Thread.sleep(interval * 100);

元記事を表示

scheduledexecutorservice interface

1秒後に実行
executorService#shutdown()/isshutdown()は検証用
“`java
public class Outer {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService s = Executors.newSingleThreadScheduledExecutor();
s.schedule(() -> {
System.out.println(“xxx”);
s.shutdown();
},1,TimeUnit.SECONDS);
int count = 1;
while(true) {
Thread.sleep(100);
if(s.isShutdown()) break;
System.out.println

元記事を表示

executorservice interface

newSingleThreadExecutor 1つのみ
newFixedThreadPool 指定した数のthreadpool
newCachedThreadPool 60秒経つと廃棄されるthreadpool

newCachedThreadPool sample
“`java
public class Outer {
public static void main(String[] args) throws InterruptedException {
ExecutorService e = Executors.newCachedThreadPool();
for(int i=0;i<5;i++) { e.submit(() -> {
System.out.println(“a:” + Thread.currentThread().getId());
});
}
Thread.sleep(5000);
for(

元記事を表示

正規表現(マッチ、抽出)

自分メモ。
“`
final String regex = “^(ねこ|いぬ)は(唐揚げ|魚)好き$”;
final String text = “ねこは唐揚げが好き”;
if (text.matches(regex)) {
final Pattern p = Pattern.compile(regex);
if (m.find()) {
m.group(); // ねこは唐揚げが好き
m.group(0); // ねこは唐揚げが好き
m.group(1); // ねこ
m.group(2); // 唐揚げ
}
}
“`

or条件で空文字判定をする場合は(|唐揚げ|魚)とすればよい。

元記事を表示

thread class, runnable interface

Runnableはrun methodをもつfunctional interface
constructor of Threadにrunnableを引き渡す
“`java
public class Outer {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
public void run() {
System.out.println(” i am run method”);
}
});
t.start();
}
}
“`
“`
i am run method
“`

元記事を表示

OTHERカテゴリの最新記事