メソッド
メソッドの定義
public class Calculator {
// 基本的なメソッド
public int add(int a, int b) {
return a + b;
}
// 戻り値なし
public void printMessage(String message) {
System.out.println(message);
}
// 静的メソッド
public static int multiply(int a, int b) {
return a * b;
}
}
// 使用
Calculator calc = new Calculator();
int sum = calc.add(3, 5);
calc.printMessage("Hello");
// 静的メソッドはクラス名で呼び出し
int product = Calculator.multiply(3, 5);
メソッドのオーバーロード
public class Printer {
public void print(String message) {
System.out.println(message);
}
public void print(int number) {
System.out.println(number);
}
public void print(String message, int times) {
for (int i = 0; i < times; i++) {
System.out.println(message);
}
}
}
可変長引数
public int sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
// 使用
int result = sum(1, 2, 3, 4, 5); // 15
クラス
クラスの定義
public class User {
// フィールド(インスタンス変数)
private String name;
private int age;
// コンストラクタ
public User(String name, int age) {
this.name = name;
this.age = age;
}
// ゲッター
public String getName() {
return name;
}
// セッター
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
// メソッド
public String introduce() {
return String.format("私は%sです。%d歳です。", name, age);
}
}
// 使用
User user = new User("太郎", 25);
System.out.println(user.getName()); // 太郎
System.out.println(user.introduce()); // 私は太郎です。25歳です。
アクセス修飾子
public class Example {
public int publicField; // どこからでもアクセス可
protected int protectedField; // 同一パッケージ + サブクラス
int defaultField; // 同一パッケージのみ
private int privateField; // 同一クラスのみ
}
コンストラクタ
public class Product {
private String name;
private int price;
private int stock;
// デフォルトコンストラクタ
public Product() {
this.name = "Unknown";
this.price = 0;
this.stock = 0;
}
// 引数付きコンストラクタ
public Product(String name, int price) {
this.name = name;
this.price = price;
this.stock = 0;
}
// フルコンストラクタ
public Product(String name, int price, int stock) {
this.name = name;
this.price = price;
this.stock = stock;
}
// コンストラクタチェーン
public Product(String name) {
this(name, 0, 0); // 他のコンストラクタを呼び出し
}
}
staticメンバー
public class Counter {
// クラス変数(全インスタンスで共有)
private static int count = 0;
// インスタンス変数
private int id;
public Counter() {
count++;
this.id = count;
}
// クラスメソッド
public static int getCount() {
return count;
}
public int getId() {
return id;
}
}
// 使用
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.getCount()); // 2
定数
public class Constants {
// 定数(static final)
public static final double PI = 3.14159;
public static final String APP_NAME = "MyApp";
}
// 使用
double area = Constants.PI * radius * radius;
toString, equals, hashCode
public class User {
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "User{id='" + id + "', name='" + name + "'}";
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User user = (User) obj;
return id.equals(user.id);
}
@Override
public int hashCode() {
return id.hashCode();
}
}
record(Java 16+)
// 不変データクラスを簡潔に定義
public record User(String id, String name, int age) {
// コンストラクタ、getter、toString、equals、hashCodeが自動生成
}
// 使用
User user = new User("1", "太郎", 25);
System.out.println(user.name()); // 太郎
System.out.println(user); // User[id=1, name=太郎, age=25]
まとめ
- メソッドは戻り値の型、名前、引数で定義
- クラスはフィールド、コンストラクタ、メソッドで構成
privateフィールド + getter/setterでカプセル化staticはクラスレベル、インスタンス不要recordでデータクラスを簡潔に
次回はオブジェクト指向(継承、インターフェース)について学びます。