This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

クラスの基本

Last updated at Posted at 2022-04-21

クラス

データ (プロパティ、フィールド、メンバ変数)と処理 (メソッド)をまとめたもの。
プロパティ(メンバ変数): クラス内で定義された変数
メソッド: クラス内で定義された関数

また、メンバ変数には、クラス変数とインスタンス変数の2種類がある。

  • クラス変数:staticで宣言
          コンパイル時点で作成される
          newでインスタンスが生成されなくても使える
          クラスに1つしか存在しない
  • インスタンス変数:staticなしで宣言
             コンパイル時点では作成されない
             newでインスタンスが生成されるまで存在しない
             生成されたインスタンスごとに存在する
      
    クラスは、インスタンス化 されて初めて使えるようになる。
    また、インスタンス化したときに自動的に実行されるメソッドをコンストラクタ (初期化メソッド)という。

new演算子とコンストラクタ

コンストラクタとは、クラスのインスタンス生成時に実行されるメソッドである。
new演算子に続けて、クラスのコンストラクタを呼び出して実行するコードを記述すると、クラスのインスタンスが生成される。

メインクラス
public class メインクラス{
    public static void main(String[] args) {
    
        //インスタンス化
        クラス名 変数名 = new クラス名();    
    }
}
クラス
public class クラス{
    //コンストラクタ(インスタンス生成時に実行されるメソッド)
    public クラス名(){
        初期化処理など
    }
}

コンストラクタに引数を設定することもできる。

Sample.java
public class Sample {

	public static void main(String[] args) {
		Person p = new Person("太郎",8);
		
		}

	
}
Person.java
public class Person {
	String mName;
	int mAge; //プロパティはm+大文字から始める慣例
	
	public Person(String name, int age) {
		mName = name;
		mAge = age; //引数をプロパティに代入
		
		System.out.println("オギャー"+mName+"、"+mAge+"才の誕生です。");
	}

}

結果

オギャー太郎、8才の誕生です。

thisキーワード

コンストラクタの引数で渡した値を「this」句を使って受け取る場合もある。
「this」は「このクラスの」といった意味で、コンストラクタの引数の変数名と、このクラスのメンバ変数名を区別するためのものである。

Person
public class Person {
	String name;
	int age; 
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age; //自分自身のナンバ変数に、引数を代入
		
		System.out.println("オギャー"+this.name+"、"+this.age+"才の誕生です。");
	}

}

また、this()とすると、コンストラクタから他のコンストラクタを呼び出すことができる。this()はコンストラクタを呼び出すための特別なメソッドで、引数を渡すこともできる。
一方で、コンストラクタの先頭でしか呼び出せない。

メソッド

メソッド
[アクセス修飾子] その他の修飾子 戻り値のデータ型 メソッド名(引数1, 引数2, ....){
  /* メソッド内で実行する処理 */
}

変数.メソッド名()のようにして実行する。

アクセス修飾子

アクセス修飾子 説明
public 他のクラスから
protected 同じパッケージ、サブクラス
指定なし 同じパッケージ
private 同じクラス

その他の修飾子

修飾子 説明
static クラスをインスタンス化しなくても直接呼び出し可能
abstract インスタンス化不可能(抽象クラス、メソッド)
final 上書き不可能

戻り値の型

説明
void 戻り値なし
int 整数型
String 文字列型

Sample.java
import java.time.LocalDateTime;

public class Sample {

	public static void main(String[] args) {
		Person p = new Person("太郎",8);
		
		p.sayHello(LocalDateTime.now().getHour());// 現在の時刻を取得
		}

}
Person.java
public class Person {
	String name;
	int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;

	}

	public void sayHello(int time) {// メソッド名は小文字始まりで単語の切れ目に大文字の慣例
		String text = "";
		if (5 <= time && time < 10) {
			text = "おはようございます";

		} else if (10 <= time && time < 17) {
			text = "こんにちは";
		} else {
			text = "こんばんわ";
		}
		System.out.println(text + "、" + name + age + "才です。");
	}

}

結果

こんにちは、太郎8才です。

メソッドから戻り値を返すこともできる。

Sample.java
import java.time.LocalDateTime;

public class Sample {

	public static void main(String[] args) {
		Person p = new Person("太郎",8);
		
		String m = p.getHelloMessage(LocalDateTime.now().getHour());//戻り値を代入
		System.out.println(m);
		}

}
Person.java
public class Person {
	String name;
	int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;

	}

	public void sayHello(int time) {
		String m = this.getHelloMessage(time)
		System.out.println(m);
	}
	
	public String getHelloMessage(int time) {
		String text = "";
		if (5 <= time && time < 10) {
			text = "おはようございます";

		} else if (10 <= time && time < 17) {
			text = "こんにちは";
		} else {
			text = "こんばんわ";
		}
		String message = text + "、" + name + age + "才です。";
		return message; //messageを戻り値として返す
	}

}

ブロックとスコープ

より内側のスコープの変数が優先的に使われる。
自分と同レベル以下で定義された変数にはアクセスできない。
また、インスタンスフィールドに初期値を設定するには、private データ型 フィールド名 = 初期値;とする。

クラス変数とクラスメソッド

クラス変数は、staticキーワードを付けて宣言される変数であり、すべてのインスタンスで共有される共通の情報である。これに対して、インスタンス変数の値は、インスタンス毎に異なる。
クラスフィールドへのアクセスには、クラス名.定数を指定する。

final static データ型 定数 = ;
//定数は大文字にするのが慣例

クラスメソッドは、クラスに属するメソッドでクラス名.メソッド名()と呼び出す。クラスメソッドはインスタンスを生成しない状態でも呼び出すことができる。

public static 戻り値の型 メソッド名(){
    // 処理
}
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up