クラスは「メンバ変数」と「メンバメソッド」の要素で構成されています。
メンバ変数とは、クラス内に直接書かれる変数のことで、クラス内のメソッドから参照可能な変数で、フィールド変数またはフィールドと呼ばれます。
以下の例では、2行目の「int channelNo;」がメンバ変数です。
[Television.java]
class Television{
int channelNo;
void setChannel(int newChannelNo){
channelNo = newChannelNo;
}
void dispChannel(){
System.out.println("現在のチャンネルは " + channelNo + " です");
}
}
メンバ変数の定義は以下のように宣言します。
[修飾子] データ型 変数名;
private int number; pribate Stirng name; private int price; private boolean stock;メンバ変数は、int、doubleなどの基本型だけでなく、クラス型、配列型の変数も定義できます。
メンバ変数が定義されている同じクラスの中で値を格納する場合は普通の変数と同じように扱うことができます。
以下の例では4行目の「setChannel」メソッドでほかの変数の値を格納していますが、
channelNo = 1;
のように値を格納することができます。
[Tv.java]
public class Tv{
int channelNo;
void setChannel(int newChannelNo){
this.channelNo = newChannelNo;
}
void dispChannel(){
System.out.println("現在のチャンネルは " + channelNo + " です");
}
}
public class Channeltest{
public static void main(String args[]){
Television tv1 = new Television();
tv1.channelNo = 1;
tv1.dispChannel();
}
}
ローカル変数とは、メソッド内で定義される変数のことです。
このローカル変数の有効範囲(スコープ)はメソッド内だけになるため、別のメソッドからアクセスすることはできません。
また、同じスコープ内で同じ名前のローカル変数を定義することはできません。
[JSample.java]
public class JSample{
int memberVar = 10;
void methodA() {
int localVarA = 20;
System.out.println("メンバ変数(memberVar):" + this.memberVar);
System.out.println("ローカル変数(localVarA):" + localVarA);
}
void methodB(){
int localVarB = 30;
}
}
メンバメソッドとは、クラスの中で定義されているメソッドのことで、そのクラスの中で何かの動作をするためのものです。
メソッドを呼び出すときに引数を指定したり、メソッドからの戻り値を設定することもできます。
[修飾子] 戻り値のデータ型 メソッド名(引数1, 引数2, ....){
}
package JSample;
public class JSample8_1{
public static void main(String[] args){
departure();
arrive();
annouce();
}
private static void departure() {
System.out.println("出発します。");
}
private static void arrive() {
System.out.println("到着します。");
}
private static void annouce() {
departure();
arrive();
}
}
実行結果
メンバメソッドの呼び出し方は、メンバ変数の場合と同様に、同じクラス内から呼び出す場合は「this.メンバメソッド名(引数)」と記述し、
メンバメソッドが定義されているクラスの外からオブジェクトを使って呼び出す場合には「オブジェクト名.メンバメソッド名(引数)」の形式で呼び出します。
下記の例に、mainメソッドで、 myMethod()メソッドを呼び出します。
例
[JSample8_2.java]
package JSample;
public class JSample8_2 {
static void myMethod() {
System.out.println("Hello World");
}
public static void main(String[] args) {
myMethod();
}
}
メソッドを呼び出す時に呼び出し元から値をメソッドに渡すことができます。
例
[JSample8_3.java]
package JSample;
public class JSample8_3 {
public static void main(String[] args) {
int english = 58;
check ("英語", english);
}
private static void check(String language, int score) {
System.out.print("この応募者の" + language + "能力は");
if (score > 70) {
System.out.println("ビジネスレベルです。");
} else {
System.out.println("日常会話レベルです。");
}
}
}
return文は、メソッドを終了するとともに、戻り値を指定する働きがあります。
下の例1では、10行目でreturn文が使用されています。ここで「multiply」メソッドを終了し、[n * 2]を戻り値として返しています。
ソッドから呼び出し元に値を返す場合。
例1
[JSample8_4.java]
package JSample;
public class JSample8_4 {
public static void main(String[] args) {
int result;
result = multiply(5);
System.out.println(result);
}
private static int multiply(int n) {
return n * 2;
}
}
実行結果
package JSample;
public class JSample8_5 {
public static void main(String[] args) {
int data[];
test(15, 4);
test(7, 0);
}
private static void test(int n1, int n2) {
if (n2 == 0) {
System.out.println("0で割ることはできません");
return;
}
System.out.println(n1 + " / " + n2 + " = " + (n1 / n2));
return;
}
}
実行結果
コンストラクタとは、クラスのインスタンス生成時に実行されるメソッドで、主にそのクラスのメンバ変数を初期化するときに使用し、インスタンス生成時、必ず最初に呼び出されます。
以下の例では3~5行目までがコンストラクタにあたります。
public class Calculate {
private double tax;
public Calculate (double x) {
this.tax = x;
}
----- その他の処理 -----
}
コンストラクタの定義は下記のように宣言します。
コンストラクタ名はクラス名と同じにします。
[アクセス修飾子] コンストラクタ名 (引数型 引数名)
コンストラクタは、引数の型や引数の数を変更することで1つのクラス内に複数宣言することができます。
具体的には、コンストラクタ内でいくつかのメンバ変数を初期化する際、
指定する初期値がある場合は指定し
指定する初期値がない場合はデフォルト値を指定する
というように、初期化処理を使い分けたい場合にコンストラクタを複数宣言します。
どのコンストラクタが呼び出されるかは呼び出し元の引数の型、引数の数により決定されます。
例
[SetNumber.java]
package JSample;
public class SetAmount {
private int normalPrice;
private int inflatedPrice;
public SetAmount(int amt) {
this.normalPrice = 100;
this.inflatedPrice = amt;
}
public SetAmount() {
this.normalPrice = 100;
this.inflatedPrice = 200;
}
public static void main(String[] args) {
SetAmount productA = new SetAmount();
System.out.println("productAのSetAmount()で基本金額は" + productA.normalPrice+"円です");
System.out.println("productAのSetAmount()で値上げ金額は" + productA. inflatedPrice+"円です");
SetAmount productB = new SetAmount(1000);
System.out.println("productBのSetAmount(1000)で基本金額は" + productB. normalPrice +"円です");
System.out.println("productBのSetAmount(1000)で値上げ金額は" + productB. inflatedPrice +"円です");
}
}
実行結果
問題[JEx8_1.java]
Numberクラス(Number.java)を使用して、2つの整数を比較し最大値を取り出すプログラムを完成させなさい。
package JSample;
public class Num {
public int compare(int num1, int num2) {
//コード
}
}
package JSample;
import java.util.Scanner;
public class JEx8_1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("キーボードから数値1を入力してください。");
int num1 = scan.nextInt();
System.out.println("キーボードから数値2を入力してください。");
int num2 = scan.nextInt();
Num num = new Num();
int result = number.compare(num1, num2);
System.out.println(num1 + "と" + num2 + " 比較的な最大値は:" + result);
}
}