Java 基本文法#
1. キーワードと予約語#
1.1 キーワード (keyword) の定義と特徴#
- 定義言語に特別な意味を与えられ、特定の目的で使用される文字列(単語)
- 特徴:キーワードのすべての文字は小文字である
- 公式アドレス (クリックして移動)
1.2 予約語 (reserved word)#
Java の予約語:現在の Java バージョンでは使用されていないが、将来のバージョンでキーワードとして使用される可能性がある。これらの予約語を使用して識別子を命名することは避けるべきである。goto、const
1.3 識別子 (Identifier)#
識別子:#
- Java がさまざまな変数、メソッド、クラスなどの要素に名前を付けるときに使用する文字列を識別子と呼ぶ。
- コツ:自分で名前を付けられる場所はすべて識別子と呼ばれる。
有効な識別子の定義ルール:#
- 26 の英字の大文字と小文字、0-9、_または $ で構成される
- 数字で始めてはいけない。
- キーワードや予約語を使用してはいけないが、キーワードや予約語を含むことはできる。
- Java では大文字と小文字を厳密に区別し、長さに制限はない。
- 識別子には空白を含めてはいけない。
1.4Java における名前の命名規則:#
- パッケージ名:複数の単語で構成される場合、すべての文字は小文字:xxxyyyzzz
- クラス名、インターフェース名:複数の単語で構成される場合、すべての単語の最初の文字は大文字:XxxYyyZzz
- 変数名、メソッド名:複数の単語で構成される場合、最初の単語の最初の文字は小文字、2 番目の単語からは各単語の最初の文字は大文字:xxxYyyZzz
- 定数名:すべての文字は大文字。複数の単語の場合、各単語はアンダースコアで接続:XXX_YYY_ZZZ
2. 変数#
2.1 変数の概念:#
- メモリ内のストレージ領域
- この領域のデータは同じタイプの範囲内で変化し続けることができる
- 変数はプログラム内で最も基本的なストレージユニットであり、変数の型、変数名、保存された値を含む
2.2 変数の役割:#
- メモリ内にデータを保存するために使用される
2.3 変数を使用する際の注意:#
- Java では、各変数は最初に宣言され、その後使用されなければならない
- 変数名を使用してこの領域のデータにアクセスする
- 変数のスコープ:その定義がある一対の { } 内
- 変数はそのスコープ内でのみ有効である
- 同じスコープ内で、同名の変数を定義することはできない
2.4 変数の宣言#
- 構文:<データ型> < 変数名 >
- 例:int var;
2.5 変数への値の代入#
- 構文:<変数名> = < 値 >
- 例:var = 10;
2.6 変数の宣言と代入#
- 構文: <データ型> < 変数名 > = < 初期値 >
- 例:int var = 10;
2.7 変数の分類 - データ型による#
- 各データに対して明確な具体的データ型(強い型付け言語)が定義され、メモリ内に異なるサイズのメモリスペースが割り当てられる。
- 補足:変数の分類 - 宣言位置の違いによる
- メソッド体の外、クラス体内で宣言された変数はメンバー変数と呼ばれる。
- メソッド体内で宣言された変数はローカル変数と呼ばれる。
- 注意:両者の初期値に関する違い
- 同:両者にはライフサイクルがある 異:ローカル変数は形参を除き、明示的に初期化する必要がある
2.8 整数型:byte、short、int、long#
- Java の各整数型には固定の表数範囲とフィールド長があり、具体的な OS の影響を受けず、Java プログラムの移植性を保証する。
- Java の整数定数はデフォルトで int 型であり、long 型の定数を宣言するには‘l’または‘L’を付ける必要がある
- Java プログラムでは、変数は通常 int 型として宣言され、より大きな数を表すのに不十分な場合にのみ long を使用する。
public class VariableTest {
public static void main(String[] args) {
int number1;
number1 = 10;
int number2;
number2 = 20;
int number3;
number3 = number1 + number2;
System.out.println("Number3 = " + number3);
int number4 = 50;
int number5 = number4 - number3;
System.out.println("Number5 = " + number5);
}
}
2.9 浮動小数点型:float、double#
- 整数型と同様に、Java の浮動小数点型にも固定の表数範囲とフィールド長があり、具体的なオペレーティングシステムの影響を受けない。
- 浮動小数点型定数には 2 つの表現形式がある:
- 十進数形式:例:5.12 512.0f .512(必ず小数点を含む)
- 科学的表記形式:例:5.12e2 512E2 100E-2
- float: 単精度、尾数は 7 桁の有効数字まで正確である。多くの場合、精度が要求を満たすのは難しい。double: 倍精度、精度は float の 2 倍。通常はこの型を使用する。
- Java の浮動小数点型定数はデフォルトで double 型であり、float 型の定数を宣言するには‘f’または‘F’を付ける必要がある。
2.10 文字型:char#
- char 型データは通常の意味での「文字」を表すために使用される(2 バイト)
- Java のすべての文字は Unicode エンコーディングを使用しているため、1 つの文字は 1 つのアルファベット、1 つの漢字、または他の書面言語の 1 つの文字を格納できる。
- 文字型変数の 3 つの表現形式:
- 文字定数は単一引用符(‘ ’)で囲まれた単一の文字である。例:char c1 = 'a'; char c2= ' 中 '; char c3 = '9';
- Java では、エスケープ文字‘\’を使用して、その後の文字を特殊文字型定数に変換することも許可されている。例:char c3 = ‘\n’; // '\n' は改行文字を表す
- Unicode 値を直接使用して文字型定数を表す:‘\uXXXX’。ここで、XXXX は 16 進整数を表す。例:\u000a は \n を表す。
- char 型は演算を行うことができる。なぜなら、すべて Unicode コードに対応しているからである。
2.11 ブール型:boolean#
- boolean 型は論理条件を判断するために使用され、一般的にプログラムのフロー制御に使用される:
- if 条件制御文;
while ループ制御文;
do-while ループ制御文;
for ループ制御文; - boolean 型データは true と false のみを許可し、null は許可されない。
- false と true の代わりに 0 または非 0 の整数を使用することはできない。これは C 言語とは異なる。
- Java 仮想マシンには boolean 値専用のバイトコード命令はなく、Java 言語で表現される boolean 値は、コンパイル後に Java 仮想マシン内の int データ型で置き換えられる:true は 1 で、false は 0 で表される。———《Java 仮想マシン仕様 第 8 版》
2.12 基本データ型の変換#
- 自動型変換:容量の小さい型が自動的に容量の大きいデータ型に変換される。データ型は容量の大きさで並べられる:
- - 複数の型のデータが混合演算される場合、システムは最初にすべてのデータを容量の最大のデータ型に自動的に変換し、その後計算を行う。
- byte、short、char は相互に変換されず、計算時には最初に int 型に変換される。
- boolean 型は他のデータ型と演算できない。
- いかなる基本データ型の値と文字列 (String) を連結演算する際(+)、基本データ型の値は自動的に文字列 (String) 型に変換される。
2.13 文字列型:String#
- String は基本データ型ではなく、参照データ型に属する
- 使用方法は基本データ型と同じである。例:String str = “abcd”;
- 1 つの文字列は別の文字列と連結でき、他の型のデータとも直接連結できる。例:str = str + “xyz” ; int n = 100; str = str + n
public class StringTest {
public static void main(String[] args) {
int no = 10;
String str = "abcdef";
String str1 = str + “xyz” + no;
str1 = str1 + "123";
char c = '国';
double pi = 3.1416;
str1 = str1 + pi;
boolean b = false;
str1 = str1 + b;
str1 = str1 + c;
System.out.println("str1 = " + str1);
}
}
2.14 強制型変換#
- 自動型変換の逆のプロセスであり、容量の大きいデータ型を容量の小さいデータ型に変換する。使用時には強制変換子:() を加える必要があるが、精度の低下やオーバーフローを引き起こす可能性があるため、特に注意が必要である。
- 通常、文字列は基本型に直接変換できないが、基本型に対応するラッパークラスを使用することで文字列を基本型に変換することができる。
- 例: String a = “43”; int i = Integer.parseInt (a);
- boolean 型は他のデータ型に変換できない。
3. 演算子#
- 演算子はデータの演算、代入、比較などを表す特別な記号である。
- 算術演算子
代入演算子
比較演算子(関係演算子)
論理演算子
ビット演算子
三項演算子
3.1 演算子:算術演算子#
- 算術演算子の注意点
- 負数で剰余を取る場合、剰余の符号を無視することができる。例:5%-2=1。ただし、被剰余が負数の場合は無視できない。また、剰余演算の結果は必ずしも整数であるとは限らない。
- 除算演算子 “/” は、整数除算と小数除算で異なる:整数同士の除算では、整数部分のみを保持し、小数部分は切り捨てられる。
- “+” は文字列の連結機能の他に、非文字列を文字列に変換することもできる。
3.2 演算子:代入演算子#
- 記号:=
“=” の両側のデータ型が一致しない場合、自動型変換または強制型変換の原則を使用して処理できる。
連続代入をサポートする。 - 拡張代入演算子: +=, -=, *=, /=, %=
- 比較演算子の結果はすべて boolean 型であり、つまり true または false である。
- 比較演算子 “==” を誤って “=” と書かないようにする。
3.3 演算子:論理演算子#
- &— 論理積 | — 論理和 !— 論理否定
&& — 短絡論理積 || — 短絡論理和 ^ — 排他的論理和
- 論理演算子は boolean 型の式を接続するために使用され、Java では 3<x<6 と書くことはできず、x>3 & x<6 と書くべきである。
- “&” と “&&” の違い:
単一の & の場合、左側が真偽にかかわらず、右側は常に演算される;
二重の & の場合、左側が真であれば右側が演算され、左側が偽であれば右側は演算されない。 - “|” と “||” の違いも同様で、|| は左側が真であれば右側は演算されないことを示す。
- 排他的論理和 (^) と論理和 (|) の違いは、左右が両方とも true の場合、結果は false となる。
- 排他的論理和は「異なる」ことを追求する!(同じ場合は 0、異なる場合は 1)
3.4 演算子:ビット演算子#
- ビット演算は整数の二進数に対して直接行われる演算である
3.5 演算子:三項演算子#
-
フォーマット:
(条件式)? 式 1:式 2;
真であれば、演算結果は式 1;
偽であれば、演算結果は式 2;
式 1 と式 2 は同じ型である
三項演算子と if-else の関係と違い:
1)三項演算子は if-else 文を簡素化できる
2)三項演算子は必ず結果を返す必要がある。
3)if の後のコードブロックには複数の文が含まれる可能性がある -
演算子の優先順位