頭脳一式

人の記憶なんて曖昧なもの。すべての情報を頭に記憶するなんてナンセンス。困ったらここに来ればいいじゃん?というスタンスで最強のナレッジベースを目指すブログ

【Java】構文一式

いつも思い出せない構文と、書き方のバリエーションをまとめてみる。

エントリーポイント

Javaでは下記のmainメソッドがエントリーポイントとなる。
変数名以外のキーワードに誤りがある場合は、エントリーポイントと見做されないので注意が必要。

public static void main(string[] args){
    //処理
}

変数

変数の宣言

構文:データ型 変数名;

String  str;
int     num;
boolean flg;

int num2,num3,num4 //同じ型であればカンマ区切りで続けて宣言することもできる。

変数の初期化

構文:変数名 = 値;
Javaでは、ローカル変数は宣言しただけでは初期化が行われない。
初期化されていない変数を使用するとコンパイルエラーになるため、初期化が必要。

str = "aaa";
num = 123;
flg = true;

変数の宣言と初期化を同じタイミングで行う

String  str2 = "aaa";
int     num2 = 123;
boolean flg2 = true;

switch文

変数の値によって処理を振り分けるよっていう主旨の場合、elseif文を使うよりも直感的でわかりやすい。

int num = 1;

switch(num){
case 1:
    System.out.println("1");
    break;
case 2:
    System.out.println("2");
    break;
case 3:
    System.out.println("3");
    break;
default :
    System.out.println("0");
}

【注意点】

defaut文について

  • default文はどのcaseにも一致しなかった場合に呼ばれる。
  • javaのswitch文はbreak文を書かないと後続のcaseと不一致でも処理が実行されてしまう。

swich文に使用できる型

  • String型はjavaSE7から使用可能。
  • Boolean型,Long型,Double型,Float型等、浮動小数点型は使えない。

caseに使用できる値には以下の制約がある。

  • 条件式が戻す値と同じ型か、互換性がある型であること。  
  • 定数であるか、コンパイル時に値を決めることができること。
  • NULLでないこと。

 ※上記のうち、定数とはfinal宣言された変数か、もしくはリテラルを指す。変数はcase値として使えないので注意。

配列の宣言と生成

acompletesetofbrain.hatenablog.com

三項演算子

構文:条件式 ? 式1 : 式2 条件式がTrueだった場合は式1を返し、Falseの場合は式2を返す。

int a = 10;
int b = 120;
int result = a < b? a : b; //resultには10が代入される。

注:三項演算子は値を返すもの。
条件によって処理を振り分けたい場合には使えないのでif文の代わりには成りえない。

つまりreturnできれば↓のように三項演算子の中でメソッドを使うことも出来る。

int Max = 100;
int Min = 50;

int result = Max > Min ? method(Max) : method(Min);
System.out.println(result); // Maxの方が大きいので10倍されて1000が返る。

static int method(int i) {
    return i * 10;
}

オーバーロード

オーバーロードとは
同一クラス内でかつ、メソッド名が同一で「引数の型、数、並び順が異なる」メソッドを複数定義すること。

int method(int x){
    return x * 10;
}

int method(int x,int y){
    return  x * y;
}

ちなみにオーバーロードには@Overrode アノテーションなるものは存在しないので注意。

以下の制約を満たさなければただの別物のメソッドとなってしまう。

  • メソッド名が同じであること。
  • シグニチャが異なること。(引数の数、型、並び順のいずれかが異なること。)
  • アクセス修飾子と戻り値の型は何でも可。

オーバーライド

オーラーライドとは、スーパークラスで定義したメソッドをサブクラスで再定義すること。

public class Oya {
    void method(int x){
        System.out.println("oya:" +x);
    }
}
public class Kodomo extends Oya{
    @Override
    void method(int x){
        System.out.println("kodomo:" +x);
    }
}

定義したメソッドがオーバーライドとなるには以下の制約がある。

  • アクセス修飾子はスーパークラスのメソッドと同一か、それより緩いものでなければならない。
  • 戻り値の型はスーパークラスのメソッドの戻り値と同一か、そのサブクラスでなければならない。

@Overrideアノテーションはメソッドがオーバーライドしていること宣言する。
オーバーライドしていないメソッドに@Overrideアノテーションを付けているとコンパイルエラーとなる。
定義したメソッドがオーバーライドしていることを見落とさないためにもアノテーションは付けたほうが良い。