ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

Java #2:Hello world

VSCodeで "C:\projects\kava\hello\HelloWorld.java" ファイルを新規作成
以下ソースを入力
public class HelloWorld {
  public static void main(String... args) {
      System.out.println("Hello World");
  }
}
すると、main関数の上に "Run|Debug" が表示されるので "Run" をクリック
コンソールに "Hello World" と表示されればOK


Java

Java #1:VSCode拡張機能インストール

VSCodeにJava拡張機能をインストールする



環境

Windows 10 20H2 19042.804
Visual Studio Code 1.53.2

手順

VSCodeで "Java Extension Pack (Microsoft)" をインストールする。
現在のバージョンは 0.12.1
この拡張パックには以下の拡張機能が含まれている。
・Language Support for Java by Red Hat
・Debugger for Java
・Java Test Runner
・Maven for Java
・Project Manager for Java
・Visual Studio InteliCode


Java

OpenJDK #2:Windows 10にOpenJDK 15をインストール

※ 前回記事:OpenJDK #1:Windows 7へのインストール
※ (2021.05.25) OpenJDK 16 (16.0.1) も手順は同じ


環境

OS : Windows 10 20H2 19042.804

手順

(1) ブラウザで"openjdk"を検索
(2) openjdk.java.net のリンクを開く
(3) "jdk.java.net/15" のリンクを開く

(4) Windows/x64 - Zip のリンクを開きダウンロード

(5) ダウンロードしたzipファイルを解凍
(6) 解凍した"jdk-15.0.2"フォルダをC:\へ移動
(7) "システム環境変数の編集" を起動
(8) システムのプロパティ画面が開いたら
[詳細設定]タブ - [環境変数]ボタンをクリック
(9) システム環境変数のPathを選択し[編集]ボタンをクリック
(10) "C:\jdk-15.0.2\bin" を追加
(11) システム環境変数の[新規]ボタンをクリック
(12) 変数名 "JAVA_HOME" 変数値 "C:\jdk-15.0.2" を入力し登録
(13) 動作テスト
コマンドプロンプトで以下コマンドを入力、
バージョン情報が表示されることを確認する。
java -version
javac -version


Windows, OpenJDK, Java, 開発環境

書誌:Java本格入門

Java本格入門



タイトル Java本格入門
著者 谷本心/著
阪本雄一郎/著
岡田拓也/著
秋葉誠/著
村田賢一郎/著
Acroquest Technology株式会社/監修
出版社 技術評論社
出版年 2017.05
形態事項 447p 23cm
ISBN 978-4-7741-8909-3
価格 \2,980
予約日 2021.01.23(土)
入手日 2021.02.21(日)

1. Javaの基本を知ろう ~イントロダクション~
2. 基本的な書き方を身につける
3. 型を極める
4. 配列とコレクションを極める
5. ストリーム処理を使いこなす ~ラムダ式とStream API~
6. 例外を極める
7. 文字列操作を極める
8. ファイル操作を極める
9. 日付処理を極める
10. オブジェクト指向をたしなむ
11. スレッドセーフをたしなむ
12. デザインパターンをたしなむ
13. 周辺ツールで品質を上げる
14. ライブラリで効率を上げる


書籍

用語:IntelliJ IDEA

IntelliJ IDEA - Wikipedia

IntelliJ IDEA(インテリジェイ アイディア)は、チェコに本社を置くJetBrains社が開発した、Javaなど数多くのプログラミング言語に対応した統合開発環境である。
リファクタリング機能をJava用の統合開発環境としては初めて搭載したことでも知られる。変数に型のないプログラミング言語に対してもリファクタリングを提供している。
ZeroTurnaroundの調査によると、2016年時点ではJavaの統合開発環境としては1番人気である。


[用語][Java][IntelliJ IDEA]
https://ja.wikipedia.org/wiki/IntelliJ_IDEA

OpenJDK #1:Windows 7へのインストール

Windows 7にOpenJDK 12をインストールする



環境

OS : Windows 7 SP1 x64

手順

(1) ブラウザで"openjdk"を検索 または

(2) ページ中央のDownload and ~のところに "jdk.java.net/12" のリンク文字列があるのでクリック

(3) Windows/x64のzipファイルをダウンロード

(4) ダウンロードしたzipを解凍

(5) 解凍した"jdk-12.0.1"ファイルをC:\へ移動

(6) "c:\jdk-12.0.1\bin"をPathに登録
"c:\jdk-12.0.1"を 環境変数 JAVA_HOME に登録

(7) 動作テスト
java -version
javac -version



Windows, OpenJDK, Java, 開発環境

Java:学習:8.ファイル操作を極める

Java:学習:7.文字列操作を極める の続き

以下 VB.NETとの違い(自分が知らないこと)があればメモ

8-1.ファイル操作の基本

・パス区切り文字 "\" でなく "/" を使った方がトラブルが少ないかも
・Fileクラスのコンストラクタにはファイル名やディレクトリ名を指定可
・java.nio.file.Pathsクラス

8-2.ファイルを読み書きする

・バイナリファイルの読み込み(Java7以降)
Path path = Paths.get("C:/work/sample.dat");
try (InputStream is = Files.newInputStream(path)) {
  for (int ch; (ch = stream.read()) != -1; ) {
    System.out.print((char) ch);
  }
} catch (IOException ex) {
  System.err.println(ex);
}

8-3.ファイルを操作する


8-4.さまざまなファイルを扱う

・SAX (Simple API for XML)
・StAX (Streaming API for XML)
・JAXB (Java Architecture for XML Binding)


[Java]

Java:学習:7.文字列操作を極める

Java:学習:6.例外を極める の続き

以下 VB.NETとの違い(自分が知らないこと)があればメモ

7-1.文字列操作の基本

・Stringクラスはイミュータブル(immutable) = 変更されることがない
・Listクラスから文字列を生成するjoinメソッド

7-2.正規表現で文字列を柔軟に指定する

・正規表現のパターン = Patternクラス
・正規表現を行う = Matcherクラス

7-3.文字列のフォーマットと出力

・VBのFormatに近いMessageFormatクラス

7-4.文字コードを変換する

・サロゲートペア String.lengthでは正しい文字数が取得できない。String.codePointCountを使う
・同一文字のオブジェクトを種痘 String.internメソッド


[Java]

Java:学習:6.例外を極める

Java:学習:5.ストリーム処理を使いこなす

以下 VB.NETとの違い(自分が知らないこと)があればメモ


6-1. 例外の基本

・Exception
メソッドのシグネチャにthrows節を書く

・RuntimeException

・Error … プログラムで捕捉すべきでない

・try-with-resources
tryブロックの開始時 ( ) 内にAutoClosableインターフェースの実装クラスを宣言しておくとfinallyでのCloseが不要となる

・マルチキャッチ
catchブロックで複数例外の処理が可能
} catch ClassNotFoundException | InstantiationException | IllegalAccessException ex) { …


6-2. 例外処理でつまずかないためのポイント



[Java]

Java:学習:5.ストリーム処理を使いこなす

Java:学習:4.配列とコレクションを極める の続き

以下 VB.NETとの違い(自分が知らないこと)があればメモ

5-1. Stream APIを利用するための基本

ラムダ式
■基本文法
(引数) -> {処理}

5-2. Streamを作成する


5-3. Streamに対する「中間操作」


5-4. Streamに対する「終端操作」


5-5. Stream APIを使うためのポイント


5-6. Stream APIを使ったListの初期化



[Java]

Java:学習:4.配列とコレクションを極める

Java:学習:3.型を極める の続き

以下 VB.NETとの違い(自分が知らないこと)があればメモ

4-1. 配列で複数のデータを扱う


4-1-1. 配列の基本を理解する
int[] array = new int[10];

4-1-2. 配列を初期化する
int[] array2 = {1,2,3,4,5};
int[] array3 = new int[] {10,9,8,7,6};

※"int[] array" と "int array[]" どちらでも良いが "int[] array" を推薦

4-1-3. 配列への代入と取り出し

4-1-4. 配列のサイズを変更する
配列の要素数は変更不可
変更したい場合は配列コピーする
System.arraycopy(array, 0, newArray1, 0, array.length);  // Java5.0までの方法
int[] newArray2 = Arrays.copyOf(array, array.length + 3);  // Java6以降の方法

4-1-5. Arraysクラスを利用して配列を操作する
java.util.Arraysクラス
Arrays.toString(array);  // 文字列返還
Arrays.sort(array);  // ソート
※オブジェクト配列の場合 ComparableインターフェースのcompareToメソッドの実装が必要
Arrays.binarySearch(array, 5);

4-1-6. 可変長引数でメソッドを定義する
型の後ろにドットを3つつけて定義
vold log(String message, String... args) {
  :

4-2. コレクションフレームワークで複数のデータを扱う


4-2-1. 配列の限界とコレクションの特徴

4-2-2. 代表的なコレクションと使い分けの基準

4-3. 配列に近い方法で複数の要素を扱う ~Listインターフェース


4-3-1. Listインターフェースの基本

4-3-2. Listを作成する
以下のようにすれば作成済み配列をもとにしてListを作成できるが、作成したListに対して要素の追加・変更・削除はできない。
List integerList = Arrays.asList(1, 62, 31, 1, 54, 31);
変更したい場合は次のようにする。
List integerList = new ArrayList<>(Arrays.asList(1, 62, 31, 1, 54, 31));

4-3-3. Listの代表的なメソッド
値の置換ができる "list.set(0, "xxx");"

値の検索"indexOf"や含まれているかの判定"contains"は線形検索を行うため早い訳ではない。

4-3-4. Listをソートする
"java.util.Collections"クラスの"sortメソッド"を使用する。

4-3-5. Listを検索する
"Collections"クラスの"binarySearchメソッド"を使用する。ただし事前にソートが必要。

4-3-6. Listのイテレーション
List list = new ArrayList<>();
  :
for (String element : list) {
  System.out.println(element);
}

for (Iterator iterator = list.iterator(); iterator.hasNext();) {
  String element = iterator.next();
  System.out.println(element);
}

4-3-7. Listの3つの実装クラスを理解する
主なクラス
  • ArrayListクラス
  • LinkedListクラス
  • CopyOnWriteArrayListクラス

4-3-8. Listの実装クラスをどう使い分けるか

4-4. キーと値の組み合わせで値を扱う ~Mapインターフェース


4-4-1. Mapを作成する

4-4-2. Mapの使い方

4-4-3. Mapの3つの実装クラスを理解する
  • HashMapクラス
  • LinkedHashMapクラス
  • TreeMapクラス

4-5. 値の集合を扱う ~Setインターフェース


4-5-1. Setの初期化

4-5-2. Setの使い方

4-5-3. Setの3つの実装クラスを理解する
  • HashSetクラス
  • LinkedHashSetクラス
  • TreeSetクラス
※Setの内部はMapを使用している

4-6. その他のインターフェース


4-6-1. 値を追加した順と同じ順に値を取得する ~Queueインターフェース

4-6-2. 両端キューを使う ~Dequeインターフェース
デック


[Java]
https://gihyo.jp/book/2017/978-4-7741-8909-3

Java:学習:3.型を極める

Java:学習:2.基本的な書き方を身につける の続き

以下 VB.NETとの違い(自分が知らないこと)があればメモ

3-1. プリミティブ型と参照型

3-1-1. Javaは静的型付け言語

3-1-2. プリミティブ型
  • byte (符号付き整数値 8bit)
  • short (符号付き整数値 16bit)
  • int (符号付き整数値 32bit)
  • long (符号付き整数値 64bit)
  • char (Unicode文字 16bit)
  • float (IEEE 754 浮動小数点数 32bit 単精度)
  • double (IEEE 754 浮動小数点数 64bit 倍精度)
  • boolean (真偽値 1bit)

☆リテラルの型
int num1 = 123;  // 10進数
int num2 = 010;  // 8進数
int num3 = 0xa;  // 16進数
int num4 = 0b11;  // 2進数
long longNum = 1L;  // long型
float floatNum = 3.14f;  // float型
double doubleNum = 3.14  // 小数点のデフォルトはdouble
double doubleNum2 = 3d;  // またはd(D)を付ける
boolean bool = true;  // true または false
char c = 'A';  // 文字はシングルクォートで囲む

☆桁数の多い数値を表示する場合、"_"で区切り表現することができる。
例) 12,345,678 をJavaで表すと「12_345_678」と指定することができる。(Java7以降)

☆ワイドニング
型のデータサイズが大きくなるように変換
short shortNum = 100;
int intNum = shortNum;  // ワイドニング

☆ナローイング
型のデータサイズが小さくなるように変換
基本的にはコンパイルエラー。ただしキャストすることで可能。
int intNum = 32767 + 1;
short shortNum = (short) intNum;

3-1-3. 参照型

☆文字列リテラル
Stringクラス、newキーワードを使わず文字列リテラルを使ってインスタンス生成
String name = "aaa";

☆nullリテラル

3-1-4. ラッパークラス
プリミティブ型に対応するラッパークラスが存在
  • Java.Jang.Byte
  • Java.Jang.Short
  • Java.Jang.Integer
  • Java.Jang.Long
  • Java.Jang.Character
  • Java.Jang.Float
  • Java.Jang.Double
  • Java.Jang.Boolean

☆ラッパークラスでよく使う定数
  • SIZE (ビット数>
  • BYTES (バイト数)(Java 8)
  • MAX_VALUE (最大値)
  • MIN_VALUE (最小値)

☆ラッパークラスの代表的なメソッド
  • valueOf (プリミティブの型)
  • valueOf(String s)
  • valueOf(String s, int radix)
  • parseXxx(String s)
  • parseXxx(String s, int radix)
  • toString(プリミティブ型の値)
  • toString(プリミティブ型の値, int radix)
※radix = 基数 = ?

プリミティブ型からラッパークラスへの変換はコンストラクタを使用すべきでない。
コンストラクタを使用すると毎回オブジェクトが生成される
valudOfメソッドを利用した場合、-127から128までの範囲であればオブジェクトを再利用する

3-1-5. オートボクシングとアンボクシング
オートボクシング = プリミティブ型 → ラッパークラス (valueOfを用いて行われる)
アンボクシング = ラッパークラス → プリミティブ型

3-2. クラスの作成


3-2-1. クラスを定義する

3-2-2. パッケージ
パッケージの宣言
package aa.bb.cc.dd;

3-2-3. アクセス修飾子

3-2-4. その他よく利用する修飾子

3-2-5. 継承
親クラスを呼び出すには super を使う。

3-2-6. 抽象クラス
abstract修飾子
継承されることを前提としたクラス

3-2-7. インターフェース
※実際の処理は定義しないが、Java 8以降、処理内容を定義するdefaultメソッドが追加された

インターフェースには定数を定義可
定数の public static final も省略可
public interface TaskHandler {
  int TASK_TYPE_PRIVATE = 0;
}

3-2-8. 匿名クラス
名前がないクラス
主に、インターフェースを実装した処理や抽象クラスを継承した処理を局所的に使いたい場合に使用。
public interface TaskHandler {
  boolean handle(Task task);
}
 :
TaskHandler taskHandler = new TaskHandler() {
  public boolean handle(Task task) {
    // taskに関する処理
  }
}

3-3. 型判定とオブジェクトの等価性


3-3-1. instanceof演算子

3-3-2. オブジェクトの等価性
・オブジェクトが同じか? (objA == objB)
・オブジェクトの値は同じか? (objA.equals(objB))

→ equalsメソッドを実装した場合はhashCodeメソッドも実装すること。
おなじ値を持つオブジェクトのハッシュ値は同じ(ハッシュ値といってもSHAとかではなく、例えば社員クラスであれば "社員コード+"社員名"をハッシュ値とする等)

3-4. 型にまつわる問題を予防する


3-4-1. 列挙型(enum)
例)
public enum TaskType {
  PRIVATE, WORK
};

enumはswitch文にも利用できるがenum型は付けない
例)
switch (type) {
  case PRIVATE: // OK
    :
  case TaskType.PRIVATE:  // NG
    :

名前と数値を関連付けることもできる。
例)
public enum HttpStatus {
  OK(200), NOT_FOUND(404), INTERNAL_SERVER_ERROR(500);
    :

3-4-2. ジェネリクス (総称型)
例) String型のList
// Java 5.0, Java 6
List list = new ArrayList();

// Java 7 であればダイアモンドオペレータが使用可能
List list = new ArrayList<>();

例) ジェネリクスを使ったクラス
public class GenericStack {
  private List taskList;

  public GenericStack() {
    taskList = new ArrayList<>();
  }

  public boolean push(E task) {
    return taskList.add(task);
  }
    :

例) ジェネリクスを使ったメソッド
public class GenericStackUtil {
  public static  GenericStack as(List list) {
    :
  }
}

List strList = new ArrayList<>();
strList.add("java");
GenericStack gstack = GenericStackUtil.as(strList);

例) 仮型パラメータ制限
public class NumberStack {
  :
}

NumberStack intStack = new NumberStack<>();  // OK
NumberStack longStack = new NumberStack<>();  // OK
NumberStack(String> numberStack = new NumberStack<>();  // NG


[Java]
https://gihyo.jp/book/2017/978-4-7741-8909-3

Java:学習:2.基本的な書き方を身につける

Java:テストプログラムを作成 の続き

※ 参考
Java本格入門
~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

2017年4月18日発売
谷本心,阪本雄一郎,岡田拓也,秋葉誠,村田賢一郎 著,Acroquest Technology株式会社 監修
B5変形判/448ページ
定価(本体2,980円+税)
ISBN 978-4-7741-8909-3

以下 VB.NETとの違い(自分が知らないこと)があればメモ

2-1. Javaの基本的な記法

特記なし

2-2. クラスとメソッド

2-2-2. メソッド
・戻り値がないメソッド = 型に「vold」を記述

2-2-3. 識別子
・アクセス修飾子
・abstract修飾子 = interfaceのことか?
・static修飾子 = sharedのことか?
・final修飾子 = メンバーの上書き禁止
・transient修飾子 = シリアライズ対象外にする
・volatile修飾子 = マルチスレッド用
・synchronized修飾子 = マルチスレッド用
・native修飾子 = ネイティブコード呼び出し
・strictfp修飾子 = 浮動小数点を厳密に処理

2-2-5. mainメソッド
mainメソッドの書式
public static void main(String... args) { …

2-2-7. thisを用いた記述の注意点
自身のインスタンス中のフィールドやメソッドを使う場合は this を使用。
個人的にはすべてにthisを付けたくなるが、本によると記述をシンプルにするためthisの記載は省略した方がよい、とのこと。
ただし、setterには慣習に従い付けた方がよい(setterの引数名はフィールドと同じ名前にするのが慣習)
class Student {
  String name;

  String getName() {
    return name;
  }

  String setName(String name) {
    this.name = name
  }
}

2-3. 情報共有のために知っておきたい機能

2-3-1. Javadoc
あとで学習

2-3-2. アノテーション
・メソッドのオーバーライドを示す @Override
@Override
public String toString() {
 :

・非推薦を示す @Deprecated
@Deprecated
public String get_name() {
  return name;
}

public String getName() {
  return name;
}

・警告を出さないようにする @SuppressWarnings
使わない方がよい

2-4. 名前のつけ方に注意する

2-4-1. クラスと変数はキャメルケースで、定数はスネークケースで
・クラス名 = 大文字始まりのキャメルケース (パスカルケース)
・変数 = 小文字始まるのキャメルケース
・定数 = スネークケース (すべて大文字、単語区切りはアンダースコア)

2-4-2. 変数名の後ろに _はつけない

2-4-3. 変数名は名詞、メソッドは動詞で命名する
よくある誤り:isStarted … メソッドは「isStarted」で良いが、変数は「started」とすべき。

2-4.4. 「不吉な匂い」がする名前に気をつける


[Java]
https://gihyo.jp/book/2017/978-4-7741-8909-3

Java:学習:テストプログラムを作成

Java:開発環境インストール の続き

Hello Java Worldプログラムの作成

デスクトップに「Eclipse Java 2018-12」アイコンが作成されているので実行

Select a directory as workspace
とりあえず既定(C:\Users\user\eclipse-workspace)のまま進める

Eclipseが起動したら、初期で表示される「Welcome」タブはいらないので閉じる

[File] - [New] - [Java Project] を選択

Create a Java Project画面
・Project name = "Hello Project"
あとは既定のまま [Finish]ボタンをクリック

ソースコード追加
Hello Projectツリーの [src]フォルダ上で 右クリック - [New] - [Class] を選択

Java Class画面
・Name = "HelloWorld
あとは既定のまま [Finish]ボタンをクリック

HelloWorldクラスにmain関数を追加
public class HelloWorld {
  public static void main(String... args) {
    System.out.println("Hello Java World!");
  }
}

ソース入力したらフロッピーアイコン(Save)をクリックし保存しておく

コンパイル・実行
Hello Projectツリー - [src] - [HelloWorld.java] で右クリック - [Run As] - [1 Java Application] を選択

Eclipse画面下のConsoleウインドウに結果が表示される

その他の記事