Java入門
開発フロー
Javaに触れるにあたりスクリプト作成からアプリケーション実行までの手順を簡易的に書き留める
一連の流れのイメージを掴む事にフォーカスする為、要所の細かい説明はなし
Goal
アプリケーション実行までの流れをざっくりと理解する
ソースファイル作成 -> コンパイル -> プログラム実行
Just do it
ソースファイル作成
- フォルダ用意
mkdir sample && cd sample
- ソースファイル作成
vim HelloWorldApp.java
Tips: ファイル名とクラス名に関して
Java 公式ドキュメントを見るといくつかルールが設けられている
- クラスは数字で始まらない限りどんな名前をつけてもよい
- Javaクラスの名前は大文字で始まるという慣例がある
- 強制ではないがJava開発者はこの慣例に従っている
- 例に従う場合、MyFirstClassクラスをMyFirstClass.javaというファイルに保存する必要がある
また、以下の様に説明されてる
Javaクラスは拡張子が.javaでクラスと同じ名前のファイルに保存しなければなりません。
これは必須であり、どのクラスが書かれているかを知るためにファイルを開く必要がないので非常に便利である。
- スクリプト記載
手順2で作成したファイルにコピペ
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
コンパイル
javac HelloWorldApp.java
実行結果
xxx@MacBook-Air sample % ls -la
total 16
drwxr-xr-x 4 w4.3nd0 staff 128 9 20 17:26 .
drwxr-xr-x 4 w4.3nd0 staff 128 9 20 17:19 ..
-rw-r--r-- 1 w4.3nd0 staff 432 9 20 17:26 HelloWorldApp.class
-rw-r--r-- 1 w4.3nd0 staff 111 9 20 17:26 HelloWorldApp.java
コンパイルすると.classファイルが生成される
note: .classって何?
Javaコードをコンパイラ(javacコマンド)によって実行可能な別の形式に変換し別ファイル(.class)で保存
プログラム実行
java HelloWorldApp
Java SE 11以降ではスクリプトが 1 ファイルに記述の場合、以下で実行可
java HelloWorldApp.java
実行結果
xxx@MacBook-Air sample % java HelloWorldApp
Hello World!
Java ルール
変数名
- 大文字と小文字は区別される
- 空白は許容されない
- 技術的には可能だが慣例として以下がある
- 常に文字で始める
- _(アンダースコア)で始まる命名は技術的には可能だが非推奨
- $(ドル記号)は一切使用しない
文字と文字列のリテラル
文字リテラルは常に一重引用符を使用
文字列リテラルは常に二重引用符を使用
エスケープシーケンス
- \b (バックスペース)
- \t (タブ)
- \n (改行)
- \f (改行)
- \r (キャリッジリターン)
- " (ダブルクオート)
- ' (シングルクオート)
- \ (バックスラッシュ)
NULL リテラル
プリミティブ型の変数を除き、どの変数にも代入することが可能
NULL値に対して出来ることは、その存在をテストすることだけ。
nullはあるオブジェクトが利用できないことを示す目印としてプログラムで多用される。
Class リテラル
型名に.classを付加したもの
Class型の型そのものを表すオブジェクトを指す
桁区切りの為のアンダースコア表現
数値リテラル内の桁と桁の間に幾つでもアンダースコア文字(_)を記述する事が可能
数値リテラル内の桁のグループを区切る事でコードの可読性向上に貢献する
アンダースコアは数字と数字の間にのみ入れることができ、
以下のパターンでは使用できない
- 数値の先頭又は末尾
- 浮動小数点リテラル内の小数点に隣接するもの
- F又はLの末尾が付く前
- 数字列が予想される位置
以下の例は数値リテラルにおける有効なアンダースコアと無効なアンダースコアの配置を示す
// OK
long creditCardNumber = 123_456_789_012L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
int x = 1_____2;
// NG
// 数値の先頭又は末尾
int x = 30_;
// 浮動小数点リテラル内の小数点に隣接するパターン
float pi1 = 3_.1415F
float pi2 = 3._1415F
// F又はLの末尾が付く前のパターン
long creditCardNumber = 123_456_789_012_L;
// 数字列が予想される位置パターン
int hexBytes = 0_x52;
演算子
優先順位の高い演算子は相対的に優先順位の低い演算子の前に評価される。
また以下の性質を持つ
- 同じ行にある演算子の優先順位は等しい
- 同じ優先順位の演算子が同じ式に現れる場合、どちらが先に評価されるかは規則で決まる
- 代入演算子を除くすべての二項演算子は左から右に評価され、代入演算子は右から左に評価される
下記、表の演算子は優先順位を表し先頭に近い演算子程、優先順位が高くなる。
Operators | Precedence |
---|---|
postfix | expr++ expr -- |
unary | ++ expr --expr +expr -expr ~ ! |
multiplicative | * / % |
additive | + - |
shift | << >> >>> |
relational | <> <= >= instanceof |
equality | == != |
betwise AND | & |
bitwise exclusive OR | ^ |
bitwise inclusive OR | | |
logical AND | && |
logical OR | || |
ternary | ? : |
assignment | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
データ型
プリミティブ型
byte
8bitの符号付き(+,-)2の補数整数
最小値は-128, 最大値は127
byteデータ型は大きい配列でメモリを節約する際に使用
int型の代替えとしてbyte型を使うケースもあり変数の範囲が制限したい際に表現としてコードを明確にするのに使用される。
short
16bitの符号付き(+,-)2の補数整数
最小値は-32,768, 最大値は32767
byteと同様のガイドラインが適用される。
int
32bitの符号付き(+,-)2の補数整数
最小値は-2^31, 最大値は2^31-1
long
64bitの符号付き(+,-)2の補数整数
最小値は-2^63, 最大値は2^63-1
float
単精度32ビットIEEE 754浮動小数点
このデータ型は通貨のような正確な値には決して使ってはならない。
byteやshortの推奨と同様に浮動小数点数の大きな配列でメモリを節約する必要がある場合は
doubleの代替にfloatを使用
double
倍精度64ビットIEEE 754浮動小数点
このデータ型は通貨のような正確な値には決して使ってはならない。
10進数値の場合、このデータ型はデフォルトの選択となる。
boolean
trueとfalseの2つの値のみ
真/偽の状態を表現として使用
char
単一の16bit Unicode文字
最小値は¥u0000(または0)、最大値は¥uffff(または65,535)
初期値
フィールド宣言時に値を代入する必要は必ずしもない。
宣言したが初期化されていないフィールドはコンパイラによって妥当なデフォルト値に設定される。
デフォルト値はデータ型によって0かnullになるがデフォルト値に依存することは、
一般的に悪いプログラミング・スタイルとみなされる。
以下の表は、上記のデータタイプのデフォルト値
Data Type | Default Value (for fields) |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | \u0000 |
String (or any object) | null |
boolean | false |