- 1. 【 識別子(identifier)とそのルール 】
- 2. Java入門#1
- 3. FirebaseとHerokuでエセAndroidフルスタック開発をした話
- 4. Java SE8 Sliverの資格を取得して
- 5. SpringのDIとLombokってとても相性良くないですか・・・?
- 6. 【Java】なんとなくわかった気になれるラムダ式の解説
- 7. Java,Kotlin上からJDBCでSQLite接続しているときに、IDEA上でUnable to resolve tableと表示されてしまう時の対処法
- 8. 【これさえ読めばなんとなく違いがわかる】SpringBootの@〇〇Mappingとは?
- 9. 【 Javaで書いたソースコードが動作するまでの流れ 】
- 10. JEP 421: Deprecate Finalization for Removal
- 11. M1 Mac も速くないことがある
- 12. [IntelliJ IDEA] 静的セキュリティーチェックツール
- 13. Testcontainersでデータアクセスロジックのテストを行う方法
- 14. Springで自動生成されるBean名をFQCNに変更する方法
- 15. mybaits-spring-boot-starter-testの使い方
- 16. Spring + lombokでコンストラクタインジェクションする際にBean名を指定する方法
- 17. [Java] Spring Boot を導入する
- 18. ファイルの入力と出力のテストコード
- 19. JetpackComposeでJavaクラスを引数にとるとスマートコンポジションが効かない(1.1.0-rc03時点)
- 20. 並行処理時のFileAlreadyExistsException
【 識別子(identifier)とそのルール 】
現在Javaを学習中なので、その備忘録としての投稿になります。
## 識別子とは
`変数名`、`関数名`、`プロパティ名`、`ファイル名`等を宣言・命名するときに使える、
`文字や数字の並び`のことです。
名前を何にするかは自由ですが、通常は、
`アルファベット`、`数字`、`アンダースコア(_)`、`ドルマーク($)`などを組み合わせて作ります。## ルール
名前を何にするかは自由とは言え、`ルールや慣習`があり、それを守らなければなりません。
### ①予約語を使わない
予約語とは、すでに使われている、`「int」`、`「void」`、`「static」`のような単語のことです。
宣言・命名にはこれらを利用することはできません。### ②既に使っている変数名の利用
例えば、既に変数nameを宣言しているのに、再び変数nameを宣言するようなことをしてはいけません。
同名の2つの変数の区別ができなくなるからです。### ③文字の大小の違いは区別される
大文字/小文字、全角/半角は完全に区別されます。
例えば、変数nameと変数Nameは全くの別物になります。###
Java入門#1
#Java入門その1
今回はJavaとはどんな言語なのかと、簡単なプログラムを書いてい見ます。##Javaとは
オブジェクト指向型のプログラミング言語です。
特に**業務用システムの構築**に適していると言われていて、世界で最も使われているプログラミング言語の一つです。###特徴
・まず、どんなコンピュータ上でも動作します。
このことを**プラットフォーム非依存**と呼んだりします。JavaはJava仮想マシンという擬似的に作り出されたマシン上で動作します。わかりづらいのでGoogle Chromeを考えて見てください。
Google Chromeも似ていて、仮想OS上で動作します。そのため、windowsでもMacでも使用することができます。Javaも同じで、Java仮想マシン上で動作します。そのため、windowsでもMacでも使用することができます。
・オブジェクト指向型プログラミング
これはC#やPythonのような、 クラスを作っていくプログラミングということです。
有名なオブジェクト指向型プログラミングに、Java,C++,Python,JavaScri
FirebaseとHerokuでエセAndroidフルスタック開発をした話
# まえがき
このたび、北海道札幌琴似工業高等学校 全日制 情報技術科を卒業することになりました。
今は学年末テストが終わって成績確定を待っている状況で、今後なにもなければ3/1日をもって卒業、進学することとなりました。弊校では三年時にすべての生徒が「課題研究」という名で、なにかしらものを作ります。
私の所属する班はAndroidアプリを作ることになりました。つまるところこの記事は、FirebaseとHerokuをバックエンドに持ったAndroidアプリを開発した話です。
主に成果物の概要と、振り返り、苦労をただただ書いていきます。技術的な内容は少ないかもしれませんが、Androidアプリ初学者の戯言と思っていただけると幸いです。# Contents
以下にこの記事内の記述内容について簡単にまとめます。
目次はハイパーリンクになっています。スマートフォンでご覧のかたや、Webブラウザのウィンドウサイズ等で右の目次が表示されていない方はご利用ください。– [作ったもの](#作ったもの)
– 実際の完成品について記述しています。
– [使った技術](#使った技術)
Java SE8 Sliverの資格を取得して
#Java SE8 Sliverとは
私は先日「Java SE8 Sliver」というOracle社が提供する、Javaの開発者向けの資格を取得した。このJava Silverとは、プログラミング言語Javaの技術レベルをOracle社が認定する資格で、正式名称は「Oracle Certified Java Programmer, Silver SE 8」である(ちなみにこのSE8はJavaのバージョンを指し、現在はSE8とSE11がある)。このJava Silverは中級者を対象としたものであるが、それ以外にも初級者向けのBronze、上級者向けのGoldなどがある。この「Oracle Certified Java Programmer」はJavaアプリケーション開発のためのプログラミング知識や、さまざまな状況への対応能力を有していることを客観的に証明できるものとなっている。つまり、このJava Silverと言う資格の取得にはプログラミングにおける「最低限動作可能な」コードだけでなく、「拡張性、可読性がともに高い」コーディング能力が求められるのである。
#取得までにかかっ
SpringのDIとLombokってとても相性良くないですか・・・?
SpringのDIとLombokって相性がいいよな、って今更になって思いました!
SpringのDIだけでなくて、探せば他にもLombokと相性が良い機能がありそうだなぁ・・・
どなたかご存知なら教えてください!# この記事はこちらに移管しましたmm
【Java】なんとなくわかった気になれるラムダ式の解説
## はじめに
よくわからず使っていたラムダ式ですが、JavaSilver取得を機に自分なりにまとめてみました!## そもそもラムダ式とは?
今まで**匿名クラス**でできた処理をより簡潔に記述できるようにしたもの(要は書き方のこと!)
## で、匿名クラスって何?
匿名クラスとはインタフェース実行のステップを簡潔にしたもの。
従来、インタフェースの実行は**①インタフェースの作成→②インタフェースの実装用のクラスを作成→③インタフェースの実行用クラスの作成**の3ステップを踏む必要があった。
“`java
// 1.インタフェースの作成
interface Car {
String carType(String typeName); // 車の種類(抽象メソッド)
}// 2.インタフェースの実装
public class CarImple implements Car {
@Override
public String carType(String typeName) { // 抽象メソッドのオーバーライド
return “carType:” + ty
Java,Kotlin上からJDBCでSQLite接続しているときに、IDEA上でUnable to resolve tableと表示されてしまう時の対処法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362835/09e8379b-c957-3cc2-bebb-8fe026409b46.png)
これをなおしたい。5分くらいハマったのでメモ。# 解決方法
File > Settings > Languages & Frameworks > SQL Dialects
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362835/71bb2aa0-5d1c-ef72-c7ab-e8b9b5c3f3a0.png)
ここを両方SQLiteにする
【これさえ読めばなんとなく違いがわかる】SpringBootの@〇〇Mappingとは?
## 今回比較する@〇〇Mapping
1.RequestMapping
2.PostMapping
3.GetMapping
4.DeleteMapping
5.PutMapping## 使い分けるメリット
一目見てどんな処理をしているメソッドが判断できるため、可読性が上がる
例)Getであれば登録データの取得のメソッドetc…詳細は以下をチェック!
## 各@〇〇Mappingの使い方
### 1.RequestMapping
サイト全体の入り口部分。
例)Qiitaにアクセスする### 2.PostMapping
新しいデータを登録する役割を果たす。(**INSERT処理**)
例)Qiitaにユーザー登録する/Qiitaに記事を投稿するetc…### 3.GetMapping
登録されているデータを取得する役割を果たす。
例)Qiitaのトレンドから1件の記事を開くetc…### 4.DeleteMapping
登録されている値を削除する役割を果たす。
例)Qiitaからユーザーを削除する/Qiitaへの投稿を削除するetc…##
【 Javaで書いたソースコードが動作するまでの流れ 】
最近Javaの学習を始めて、まずは`Javaのソースコードで指示した通りの動作`が行われるまでの流れを確認しています。
## ざっくりとした3つの流れ
1.まず、`ソースコード`を書きます。ソースコードが書いてあるファイルを`ソースファイル`と呼び、拡張子は`「.java」`です。
2.次に、そのソースファイルを`コンパイラ`というソフトウェアで`クラスファイル`に`コンパイル`します。クラスファイル内には`バイトコード`という`1と0が複雑にならんでいるもの`が詰まっていて、このファイルの拡張子は`「.class」`になります。
3.最後に、バイトコードを`マシンコード(機械語)`に変換します。変換には`インタプリタ`という内部に`JVM`というしくみをもったソフトウェアを用い、バイトコードを少しずつ読みながら翻訳をしして`CPU`に送って処理を実行します。このようにして`Javaのソースコードで指示した通りの動作`は行われます。
## 各用語の解説
ソースファイルとは….ソースコードを書き込んだファイルのこと
ソースコードとは….人が読める状態のプログラムのこと
クラ
JEP 421: Deprecate Finalization for Removal
動向キャッチアップ出来てなかったので纏め。
https://openjdk.java.net/jeps/421
## 概要
* タイトル通り、Finalizationを廃止する為に前準備するJEP。
* Java 1.0から存在してるprotected void finalize()を廃止。
* Finalizationに対する指摘自体は1998年から挙がってた、とのこと。
* Finalizationの問題点は、JEP本文ご参照。
* 経緯も纏まっていて非常に勉強になった。
* JDK18時点ではデフォルト有効で変わらず。
* 移行先は、try-with-resources(Java7以降)および、Cleaners(Java9以降)を想定。## 今後(JEP421で整備する範囲)
* 以下などfinalize()メソッドをDeprecated勧告。
“`java
java.lang.Object.finalize()
java.lang.Enum.finalize()java.util.concurrent.ThreadPoolExec
M1 Mac も速くないことがある
# これは何?
先日まで Mid 2015 の 15 inch MacBook Pro (Core i7 クアッド / 2.2 GHz) を使っていた。
先日 MacBook Pro 14 inch (M1 非Max) を手に入れたんだけど、あんまり速くないなと思うことがあったので、今日も楽しいマイクロベンチマーク。# 計算内容
ruby で書くと短くていいね。
“`ruby:ruby
N=10000
r=(1..N).max_by{ |x| ((N-x)**x/7) % 6074001001 }
p r
“`
こういう内容。なんの意味もない。出力は
“`text
8663
“`となれば正解。
これを、go, java, c++ with boost (clang, gcc), ruby, python3, node で試した。
以降、グラフで出てくる “m1”, “rosetta”, “amd64” の意味は下表のとおり。
|記号|実行ハードウェア|バイナリ|
|:–|:–|:–|
|m1|MacBook Pro 14 inch (M1 非Ma
[IntelliJ IDEA] 静的セキュリティーチェックツール
# 概要
ここ記事は下記のgithubを参考し、作成しました。
[immomoのgithub](https://github.com/momosecurity/momo-code-sec-inspector-java)### immomoとは
静的javaコード、sqlコードをチェックし、セキュリティー上の問題が発見すると、エラーをを表示し、改修案を提示してくれるIntelliJ IDEAのプラグインです。
# requirement
下記によって、IntelliJ IDEAのバージョンは` >= 2018.3`>https://github.com/momosecurity/momo-code-sec-inspector-java#%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81
# インストール
プラグインマーケットで`immomo`を検索すれば良い。
> https://github.com/momosecurity/momo-code-sec-inspector-java#%E5%AE%89%E8%A3%85%E4%BD%BF%E7
Testcontainersでデータアクセスロジックのテストを行う方法
# はじめに
Testcontainersを使ってMySQLへのCRUDを行うデータアクセスロジックのテストコードを書いてみたので備忘録を残します。本記事内では抜粋したサンプルコードを掲載していますが、完全なソースコードは[GitHubリポジトリ](https://github.com/avenue68/repository-for-sharing/tree/master/qiita-797dab990acac61c94e9)で閲覧可能です。# Testcontainersとは
[公式リファレンス](https://www.testcontainers.org#about)では以下のように説明されています。>Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker
Springで自動生成されるBean名をFQCNに変更する方法
# はじめに
デフォルトBean名をFQCNにするための方法について解説します。すでに同様の内容を解説したページがいくつかありますが、独自の`BeanNameGenerator`実装クラスを定義する内容のものが多く、標準で用意されている`BeanNameGenerator`実装クラスを利用する例や複数の設定方法を網羅している解説は無かったため、備忘録として残しておきます。# 概要
SpringでアノテーションベースのBean定義を行う場合、特にBean名を明示しない限り、暗黙的に**Lower Camel Caseのクラス名**がBean名として与えられます。パッケージ名は無視されてしまうので、状況によってはBean名が重複し`ConflictingBeanDefinitionException`が発生してしまうことがあります。“`java
package com.example.demo.package1
@Service
public class UserService {
/* Bean名:userService */
}
package com.example.de
mybaits-spring-boot-starter-testの使い方
# はじめに
MyBatis-Spring-Boot-Starter-Testを使ってMapperクラスのテストコードを書いてみたので備忘録を残します。# 概要
Spring BootでMyBatisを使用しており、MyBatisにより自動生成されたMapperクラスのテストを行う場合は、SpringのDIコンテナを使ってテストを行う必要があります。しかし、単に`@SpringBootTest`アノテーション等でSpring Bootの機能を有効にするだけでは、Mapperクラスのテストに不要なAutoConfigureクラスが有効になったり、不要なBeanが生成されたりしてしまいます。
MyBatis-Spring-Boot-Starter-Testを使用することで、このような問題を回避できます。# 環境
– Java
– Junit5
– SpringBoot
– MyBatis
– Testcontainers
– Maven
– Windows10# 依存関係
MyBatis-Spring-Boot-Starter-Testを使用するためには、以下の依存関係を`
Spring + lombokでコンストラクタインジェクションする際にBean名を指定する方法
# はじめに
Lombokの`@AllArgsConstructor`アノテーションや`@RequiredArgsConstructor`アノテーションを使用してコンストラクタインジェクションを行う際に、Springの`@Qualifier`アノテーションでインジェクトするBean名を明示する方法について解説します。
すでに同様の内容を解説しているページがいくつかありますが、設定ファイルの配置位置や設定内容自体についての解説はあまり無く、追加で調べる必要があったので備忘録として残しておきます。# 概要
コンストラクタインジェクションでインジェクトするBean名を明示したい場合は、以下のようにコンストラクタの引数に`@Qualifier`アノテーションを付与する必要があります。“`java:MyController.java
@Controller
public class MyController {
private final MyService service;
public MyController(@Qualifier(“myServiceImpl”)MyServ
[Java] Spring Boot を導入する
##記事作成の目的
– これからjava学習をするにあたっての環境構築
– 初心者のため備忘録としてアウトプット
– 同じ所で詰まった人がいたときに参考にして頂くため## Spring Bootについて
Spring Bootとは、Javaのフレームワークの一つ。
Spring フレームワークというプロジェクトで出来ることは数多ありますが、環境構築等含め汎用的で使い勝手の良いものとして凝縮したものが「Spring Boot」です。今回は導入までをシンプルに記述するため、メリットに関しては以下記事等を参考にいただければと思います。
https://qiita.com/y_ogawa_naaaa/items/55ea48d4f163d8d7a241
https://camp.trainocate.co.jp/magazine/spring-boot/
## Spring Bootの導入
### 前提
– [eclipceのインストール](https://mergedoc.osdn.jp/)(Pleiades All in One からダウンロード)
まだの方は上記から
ファイルの入力と出力のテストコード
最近、ファイルを取り込み加工して出力する単純なプログラムを作成しましたが。作業期間が限られていたこともあり、必要最低限のテストコードしか整備できませんでした。。
**実装**
“`Java:App.java
public class App {
public static void main(String[] args) throws IOException {
String input_str = file_read();
input_str += “\n追記!”;
file_output(input_str);
}public static String file_read() throws IOException {
Path file = Paths.get(“src/main/resources/input/test.txt”);
return Files.readString(file, Charset.forName(“UTF-8”));
}
JetpackComposeでJavaクラスを引数にとるとスマートコンポジションが効かない(1.1.0-rc03時点)
# TLDR
## どういう現象が発生し得るか?
* Composable関数の入力値にJavaで書かれたクラスがある場合、スマートコンポジションが効かなくなってしまう場合があるようです。
つまり、__入力値が前回と今回で全く同じであったとしても、毎回再コンポジションが発生してしまうということ__です。## 回避するには
クラスに@Stable or @Immutableアノテーションを付与しましょう。* 公開プロパティが全て不変である場合は、@Immutalbeを付与しましょう。
* 公開プロパティの変更をComposable関数に通知したい場合(再コンポジションを発生させたい場合)は、@Stableを付与しましょう。__ただし、闇雲に上記アノテーションを付与すると、再コンポジションの仕組みがうまく行かない場合があるため、アノテーションを付与できる細かい条件は下記公式ドキュメントを参照して下さい!!__
https://developer.android.com/jetpack/compose/lifecycle?hl=ja#skipping# 詳細
## 前提
並行処理時のFileAlreadyExistsException
テスト中、起こらないはずが時たまエラーになって確認したもの
参照したサイト:
– how to resolve : https://stackoverflow.com/questions/16179102/files-createdirectory-filealreadyexistsexception
– java doc https://docs.oracle.com/javase/jp/7/api/java/nio/file/Files.html#createDirectory(java.nio.file.Path,%20java.nio.file.attribute.FileAttribute…)## 問題になるコード
“`java
if(!directory.exsits()){
Files.createDirectory(dir);
}
“`
## FileAlreadyExistsException原因→並行処理による
パスの存否によってパスを作成するように対応したはずなのに。。。!あ。。並行処理を見逃した。
たとえば、処理A、Bがあれば
A:check