- 1. java try-catch-finallyのreturnについて
- 2. Leetcode 926. Flip String to Monotone Increasing
- 3. HashMap,TreeMapのcomputeIfAbsentでConcurrentModificationException
- 4. lombokで@EqualsAndHashCodeのInclude/Excludeが適用されない
- 5. 【Java】EclipseでOracle Databaseに接続する方法
- 6. Exception classのgetMessage
- 7. Future interfaceでexceptionをキャッチする
- 8. ExecutorService Runnable/Callable
- 9. newScheduledThreadPool method
- 10. CentOSでのjavaのインストール
- 11. Spring Thymeleaf(HTML)のFormとSpring(Javaのデータクラス)のつなげ方
- 12. 会員登録
- 13. Java 教材 勉強
- 14. 勉強
- 15. 【順次更新】Minecraft Modding(Forge 1.19.2)を頑張ってみた。
- 16. printStackTrace
- 17. scheduleAtFixedRate, schedulewithFixedDelay
- 18. scheduledexecutorservice interface
- 19. executorservice interface
- 20. 正規表現(マッチ、抽出)
- 21. thread class, runnable interface
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
Mapmap = 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”);
};
Callablec = () -> {
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 前の処理が終わってから定期的にintervalbelow 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秒経つと廃棄されるthreadpoolnewCachedThreadPool 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
“`