- 1. 【kotlin】日本語ファイルを ZIP 圧縮する
- 2. Javaの基本的な命名規則
- 3. Javaとは
- 4. Proxy Pattern
- 5. [Android]Androidアプリ側で何かしらのライブラリを読み込むとコンフリクトバージョンエラーが発生する理由
- 6. MacにてJavaの開発環境構築ーーJDK Install(2020年保存版)
- 7. オブジェクト指向の初学者でもわかる「継承」
- 8. Javaで学習してきたこと(その2)変数とは
- 9. 【Java】containsメソッドで配列(やリスト)で値を検索する方法
- 10. Flyweight Pattern
- 11. オブジェクト指向の初学者でもわかるポリモーフィズム
- 12. Javaを学ぶためのロードマップ一覧
- 13. Iterator Pattern
- 14. 【Java】列挙型
- 15. SpringBoot+MyBatis+DBUnitでCRUDのテストを書いてみた(前編)
- 16. 【Java】例外処理
- 17. 【Java】Objectクラス
- 18. サーブレットの変更内容が反映されない時の対処
- 19. Spring Cloud Gatewayでoauth2認証
- 20. 【Java】try-catchの例外処理について
【kotlin】日本語ファイルを ZIP 圧縮する
## はじめに
ZIP 圧縮時、つまり[ZipOutputStream](https://docs.oracle.com/javase/jp/8/docs/api/java/util/zip/ZipOutputStream.html#ZipOutputStream-java.io.OutputStream-) で使われる Charset のデフォルト値は UTF-8 となっています。
Windows の日本語ファイル名は MS932 なので、このままでは Windows で解凍した際に文字化けします。
そこで、ZipOutputStream で Charset を指定し、文字化け回避します。
似たような記事は Java ならたくさんありますが、Kotlin では少なかったので投下します。尚、筆者は FileInputStream の使い方が分からないくらい Kotlin(Java) に慣れていないため、もっと良い書き方があればご教示いただけると嬉しいです。
## この記事で分かること
Kotlin を使用した ZIP 圧縮(日本語対応)のやり方。
※展開はやりません。
Javaの基本的な命名規則
| | 規則 | 例 |
| ———- | —————————- | ———————– |
| パッケージ | すべて小文字 | jp.co.hello.common.auth |
| クラス | Pascal記法 | User |
| 変数 | camelCase記法 | userName |
| 定数 | すべて大文字の
アンダースコア記法 | USER_NAME |
Javaとは
# Javaとは
* 1995年、旧サン・マイクロシクテムズ社が発表したプログラミング言語
* 2010年、Oracle社が買収
* サーバーサイド開発、Androidアプリ、家電への組み込みなど、幅広い分野で使われる# Javaの特徴
* オブジェクト志向
* Java仮想マシンで実行される
* ソースコード→(コンパイル)→Javaバイトコード
* プラットフォームに依存しない
* Write Once, Run anywhere(一度書いたらどこでも動作する)
* ガーベッジコレクション(GC)
* 利用されなくなったメモリを自動的に解放する機能# Javaのエディション
* Java SE
* Javaアプリを動作させるための基本の実行/開発環境を提供する
* Java EE
* Java SE + サーバーアプリ開発のためのライブラリ郡(フレームワーク)
* Java ME
* 組み込み系を想定したエディション
Proxy Pattern
#Proxy
Proxyクラスに特定のクラスのタスクを代行させる
Proxyクラスで処理できないタスクは特定クラスに委譲するというメソッドを持たせる
特定クラスのインスタンスは、特定クラスにタスクを委譲するまで生成しないこのページでは下記を記載します
・Proxy Pattern の構造確認
・実装[Design Pattarm MENU](https://qiita.com/drafts)
##Proxy Pattern の構造確認
以下のクラス構成で確認します|クラス|説明|
|——|—-|
|sam.class|Proxyが代行するクラス|
|samProxy.class|sam.classのタスクを代行する|“`java:sam.class
class sam{
void sm1(){}
void sm2(){}}
“`
“`java:samProxy.class
class samProxy{
sam sam;
void sm1(){}
void sm2
[Android]Androidアプリ側で何かしらのライブラリを読み込むとコンフリクトバージョンエラーが発生する理由
# はじめに
Androidで開発をしていて、よくある問題として何かしらのライブラリをgradleで読み込み実行すると、kotlinのバージョンンコンフリクト系のエラーが発生する場合がある。ので見解
ちょっと調べたのでメモ程度に残しておきます
# 原因
いろいろな理由があるのかも知れないが、まずライブラリのkotlinのバージョンとコンフリクトを起こしている場合に起きえます。
その場合は、そもそもライブラリを使うのを諦めるか、ライブラリのバージョンを古いものを使ってみるか、ライブラリを組み込むアプリのkotlinバージョンをアップしてみるかなどよくわからずに適当に試行錯誤して解決することが多いです。## kotlinライブラリのコンフリクト
kotlinのライブラリを読み込むとkotlinのライブラリがアプリ側に読み込まれます。
その分apkのサイズとメソッド数は増加します。multi dexが必要かも。アプリ側に読み込まれたkotlinライブラリとアプリ側のkotlinのバージョンでコンフリクトが起きる場合があるようです。
gradleの使用は下記を参考ください。ko
MacにてJavaの開発環境構築ーーJDK Install(2020年保存版)
Java開発環境構築の最初に、JDKのインストールをしましょう。
まずはhttps://www.oracle.com/jp/java/technologies/javase-downloads.html
という公式サイトからJava SEのバージョンを見て右下の「JDK Download」をクリックして、
![スクリーンショット 2020-11-06 16.08.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858237/2cdf0405-4f45-5239-3900-8b66cbdc22d8.png)
ダウンロードの詳細画面に遷移して、「jdk-15.0.1_osx-x64_bin.dmg」というリンクをクリックします。
![スクリーンショット 2020-11-06 16.13.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858237/895c7ee4-35a0-d4f6-9e62-15589008ea
オブジェクト指向の初学者でもわかる「継承」
# はじめに
オブジェクト指向プログラミングの三大要素って知っていますか?+ 1. クラス(カプセル化)
+ 2. 継承
+ 3. ポリモーフィズムこの記事では、三大要素の1つである「継承」を解説します。
ポリモーフィズムについては、 [こちら](https://qiita.com/tomonori_hioki/items/d8b1f8a6552c94b3180a “オブジェクト指向の初学者でもわかるポリモーフィズム”)の記事で解説しています。# 継承とは?
一言でいうと、オブジェクト(クラス)の共通点と相違点を整理するためのしくみです。
いわゆる「is-a関係」です。
is-a関係とは、A is a B. のことで、日本語だと「AはBの一種」という意味です。
また、数学の概念では、「全体集合と部分集合」の関係です。(例)
+ 哺乳類は動物の一種(他にも、魚類や両生類も動物の一種です)
+ イチゴはバラ科の一種(他にも、サクラ、ウメ、モモもバラ科の一種です)### 補足
@shiracamusさんより「スーパークラスは、共通機能の最小セット」とコメントいただきま
Javaで学習してきたこと(その2)変数とは
#Javaの振り返り
前回に引き続きJavaを勉強してきた内容を大まかに振り返りたいと思います。※良ければ以前の記事もご覧ください
[Javaで学習してきたこと(その1)Java開発の流れと全体像](https://qiita.com/adgjmptw0/items/2ed35925c88ca061a3f6)#変数とは
Javaは一つ一つ箱を作りながらシステムを構築していくイメージです。その箱の中の最小単位となるのが変数です。
変数はデータを入れておくための箱を用意して、
その中にデータを入れたり取り出したりする
ことができます。
![スクリーンショット 2020-11-06 121659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603568/45fc8e2b-79a9-7eb6-f0d9-1ada45bb5eeb.png)例として
“`java
public class Main {
public static void main(String[] args) {
in
【Java】containsメソッドで配列(やリスト)で値を検索する方法
#プログラミング勉強日記
2020年11月6日
Javaで配列を扱ったときに配列の要素の中から値を検索する方法でてこずったのでまとめる。#配列を検索する方法
配列内に特定の値が含まれているか検索するときにcontainsメソッドを使う方法がある。
containsメソッドをメソッドを使用するには`hava.util.Arrays`をインポートする必要がある。containsの引数には検索したい値を入れ、存在する場合は真となり条件内の処理を通る。“`java:数値を検索する
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Integer num[] = {10, 20, 30};
// 配列に30が含まれているかどうか
if(Arrays.asList(num).contains(30)) {
System.out.println(“値が存在する”);
}
}
}
“`“`:実行結果
値が存在
Flyweight Pattern
#Flyweight Pattern
インスタンスを多重生成せずに使いまわしてメモリに優しくなる
このページでは下記について記載します
・Flyweightの基本構成
・実装[Design Pattarm MENU](https://qiita.com/drafts/9b975702300dd193a680/edit)
##Flyweightの基本構成
|クラス|説明|
|——|——-|
|factory.class|sam.classのインスタンスを重複生成させない|
|sam.class|userがインスタンスを生成する対象クラス|
|user(Main.class)|factory.classを経由してsam.classインスタンスを生成する|factory.classとsam.classの基本構造
“`java:factory.class
class factory{
Map map;
sam getSam(){}
}
“`
factoryでは、生成したsam()インスタンスをMap
オブジェクト指向の初学者でもわかるポリモーフィズム
# ポリモーフィズムとは
ウィキペディアにはこう書いてありました。
>ポリモーフィズム(英: Polymorphism)とは、プログラミング言語の型システムの性質を表すもので、プログラミング言語の各要素(定数、変数、式、オブジェクト、関数、メソッドなど)についてそれらが複数の型に属することを許すという性質を指す。ポリモルフィズム、多態性、多相性、多様性とも呼ばれる。
「プログラミング言語の各要素についてそれらが複数の型に属する」という点が難しいですが。
### 要するに、ポリモーフィズムとは、共通メインルーチンのことです。
#### 共通メインルーチンとは?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409243/f39dc457-2d77-6fb2-f7d6-14bcf5d192d4.png “オブジェクト指向でなぜつくるのか 第2版 より引用”)+ 共通サブルーチンと逆の発想。
+ 呼び出し方は一通りだが、呼び出されるもの(メソッド)は複数通りある。# なぜポリ
Javaを学ぶためのロードマップ一覧
Javaを学ぶためのロードマップを調べました
#私からあなたへ 一人前のJavaエンジニアになるためのロードマップを送ろう
https://qiita.com/haruto167/items/5a784df032518277f4a0■ロードマップ
■学習方法
1.Hello World
2.基本を学ぶ
IDEを使いこなす
3.プロジェクト管理を学ぶ
4.標準&ベストプラクティスを学ぶ
5.他人のソースを読む&ライブラリを学ぶ
6.テストコードを学ぶ
7.カバレッジを意識したテストコードを書く
8.RDBを学ぶ
9.フレームワークを学ぶ
10.よく使う機能を作ってみる
11.Webテストを学ぶ
12.NoSQLを学ぶ
13.キャッシュを学ぶ
14.Rest APIを学ぶ
15.認証を学ぶ
16.セキュリティを学ぶ
17.メッセージングを学ぶ
18.検索エンジンを学ぶ
19.Dockerを学ぶ
20.Webサーバーを学ぶ
21.Webソケットを学ぶ
22.GraphQLを学ぶ
23.Graph Databaseを学ぶ
24.BigQueryや機械学習にチャレンジ#最速でJava
Iterator Pattern
#Iterator Pattern#
userが操作できるのはhasNext()とnext()だけにし
Iteratorの実装クラスを隠ぺいすることで
userとIterator実装クラスとの依存性を解消する
このページでは
・Iteratorの構造確認
・Iteratorの隠蔽
について記載しています[Design Pattarm MENU](https://qiita.com/drafts)
##Iteratorの構造確認
以下のclass構成で確認します|クラス|説明|
|—-|———|
|sam.class|配列とIterator()を持つ|
|Itarator.class|sam.classの配列要素を呼び出す|
|user(Main.class)|sam.classを使う|samとIteratorクラスの基本構造は以下の感じです
“`java:sam.class
class sam{
int[] i= {0,1,2};
Iterator iterate(){}
}
“`
【Java】列挙型
* 値そのものに意味がなく、シンボルとして意味を持つ定数で`final static`を使わない
* `public final static int SPRING = 0;`はint型なので全数値も受け取れる
* 季節を数値で表して月を数値で表してると引数など取り違える可能性
* →***列挙型**を使う
* `enum 型名`で名前をカンマ区切り
* 引数はintではなく**enumで定義した名前の型!**“`java
//Season型のSPRINGにアクセスする場合、Season.SPRING
public enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER,
}
“`
“`java
public class EnumConstClient {public static void main(String[] args) {
var ecs = new EnumConstSeason();
ecs.processSeason(EnumConstSeason.SPRING);
SpringBoot+MyBatis+DBUnitでCRUDのテストを書いてみた(前編)
# はじめに
[前回の記事](https://qiita.com/kilvis/items/d75461b3596bfb0f6759)ではSpringBoot+JUnit5でController層のテストクラスの実装を行いました。
今回はDB操作を行うService層とテストクラスの実装をまとめていきたいと思います。ただ、テスト対象となるアプリの準備に少々ボリュームがあるので、前編、後編で記事をわけることにしました。
以下の構成でまとめようと思います。– [前編] データベース`MySQL`の準備
– [前編] `MyBatis`[^mybatis]を使ったRepositoryクラスの作成
– [後編] テスト用のデータベース`H2`[^h2]の準備
– [後編] `DBUnit`[^dbunit]を使ったテストクラスの作成**・・・前編は肝心なテストクラスの作成まで行ってません(汗**
[^mybatis]: いわゆるO/Rマッパー。JavaとSQLのマッピングがシンプルでわかりやすく動的SQLの記述も可能。MyBatisGeneratorでTBLから、Mapper、
【Java】例外処理
#例外処理とは
* アプリ実行時に発生するエラーに対応する
* 狭義の例外:開発者の責任では可否できないエラー
* ファイルが存在しない
* 接続先DBが停止していた
* Javaではこれらのエラーに対応必須
* **例外は型(クラス)**である
* **一般的な例外を上位クラス、個々の状況の例外を下位クラス**としたクラス階層として表す#try…catch構文
* **tryブロック**:本来の処理
* **catchブロック**:例外の型によって呼ばれる
* 例外発生=**例外がスロー**される
* 指定された**例外変数(eやex)**を介して例外オブジェクトにアクセス
* ブロック単位でスコープを持つので複数catchブロックがあっても同じ変数名(e)でOK
* 例外クラスのメソッド
* **getMessage()**:エラーメッセージ取得
* **getLocalizedMessage()**:ローカライズ対応したエラーメッセージ取得
* **getCause(
【Java】Objectクラス
#Objectクラスとは
* クラス宣言の際に**extends句を省略した時に暗黙的に継承されるクラス**
* **全クラスが最終的にObjectクラスをルートにもつ**
* 全クラスでObjectクラスのメソッドが利用できる(必要に応じ派生クラスでOverride)
* **clone()**:オブジェクトのコピー作成
* **finalize()**:破棄する時に実行
* オブジェクト破棄される時にガベージコレクションに呼ばれるメソッド
保証されてないので実際のアプリでは使うべきではない
* **equals(object obj)**:オブジェクトobjと等しいか?
* **getClass()**:オブジェクトのクラスを取得
* **hashCode()**:ハッシュコードを取得
* **toString()**:オブジェクトを文字列で取得##toSrtingメソッド
* **可能なら全クラスで実装すべき**
* 適切な文字列表現を用意することでテスト時などでオブジェクトの概要確認できる
* `Syst
サーブレットの変更内容が反映されない時の対処
#環境
pleiades 2020 all in oneのEclipseを使用
OSはwindows10
ブラウザはEclipse内部ブラウザとchrome#現象
*サーブレットでHTMLを変更してブラウザを再読込してみ変更が反映されない*#原因と対処
Tomcatのreloadableの値がデフォルトが’false’になっているので’true’に変更する
Eclipseのエクスプローラーからserver.xmlをエディタで開く。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/81ace312-f01f-a7e2-f3c2-feda115ceecd.png)
“`
// 156行目あたり
// reloada
Spring Cloud Gatewayでoauth2認証
ソースは以下になります。
https://github.com/ko-aoki/spring-cloud-sample
Spring Cloud Gatewayは
マイクロサービス的に使うんだろうけど
単にfirewallっぽく使用できるのかな、と試してみました。## 構成
以下二つのサービスを使用します。
[cloud-gateway]
[api][cloud-gateway]経由で
RESTサーバ[api]にアクセスします。
[cloud-gateway]はoauth2認証を必要とします。## OAuth2認可サーバー
### KeycloakをDockerで起動
Dockerでkeycloakサーバを起動します。
以下 Docker Composeからpostgresqlを選択しています。https://github.com/keycloak/keycloak-containers/tree/master/docker-compose-examples
keycloak consoleの基本的な操作は以下です。
https://www.keycloak
【Java】try-catchの例外処理について
#プログラミング勉強日記
2020年11月5日
Javaでtry-catch文を使ったので使い方をまとめる。#例外処理とは
まずは例外処理とはどういった状態なのかを説明する。調べてみると以下のように出てくる。([出典](https://www.sejuku.net/blog/26344))> 実行停止してはいけないプログラムに何らかのエラーが発生して落ちた
途中で問題が発生した場合、その後の処理を自分でコントロールしたい例外に対応するためにはその場でエラーを解決する方法(try-catch文)と、その場では例外へは対応せず処理を中断して呼び出し元に任せる(メソッドのthorws節)の2つ方法がある。
Javaのtry-catch文はプログラム中で例外が発生するかを試し(try)、例外が発生したら捕まええて(catch)、何かしらの処理を行う。#try-catch文とは
上でも述べたが、例外が発生する可能性のある処理に使う。try-catch文を使うことで例外が発生しない場合の処理と例外が発生したときの処理を分けられる。
finallyを使うことで例外の有無に関