はじめに
オラクル認定資格教科書 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の主要なクラスの操作】