ドキュメント
公式
- 日本語ドキュメントアーカイブ
- Java SE 10
- Java SE 9
- Java SE 8
- Java SE 7
- Java SE 6
公式以外
コーディング規約
よく忘れるクラス
個人的なガイドライン
- クラスはfinalにしているか?
- 中身を返すだけのgetterを定義していないか?
- プリミティブ型を使っていないか?(特にString)
コレクション
以下作成中。。。
- Collection: 基底インタフェース
- List: 順序付き
- Set: 重複要素がない
- Queue: いわゆるキュー。
- Deque: 両端から追加削除できるキュー
拡張for
Java SE 5から導入された拡張for文は、以下のインタフェースを実装することで、 自前でも実装可能です。
別記事にしました。
文字コード
厳密にエラーをチェックしたい場合
例えばjava.io.InputStreamReaderでは、
デフォルトでは不正な入力があった場合、置換文字に置き換えられます。
厳密にエラーをチェックしたい場合は、 Charset#newDecoder()
メソッドを使って、
デフォルトのデコーダを使うようにすると良いです。
データベース
オフラインのResultSetとしてCachedRowSetを使う方法 - seraphyの日記
時刻
java.time
- JavaのDate and Time APIの設計思想が面白い - Qiita
- パッケージ
- 基本クラス
- よく使うもの
- 日付の追加など: plusDays()とかを使用する。
- 切り捨て: truncatedTo()を使用する。
- 切り捨ての単位はTemporalUnitインタフェース。実装は以下の2箇所にある。
- ChronoUnit
- インタフェースを実装した列挙型
- 通常はこっちでOK
- IsoFields
- 定数として定義されています。
- ChronoUnit
- 切り捨ての単位はTemporalUnitインタフェース。実装は以下の2箇所にある。
- 既存のクラスとの相互運用
- Instant
Instant.now().toEpochMilli()
とSystem.currentTimeMillis()
は同じです。
- java.sql.Timestamp
- JDK 8
toInstant()
とfrom(Instant instant)
メソッドが定義されています。
- Instant
よく使うパターン
書式はDateTimeFormatterに書かれています。
形式 | 例 | メソッド |
---|---|---|
YYYY-MM-DD | 2018-01-27 | LocalDate.parse(str) |
YYYYMMDD | 20180127 | LocalDate.parse(str, DateTimeFormatter.BASIC_ISO_DATE) |
YYYY-MM-DD hh:mm:ss | 2018-01-27 21:09:19 | LocalDateTime.parse(“2018-01-27 21:01:54”, DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”) |
フォーマッターを自前で構築する場合
yyyy-MM-dd HH:mm:ss
に相当するフォーマッターはこんな感じです。
(エラーも含めて厳密に正しいかどうかは自信ありません)
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral(' ')
.append(DateTimeFormatter.ISO_LOCAL_TIME)
.toFormatter();
ファイルパス
- Path (Java Platform SE 8 )
- Paths (Java Platform SE 8 )
- File (Java Platform SE 8 )
- Files (Java Platform SE 8 )
- StandardCopyOption (Java Platform SE 8 )
- LinkOption (Java Platform SE 8 )
- FileSystem (Java Platform SE 8 )
- FileSystems (Java Platform SE 8 )
よく使うメソッド
- Pathの作成
- Paths#get(String first, String… more)
- デフォルトのFileSystemのメソッドを呼び出します。
- ファイル操作: Filesのstaticメソッドを呼び出すとよいです。
プリミティブ型
Chapter 4. Types, Values, and Variables
- byte[]のコピー: Arrays#copyOfを使用する。
ボクシング
Chapter 5. Conversions and Contexts
new IntegerよりInteger.valueOf()を使う
Boxing Conversion、またはInteger#valueOf()の定義より、
-128から127の値はa == b
となります。
これは、よく使われる値は、Flyweightパターンを使用してオブジェクトを共有しているためです。
new Integer
では常に新規オブジェクトが割り当てられてしまうため、
Integer.valueOf()
を使うことが望ましいです。
これは他のボクシング型や、BigDecimalも該当します。
プロセス起動
互換性
- バイナリ互換性: Chapter 13. Binary Compatibility
例えばクラスとインタフェースは互換性がありません。 詳細はJavaのクラスとインタフェースはバイナリ互換性がない参照。
keytool
証明書ファイルの場所は、java.home1の下の jre/lib/security/cacerts
になります。
- キーストアの中身のリスト:
keystore -keystore key.jks -list
- キーストア・エントリの表示:
keystore -keystore key.jks -list -alias keystore_alias
-
OpenJDKだと最終的に
/usr/lib/jvm/java-*
みたいです。 ↩︎
公式サイト
外部サイト
関連項目
逆引きマニュアル
- Heroku: java-getting-startedアプリでローカルDBを使いたい場合の設定
- JavaMail: STARTTLSの設定
- jarファイルの互換性をチェックする方法
- リファクタリング: ループの中を分割する
- Java: 自分で作成したクラスで拡張forを使用する方法
- Linux + Javaでフォントの文字化けを解消する方法
- IntelliJ IDEA: 初期設定
- JenkinsでJavadocを使う方法
- Jenkins: 初期設定
- Javaのインストール・アンインストール方法
- Java: CUIでjarファイルに埋め込まれたバージョンを取得する方法