Java言語を学習していく中で冒頭のpublic class〜とかメソッドの宣言とか、コードの書き始め部分が色々あってややこしくなってきたのでまとめました。
非オブジェクト指向
mainで起動するコード
staticがつく理由は、まだ一つもインスタンスが存在していない状態で動かす必要があるため。
public class Main{
public static void main(String[] args{
// この中に変数の代入などコードを書く
}
}
メソッドの定義
helloメソッドが呼び出されると、こんにちはと表示される。
public class Main{
public static void hello(){
System.out.println("こんにちは");
}
}
引数を用いたメソッドの定義
メソッドは、引数を受け取ることもでき、戻り値の型を指定することで計算結果などを返すことができる。
public class Main{
public static int add(int x, int y){
int ans = x + y;
return ans;
}
}
オブジェクト指向
クラス定義
Heroというクラスを定義し、以下にフィールドを宣言する。 デフォルトではnameはnull、hpは0になる。
public class Hero{
String name;
int hp;
}
メソッド追加
以下sleepメソッドはインスタンス生成側で呼び出すことができる。 voidではなくintなどの型宣言を行うこともでき、引数内の型を指定できる。 staticは特別な理由がない限りつけない。
public class Hero{
String name;
int hp;
public void sleep(){
this.hp = 100;
}
}
引数を用いる場合のメソッド
例えばmainクラスでHero hインスタンスを生成した場合、そこから引数を指定してメソッドを呼び出すことで、対象の変数に対して値を代入できる。
public class Wizard{
String name;
int hp;
public void heal(Hero h){
h.hp += 10;
}
}
コンストラクタで引数を受け取る
他のクラスでHeroインスタンスが生成された時に引数を指定しておくことで、以下コード内Stirng nameに代入される。
public clas Hero{
Stirng name;
int hp;
public Hero(String name){
this.hp = 100;
this.name = name;
}
}
抽象化メソッド
クラスが抽象化されているため、Characterは直接使うことができない。 あえてメソッドの中身を書かない手法。継承先でattackを宣言しなければならないが、中身は決まっていないので自由に書くことができる。
public abstract class Character{
public abstract void attack(Matango m);
}
getterメソッド
下記のようにString nameがprivate化されていた場合、他のクラスからはnameを見ることができない。
そこでgetNameメソッドを記述しておくことで、呼び出し側にもgetName()を記述するとnameを呼び出せるようになる。
public class Hero{
private String name;
public String getName(){
return this.name;
}
}
setterメソッド
他のクラスから呼び出すのがgetterメソッドなら、setterメソッドは他のクラスから書き込めるメソッドである。 これによりprivate化されていたフィールドも書き込めるようになる。
public class Hero{
private String name;
public void setName(String name){
this.name = name;
}
}
publicなしのメソッド宣言
publicを書かないと、package private状態になり、自分と同じパッケージに属するクラスからしかアクセスできない。
public class Wizard{
int hp;
int mp;
void heal(Hero h){
int basePoint = 10;
}
}
静的メソッド・クラスメソッド
staticを使うことで静的メソッド(クラスメソッド)となる。
静的メソッドはインスタンス生成前から呼び出すことができる。
public class Hero{
String name;
int hp;
static int money;
public static void setRandomMoney(){
Hero.money = (int)(Math.random() * 1000;
}
}