【Java】文法ルール・メソッドなど(基本メモ)

Javaの文法ルール

Javaのプログラムはクラス単位で組み立てる → オブジェクト指向の考え方

中括弧(波括弧)を使い、クラス名を書いてブロックを記述する

class クラス名{
 ここをブロックという
}

  • クラス名の書き方→単語の先頭は大文字にする(SampleClass
  • 通常、1つのファイルに1つのクラス→ SampleClass.java(クラス名.java)

クラスの宣言

例:Taskクラス(Todoアプリなど)

// Javaの基本構造
public class Task {

}
  • public
    → 他のファイル(Main.java など)から自由にアクセスできる
  • class Task
    Task という「設計図(クラス)」を定義
    → Javaでは「クラス名=ファイル名」が基本ルール

Task.java に Task クラスを書くのが◎

Javaは クラスベースのオブジェクト指向
例:Todo アプリなら「タスク1つ」をオブジェクトとして扱うイメージ


フィールド(インスタンス変数)

private String title;
private boolean done;
  • private
    → 「クラスの外からは直接いじれない」というアクセス制御
    → オブジェクト指向の大事な原則:カプセル化(情報隠蔽)
  • String title
    → タスク名(文字列)
  • boolean done
    → 完了状態(true/false

Railsと違い、Javaは型が必須(静的型付け言語)


 コンストラクタ(インスタンス生成時に呼ばれる特別メソッド)

public Task(String title) {
    this.title = title;
    this.done = false;
}

コンストラクタの役割は以下のとおり

  • 例:new Task("買い物") のときに呼ばれる
  • 初期状態をセットする場所

this とはインスタンス自身を指す

this.title = title; の意味

  • 左:フィールドの title(クラスが持つ変数)
  • 右:引数の title(メソッドにもらった値)

両方同じ名前なので this をつけて区別している


Getter(値を取り出すメソッド)

Javaでは値を外に公開する場合、直接変数にアクセスさせない

getterメソッドで読むのが基本ルール

public String getTitle() {
    return title;
}

public boolean isDone() {
    return done;
}

Rails の場合はattr_accessorが自動生成してくれる
→Javaは基本、手で書く


Setter(値を書き換えるメソッド)

状態変更をする

public void setDone(boolean done) {
    this.done = done;
}

task.setDone(true);

Railsならtask.done = trueで済む
→Javaは「メソッド経由」が基本


toString() のオーバーライド(表示用)

@Override
public String toString() {
    return (done ? "[x] " : "[ ] ") + title;
}
  • @Override
    「親クラス(Object)のメソッドを上書きする」という宣言
  • toString()
    オブジェクトを文字列にした時の表示ルール

三項演算子

(条件 ? trueの時 : falseの時)

  • done が true → "[x]"
  • done が false → "[ ]"
// 例
System.out.println(task);

=> [x] 買い物

Java 文法ポイント

機能Javaの文法的ポイント意味
クラス定義public class設計図
フィールドprivate 型 変数名カプセル化
コンストラクタpublic クラス名()初期化
Getter/SettergetXxx/setXxx変数を安全に操作
toString@Override表示のカスタム


メソッドは処理の集まりのこと

  • クラスのブロックの内側に書く
  • 1つのクラスの中に複数のメソッドを書ける

メインメソッド

JVMは、指定されたクラスからメインメソッドを探して実行する

public static void main(String[] args){
 メインメソッドの中身
}

文(ステートメント)の終わりには「;」を書く


List<Task> 複数の Task を List で保持する

「Task をたくさん管理するために、内部に ArrayList を持っている」

private List<Task> tasks = new ArrayList<>();
  • List<Task>とは
    • Task 型のオブジェクトを複数扱うための「リスト」
    • <>の中は ジェネリクス(型の箱)
  • new ArrayList<>()とは
    • List の具体的なデータ構造として ArrayList を採用

addTask() タスクを追加

public void addTask(Task task) {
    tasks.add(task);
}
  1. メソッドの役割→Task をリストに追加する
  2. 引数 Task task→呼び出す側が Task のインスタンスを渡してくる
  3. tasks.add(task)List に要素を追加するメソッド

showTasks() タスクを一覧表示

public void showTasks() {
    for (int i = 0; i < tasks.size(); i++) {
        System.out.println(i + ": " + tasks.get(i));
    }
}
for 文
  1. for (int i = 0; i < tasks.size(); i++)
  2. i = 0:最初のインデックス
  3. i < tasks.size():リストの大きさ分ループ
  4. i++:1ずつ増える
  1. tasks.size()List の要素数を取得
  2. tasks.get(i)i番目の Task を取得
  3. System.out.printlntoString() が自動で呼ばれる


removeTask() 指定番号のタスクを削除

public void removeTask(int index) {
    tasks.remove(index);
}
  • remove(index)→指定された位置のタスクを消す。
  • int index→呼び出し側が「消したい番号」を渡す

メソッドについてまとめ

メソッド意味
List<Task>タスクを複数扱うリスト
addTaskタスクを追加
showTasksタスクを一覧表示
removeTask指定番号のタスクを削除
private外部から直接触らせない
public外部から呼べる

import 文

Java の import とは、他のパッケージにあるクラス(部品)を使うための宣言

import java.util.ArrayList;
import java.util.List;
  • List → インターフェース(抽象的な「リスト」)
  • ArrayList → List の実装クラス(中身が配列でできてるリスト)

List を使うときは、実際の中身として ArrayListnew して使うのが定番