0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【メソッドとカプセル化の操作①】メソッドの概要

Last updated at Posted at 2024-06-02

はじめに

オラクル認定資格教科書 Javaプログラマ Silver SE8
第一章 Javaの基本 
第二章 Javaのデータ型の操作
第三章 演算子と判定構造の使用
第四章 配列の作成と使用
第五章 ループ構造の使用
第六章 メソッドとカプセル化の操作← イマココ!!
第七章 継承の操作
第八章 例外の処理
第九章 Java APIの主要なクラスの操作

メソッド

メソッドの概要

 Javaのようなオブジェクト指向言語で、特定のクラスやオブジェクトに所属するグループのこと。
 内容がまとまっている処理や反復する処理など、いくつかの処理を一つにまとめたものをメソッドと呼ぶ。
 メソッドは、インスタンスメソッドクラスメソッドと分類でき、それぞれ以下の通りである。

インスタンスメソッド

 インスタンスメソッドは、インスタンスごとで異なる処理をおこなう時に使用する。
 定義はクラスの中に行い、staticは付けずにアクセス修飾子、戻り値、引数を設定します。
 呼び出す時には一度インスタンスを生成してからそのインスタンスからメソッドを呼び出します。

//インスタンスメソッドの宣言
class クラス名 {
  アクセス修飾子 戻り値型 メソッド名(引数の型 引数名) {
    //なんらかの処理
  }
}

//インスタンスメソッドの呼び出し
クラス名 変数名 = new クラス名();
上述の変数名.インスタンスメソッド(引数);

クラスメソッド

 クラスに紐づけられたメソッドのことをクラスメソッドといい、インスタンスメソッドがインスタンス固有の振る舞いを表すのに対してクラスメソッド はクラス全体の固有の振る舞いを表す。
 staticメソッドとして定義することにより、呼び出し側でインスタンス化を行わずにメソッドを利用できることが特徴。

//クラスメソッドの宣言
class クラス名 {
  アクセス修飾子 static 戻り値型 メソッド名(引数の型 引数名) {
    //なんらかの処理
  }
}

//クラスメソッドの呼び出し
クラス名.クラスメソッド(引数);

メソッドの宣言

 メソッドを宣言する際に、登場するアクセス修飾子、static、戻り値型、引数について

アクセス修飾子

 アクセス修飾子とは、ほかのクラスから、フィールドやメソッドなどへのアクセスを制御するためのもの
 利用できるアクセス修飾子は次の4つである。

修飾子 説明
public すべてのクラスからアクセス可能
protected 同じパッケージか継承しているサブクラスからのみアクセス可
なし 同じパッケージからのみアクセス可
private 同じクラス内からのみアクセス可

戻り値型

 戻り値型は、メソッドを実行した際に、どのような種類のデータを戻すのかを示したもの。
 戻り値型を指定した際は、必ずreturn文を記述しなければならない。
 戻り値型をvoidとした際は、戻り値なしを意味しており、return文が必要ない。

//戻り値型をintとした場合
public int method(int num) {
  return num;
}
//return文で戻すデータの型とメソッドで宣言した戻り値型は一致しなければならない
//Objectをreturnする場合はその限りでない

 なお、戻り値を受け取る際は、戻り値と同じ型もしくは互換性のある型であることが必要。

//戻り値型をvoidとした場合
public void method(int num) {
  System.out.println(num);
}
//return文を記述できない

static

 staticで修飾されたフィールドやメソッドは 「static領域」 と呼ばれる領域に配置され、それ以外の部分は 「ヒープ領域」 と呼ばれる領域に配置される。インスタンスが生成されるときは、ヒープ領域にあるクラス定義をもとに生成され、また生成されたインスタンスも「ヒープ領域」に格納される。

staticの基礎

 staticなフィールドやメソッドはインスタンスの有無に関わらず使える性質であるため、値を書き換えた場合、大元の値が変わることとなる。(インスタンス生成してから書き換えても同じ)

staticなフィールドにアクセスするには 「クラス名.フィールド名」
インスタンス生成後であれば 「インスタンス変数名.フィールド名」 で記述する。

public class Sample {
  static int num = 0;
}

public class Main {
  public static void main(String[] args) {
    Sample.num = 10;
    System.out.println(Sample.num);
    //結果: 10

    Sample s1 = new Sample;
    Sample s2 = new Sample;
    s1.num += 5;
    s2.num += 10;
    System.out.println(Sample.num);
    //結果: 25
    //インスタンスを通しても同じstaticフィールドにアクセスしている
  }
}
staticなメンバのアクセスルール

 staticでないメソッドからstaticなメンバへは自由にアクセスが可能だが、
staticなメソッドからは同じstaticなメンバへしかアクセスできません。(static領域からヒープ領域へはアクセス不可)

引数

 引数とは、以下のコード例の(int num)を指しており、指定した型の値を受け取る。
受け取れる個数は宣言した引数分。(例外で可変長引数というものがある)

public class Sample {
  void sample(int num) {//int型を1つ受け取る
    // do something
  }
}

//引数を渡す(メソッドの呼び出し時)
Sample.sample(10)//10を渡している。同じ型である必要がある。
可変長引数

 通常、受け取れる引数の個数は宣言した分だけだが、 「可変長引数」 を使用すれば、引数の型が同じであれば、何個でも引数を受け取れる。個数が変動的な時に使用する。

 可変長引数の定義は、引数のデータ型のすぐ後ろに「...」(ピリオド3つ)を付ける。

void sample(int... num) {
  //do something
}

//可変長引数以外にも複数の引数をを受け取る場合は、可変長引数を最後にする必要がある
void sample(String a, int... num) {
  //do something
}

可変長引数は配列として扱われるため、使用時は以下のようになる

void sample(int... num) {
  for(int i = 0; i < num.length; i++) {
    System.out.println(num[i]);
  }
}

 可変長引数は配列を指定することも可能で便利なものだが、引数型を1つしか指定できない、オーバーロード(並び順が違うメソッドを2つ以上定義すること)では使えないなどの細かいルールがある。

リンク集

【Javaの基本①】クラスの構造
【Javaの基本②】パッケージとインポート
【継承の操作②】インターフェース
【Javaのデータ型の操作①】プリミティブ型のデータ・参照型
【演算子と判定構造の使用①】論理演算子(&&、||)、同一性(==)、同値性(equals)
【演算子と判定構造の使用②】分岐処理(if、swich)
【配列の作成と使用】
【ループ構造の使用】while文、do-while文、for文、拡張for文
【メソッドとカプセル化の操作①】メソッドの概要
【メソッドとカプセル化の操作②】オーバーロード、コンストラクタ
【継承の操作①】クラスの継承
【例外の処理】
【Java APIの主要なクラスの操作】

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?