メ ソ ッ ド に は 、 処 理 に 使 用 す る 値 を 引 数 と し て 渡 す こ と が で き ま し た 。 呼 び 出 し 側 か ら メ ソ ッ ド に 値 を 渡 す だ け で な く 、 逆 に メ ソ ッ ド で 処 理 を 行 っ た 結 果 の 値 を 、 呼 び 出 し 側 で 受 け 取 る こ と も で き ま す 。 メ ソ ッ ド か ら 戻 し て も ら う 値 の こ と を
戻 り 値 の あ る メ ソ ッ ド
戻 り 値も ど り ちと い い ま す ( 図 5-4)。 図 5-4. 戻 り 値 を 返 す メ ソ ッ ド の イ メ ー ジ 戻 り 値 を 受 け 取 る こ と に よ っ て 、 あ る 計 算 を 行 っ た 結 果 や 、 処 理 に 成 功 し た か 失 敗 し た か の 情 報 な ど 呼 び 出 し 側 で 知 る こ と が で き ま す 。 戻 り 値 の あ る メ ソ ッ ド は 次 の よ う に 記 述 し ま す 。 戻 り 値 の 型 メ ソ ッ ド 名(引 数 列) { 命 令 文 return 戻 り 値; } 引 数 が 無 い 場 合 は 、引 数 列は 空 の ま ま に し ま す 。 メ ソ ッ ド か ら の 戻 り 値 は 1 つ だ け 指 定 で き メ ソ ッ ド の 最 後 に 、 、そ の 値 の 型 を メ ソ ッ ド 名 の 前 に 記 述 し ま す( 戻 り 値 が 基 本 型 の 場 合 は 、 int、double、booleanな ど の 型 の 名 前 を 記 述 し 、参 照 型 の 場 合 は Pointな ど の ク ラ ス 名 を 記 述 し ま す )。 returnリ タ ー ンと い う キ ー ワ ー ド と 共 に 、 戻 り 値 を 記 述 し ま す 。 メ モ 今 ま で 見 て き た メ ソ ッ ド の よ う に 、 戻 り 値 が 無 い 場 合 は 、戻 り 値 の 型 に voidボ イ ド と 記 述 し ま す(voidは 「 何 も 無 い 」 と い う 意 味 の 英 単 語 で す )。 戻 り 値 が 無 い 場 合 は return文 を 省 略 で き ま す 。■ 05-03/ReturnExample.java class P oint { int x; int y; // x と y の 値 を 掛 け た 結 果 を 返 す int get XY () {
return this. x * t hi s.y; }
}
class R eturn Examp le {
public stati c voi d main(St ring[ ] arg s) { Point p = ne w Poi nt ();
p.x = 5 ; p.y = 1 0;
int xy = p.g etXY( );
System. out.p rintl n( "p の x と y の 値 を 掛 け た 結 果 は " + xy); }
}
次 の プ ロ グ ラ ム コ ー ド は 、isSamePosition と い う 名 前 の メ ソ ッ ド を 定 義 し て い ま す 。こ の メ ソ ッ ド は 、引 数 と し て Point ク ラ ス の イ ン ス タ ン ス へ の 参 照 を 受 け 取 り 、 そ の イ ン ス タ ン ス と 自 分 自 身 の 座 標 値 を 比 較 し た 結 果 を 戻 し ま す 。 戻 り 値 は boolean 型 で 同 じ 座 標 値 で あ れ ば true を 、 そ う で な け れ ば false を 返 し ま す 。
引 数 と 戻 り 値 の あ る メ ソ ッ ド
// 引 数 で 与 え ら れ た Point ク ラ ス の イ ン ス タ ン ス と 座 標 値 を 比 較 す る // 同 じ 座 標 値 で あ れ ば true を 、 そ う で な け れ ば false を 返 す
boolean isSamePosition(Point p) {
if(this.x == p.x && this.y == p.y) { return true; } else { p の メ ソ ッ ド getXY の 戻 り 値 を int 型 の 変 数 xy に 代 入 し て い ま す 新 し く 追 加 し た 、 戻 り 値 の あ る メ ソ ッ ド で す 引 数 で 渡 さ れ た Point ク ラ ス の イ ン ス タ ン ス と 座 標 値 を 比 較 し ま す 。
return false; } } こ の メ ソ ッ ド の よ う に 、 int や double の よ う な 基 本 型 の 値 だ け で は な く 、 イ ン ス タ ン ス の 参 照 ( 参 照 型 ) を 引 数 に す る こ と が で き ま す 。 プ ロ グ ラ ム の 入 り 口 と し て 説 明 し て き た
mainメ ソ ッ ド
public static void main(String[] args)
の 記 述 が 含 ま れ ま す が 、 こ れ を 改 め て 見 て み る と main と い う 名 前 の メ ソ ッ ド の 宣 言 で あ る こ と が わ か り ま す 。 void と い う 記 述 が あ る こ と か ら 、 戻 り 値 が 無 い メ ソ ッ ド で す 。 ま た 、 引 数 は String[] args と な っ て い て 、 文 字 列 の 配 列 で あ る こ と が わ か り ま す 。
メ モ
Eclipse で プ ロ グ ラ ム を 実 行 す る 時 に は 、 Eclipse が main メ ソ ッ ド へ 引 数 を 渡 し ま す 。 main メ ソ ッ ド へ の 引 数 は 、 次 の 手 順 で 設 定 で き ま す 。 1. main メ ソ ッ ド の 含 ま れ る プ ロ グ ラ ム コ ー ド の フ ァ イ ル を パ ッ ケ ー ジ・エ ク ス プ ロ ー ラ ビ ュ ー で 右 ク リ ッ ク し 、[プ ロ パ テ ィ ー ]を 選 択 す る 。 2.[実 行 /デ バ ッ グ 設 定 ]で main メ ソ ッ ド の 含 ま れ る ク ラ ス を 選 択 し [編 集 ]ボ タ ン を 押 す 。 3.画 面 に 表 示 さ れ る [構 成 の 編 集 ]ダ イ ア ロ グ ボ ッ ク ス の [引 数 ]タ ブ で 、 [プ ロ グ ラ ム の 引 数 ]の テ キ ス ト エ リ ア に 引 数 と す る 文 字 列 を 記 入 し 、 [OK]を 押 す 。
複 数 の 文 字 列 を 引 数 に す る 場 合 は 、 空 白 で 区 切 っ て 記 入 し ま す 。 次 の プ ロ グ ラ ム は 、 プ ロ グ ラ ム 実 行 時 の 引 数 と し て 渡 さ れ た 文 字 列 を 出 力 す る 例 で す 。 [6-5/Example.java] ■ 05-05/PrintArguments.java class PrintArguments {
public static void main(String[] args) {
System.out.println("引 数 の 数 " + args.length); for(int i = 0; i < args.length; i++) {
System.out.println(args[i]); }
} }
文 字 列 を int 型 の 数 値 に 変 換 す る に は 、 Integer ク ラ ス の parseInt ク ラ ス メ ソ ッ ド を 使 っ て 次 の よ う に し ま す ( 注 )。
int i = Integer.parseInt(文 字 列);
double 型 の 数 値 に 変 換 す る に は 、 Double ク ラ ス の parseDouble ク ラ ス メ ソ ッ ド を 使 っ て 、 次 の よ う に し ま す 。 double d = Double.parseDouble(文 字 列); 配 列 の 要 素 の 数 を 出 力 し ま す 引 数 で 渡 さ れ た 文 字 列 を 全 て 出 力 し ま す
【 も っ と 知 り た い 人 に : 論 理 演 算 式 の 値 】
if(this.x == p.x && this.y == p.y) { return true; } else { return false; } 上 の 5 行 分 の プ ロ グ ラ ム コ ー ド を 、次 の 1 行 に ま と め て し ま う こ と が で き ま す 。
return (this.x == p.x && this.y == p.y);
if(p1.isSamePosition(p2) == true) { と い う 条 件 式 は 次 の よ う に 書 く こ と が で き ま す 。 if(p1.isSamePosition(p2)) { ● 主 な キ ー ワ ー ド 引 数 : メ ソ ッ ド を 呼 び 出 す と き に 、 メ ソ ッ ド に 渡 す 値 の こ と 。 戻 り 値 : メ ソ ッ ド か ら 返 さ れ る 値 の こ と 。 void: メ ソ ッ ド に 戻 り 値 が 無 い 場 合 に 、 戻 り 値 の 型 と し て 使 用 す る キ ー ワ ー ド return: 戻 り 値 の あ る メ ソ ッ ド で 、 戻 り 値 を 指 定 す る の に 使 用 す る キ ー ワ ー ド 。 ● ま と め ・ メ ソ ッ ド に は 、 引 数 と 戻 り 値 を 設 定 で き ま す 。 戻 り 値 が 無 い 場 合 は 、 戻 り 値 の 型 に void を 使 い ま す 。 ・ メ ソ ッ ド の 引 数 に 、 イ ン ス タ ン ス の 参 照 を 渡 す る こ と も で き ま す 。
5-3
コ ン ス ト ラ ク タ
コ ン ス ト ラ ク タ と は 英 語 で 「 構 築 す る 」 と い う 意 味 の 言 葉 で 、コ ン ス ト ラ ク タ と は
イ ン ス タ ン ス が 生 成 さ れ る 時 に 自 動 的 に 実 行 さ れ る メ ソ ッ ド で す コ ン ス ト ラ ク タ に は 、 次 の 2 つ の 決 ま り ご と が あ り ま す 。 。 ・ クラス名 と同 じ名 前 のメソッドである ・ 戻 り値 を定 義 できない つ ま り 、Point ク ラ ス の コ ン ス ト ラ ク タ は 次 の よ う な 形 で 宣 言 す る こ と に な り ま す 。 Point(引 数 列) { 命 令 文 }コ ン ス ト ラ ク タ の 例
■ 05-07/ConstructorExample.java class P oint { int x; int y; Point(i nt x, int y) {System. out.p rintl n( "Point の コ ン ス ト ラ ク タ が 呼 び 出 さ れ ま し た "); this.x = x; this.y = y; } } 戻 り 値 の 定 義 は あ り ま せ ん ク ラ ス 名 を 使 い ま す 引 数 を 受 け 取 れ ま す コ ン ス ト ラ ク タ の 定 義 で す 。 コ ン ス ト ラ ク タ は ク ラ ス 名 と 同 じ 名 前 で 戻 り 値 の 定 義 が あ り ま せ ん
class C onstr uctor Ex ample {
public stati c voi d main(St ring[ ] arg s) { Point p = ne w Poi nt (5, 10) ;
System. out.p rintl n( "p の 座 標 は (" + p.x + "," + p.y + ")"); } } ● 主 な キ ー ワ ー ド コ ン ス ト ラ ク タ : イ ン ス タ ン ス が 生 成 さ れ る 時 に 、 自 動 で 実 行 さ れ る 特 殊 な メ ソ ッ ド ● ま と め ・ コ ン ス ト ラ ク タ は 、 ク ラ ス の イ ン ス タ ン ス が 生 成 さ れ る 時 に 自 動 的 に 実 行 さ れ ま す 。 ・ コ ン ス ト ラ ク タ に は 、 戻 り 値 を 定 義 で き ま せ ん が 、 引 数 を 指 定 で き ま す 。 座 標 値 を 引 数 に 指 定 し て Point ク ラ ス の イ ン ス タ ン ス 生 成 し ま す
章 末 問 題 1. 次 の 空 欄 を 埋 め て 、 文 章 を 完 成 さ せ て く だ さ い 。 ・ メ ソ ッ ド を 呼 び 出 す 時 に 、 メ ソ ッ ド に 渡 す 値 を の こ と を [ (1) ]と 言 い 、 メ ソ ッ ド か ら 戻 さ れ る 値 の こ と を [ (2) ]と 言 う 。 ・メ ソ ッ ド の 宣 言 で は [ (2) ]の 型 を メ ソ ッ ド 名 の 前 に 記 述 す る が 、[ (2) ] が 無 い 場 合 は [ (3) ]と 記 述 す る 。 ・ イ ン ス タ ン ス が 生 成 さ れ る 時 に 、 自 動 的 に 呼 び 出 さ れ る 特 別 な メ ソ ッ ド の こ と を [ (4) ]と い う 。 2. 次 の 文 章 の う ち 、誤 っ て い る も の に は ×を 、正 し い も の に は ○ を つ け て く だ さ い 。 誤 っ て い る も の は 、 ど こ が 誤 っ て い る か 指 摘 し て く だ さ い 。 (1) メ ソ ッ ド の 引 数 に 使 え る の は 、 int、 double な ど の 基 本 型 だ け で あ る 。 (2) メ ソ ッ ド の 引 数 と 戻 り 値 は い く つ で も 指 定 で き る 。 (3) メ ソ ッ ド 内 に return;と 記 述 す る と 、 コ ン パ イ ル エ ラ ー に な る 。 (4) コ ン ス ト ラ ク タ は 無 く て も 問 題 無 い 。 (5) メ ソ ッ ド の 中 で 他 の メ ソ ッ ド を 呼 び 出 し て も 構 わ な い 。
3. width(幅 )と height(高 さ )の 情 報 を 持 つ 、 Rectangle(長 方 形 )ク ラ ス を 次 の よ う に 定 義 し ま し た 。 以 下 の 問 い に 答 え て く だ さ い 。 class Rectangle { double width; // 幅 double height; // 高 さ } (1) 面 積 ( 幅 ×高 さ ) を 戻 り 値 と す る getArea メ ソ ッ ド を 追 加 し て く だ さ い 。 (2) 幅 と 高 さ を 引 数 で 指 定 で き る コ ン ス ト ラ ク タ を 追 加 し て く だ さ い 。コ ン ス ト ラ ク タ 内 で イ ン ス タ ン ス 変 数 を 参 照 す る 時 に は this キ ー ワ ー ド を 使 う よ う に し て く だ さ い 。 (3) 引 数 で 渡 さ れ た Rectangle ク ラ ス の イ ン ス タ ン ス と 比 較 し て 、 自 分 の 方 が 面 積 が 大 き け れ ば true を 、 そ う で な け れ ば fale を 戻 り 値 と す る isLarger メ ソ ッ ド を 追 加 し て く だ さ い 。 メ ソ ッ ド の 宣 言 は boolean isLarger(Rectangle r) { 命 令 文 }と な り ま す 。命 令 文を 考 え て く だ さ い 。
6-1 オ ー バ ー ロ ー ド と this
メ ソ ッ ド の オ ー バ ー ロ ー ド
異 な る メ ソ ッ ド に 同 じ 名 前 を つ け る こ と を メ ソ ッ ド の オ ー バ ー ロ ー ド と 言 い ま す。 ■ 06-01/Point.java class P oint { int x; int y; // 座 標 値 を 変 更 す る 。 x と y の 値 は 引 数 で 指 定 さ れ た も の に す る void se t(int x, i nt y) { this.x = x; this.y = y; } // 座 標 値 を 変 更 す る 。 x と y は 引 数 で 渡 さ れ る イ ン ス タ ン ス の 値 と 同 じ に す る 。 void se t(Poi nt p) { this.x = p.x ; this.y = p.y ; } } Point ク ラ ス に 含 ま れ る 2 つ の メ ソ ッ ド の 名 前 は ど ち ら も 同 じ set で す が 、 呼 び 出 す と き に 渡 す 引 数 の 型 と 数 に よ っ て 、 ど ち ら が 実 行 さ れ る か 区 別 さ れ ま す 。 ■ 06-01/OverloadExample.javaclass O verlo adExa mp le {
public stati c voi d main(St ring[ ] arg s) { Point p 1 = n ew Po in t();
System. out.p rintl n( "p1 の 座 標 は (" + p1.x + “ , ” + p1.y + ")" );
p1.set( 10, 0 );
System. out.p rintl n( "p1 の 座 標 は (" + p1.x + ", " + p1 .y + ")" );
set と い う 名 前 の メ ソ ッ ド で す 。引 数 は int 型 の 値 が 2 つ で す 。 set と い う 名 前 の メ ソ ッ ド で す 。引 数 は Point 型 の 値 が 1 つ で す 。 新 し い イ ン ス タ ン ス を 生 成 し p1 と し ま す 2 つ の 整 数 を 引 数 に し て set メ ソ ッ ド を 呼 び 出 し ま す
Point p 2 = n ew Po in t(); p2.set( p1);
System. out.p rintl n( "p2 の 座 標 は (" + p2.x + ", " + p2.y +")") ; } } 同 じ ク ラ ス の 中 に 、 引 数 が 異 な る コ ン ス ト ラ ク タ を 宣 言 で き ま す 。
コ ン ス ト ラ ク タ の オ ー バ ー ロ ー ド
■ 06-02/Point.java class P oint { int x; int y; // x と y の 値 を 0 に す る Point() {System. out.p rintl n( "引 数 が 無 い コ ン ス ト ラ ク タ が 実 行 さ れ ま し た "); this.x = 0;
this.y = 0; }
// 引 数 で 渡 さ れ た Point 型 の 参 照 先 の イ ン ス タ ン ス と 同 じ 座 標 値 に す る Point(P oint p) {
System. out.p rintl n( "引 数 が 1 つ の コ ン ス ト ラ ク タ が 実 行 さ れ ま し た "); this.x = p.x ;
this.y = p.y ; }
// 引 数 で 渡 さ れ た x と y の 値 を 座 標 値 に 設 定 す る Point(i nt x, int y) {
System. out.p rintl n( "引 数 が 2 つ の コ ン ス ト ラ ク タ が 実 行 さ れ ま し た "); this.x = x; Point 型 の 参 照 を 引 数 に し て set メ ソ ッ ド を 呼 び 出 し ま す 新 し い イ ン ス タ ン ス を 生 成 し p2 と し ま す 引 数 が 無 い コ ン ス ト ラ ク タ で す Point ク ラ ス 型 の 参 照 を 引 数 と す る コ ン ス ト ラ ク タ で す 2 つ の 整 数 値 を 引 数 と す る コ ン ス ト ラ ク タ で す
this.y = y; }
}
■ 06-02/OverloadExample2.java
class O verlo adExa mp le2 {
public stati c voi d main(St ring[ ] arg s) { Point p 1 = n ew Po in t();
System. out.p rintl n( "p1 の 座 標 は (" + p1.x + "," + p1. y + " )" );
Point p 2 = n ew Po in t(10, 2 0);
System. out.p rintl n( "p2 の 座 標 は (" + p2.x + "," + p2. y + " )" );
Point p 3 = n ew Po in t(p2);
System. out.p rintl n( "p3 の 座 標 は (" + p3.x + "," + p3. y + " )" ); } } 引 数 が 異 な る 複 数 の コ ン ス ト ラ ク タ を 定 義 す る こ と を 、 コ ン ス ト ラ ク タ の オ ー バ ー ロ ー ド と い い ま す 。 コ ン ス ト ラ ク タ が 複 数 あ っ て も 、 イ ン ス タ ン ス が 生 成 さ れ る 時 に 実 行 さ れ る の は 1 つ だ け で す 。ど の コ ン ス ト ラ ク タ が 実 行 さ れ る か は 引 数 の 型 と 数 に よ っ て 決 め ら れ ま す。
メ ソ ッ ド と コ ン ス ト ラ ク タ を 呼 び 出 す た め の thisキ ー ワ ー ド
this.メ ソ ッ ド 名(引 数) と 記 述 す る こ と で 、 自 分 自 身 ( メ ソ ッ ド を 定 義 し て い る ク ラ ス ) の 別 の メ ソ ッ ド を 実 行 で き ま す 。 次 の よ う に 記 述 す る こ と で 、 自 分 自 身 の コ ン ス ト ラ ク タ を 実 行 で き ま す 。 this(引 数) た だ し 、 こ の 記 述 が 使 え る の は コ ン ス ト ラ ク タ の 先 頭 行 だ け で す。 引 数 が 無 い コ ン ス ト ラ ク タ を 使 用 し ま す 引 数 が 2 つ の コ ン ス ト ラ ク タ を 使 用 し ま す Point ク ラ ス の イ ン ス タ ン ス を 引 数 と す る コ ン ス ト ラ ク タ を 使 用 し ま す■ 06-03/Point.java class Point { int x; int y; // x と y の 値 を 0 に す る Point() { this(0, 0); } // 引 数 で 渡 さ れ た Point 型 の 参 照 先 の イ ン ス タ ン ス と 同 じ 座 標 値 に す る Point(Point p) { this(p.x, p.y); } // 引 数 で 渡 さ れ た x と y の 値 を 座 標 値 に 設 定 す る Point(int x, int y) { this.x = x; this.y = y; } } 引 数 が 無 い コ ン ス ト ラ ク タ で す Point ク ラ ス の イ ン ス タ ン ス を 引 数 と す る コ ン ス ト ラ ク タ で す 2 つ の 整 数 値 を 引 数 と す る コ ン ス ト ラ ク タ で す 2 つ の 整 数 値 を 引 数 と す る コ ン ス ト ラ ク タ を 呼 び 出 し ま す 2 つ の 整 数 値 を 引 数 と す る コ ン ス ト ラ ク タ を 呼 び 出 し ま す
メ ソ ッ ド 中 で 参 照 さ れ る 変 数 が 、イ ン ス タ ン ス 変 数 で あ る こ と が 自 明 で あ る 場 合 、 this キ ー ワ ー ド を 省 略 で き ま す 。
thisキ ー ワ ー ド の 省 略
class Point { int x; int y; // 現 在 の 座 標 値 を 出 力 す る void printPosition() { System.out.println("座 標 値 は (" + x + ", " + y + ")で す "); } } ● 主 な キ ー ワ ー ド ・ オ ー バ ー ロ ー ド : 引 数 が 異 な る 、 同 じ 名 前 の メ ソ ッ ド を 定 義 す る こ と 。 ま た は 、 引 数 が 異 な る コ ン ス ト ラ ク タ を 定 義 す る こ と 。 ● ま と め ・ ク ラ ス に は 引 数 の 異 な る 複 数 の コ ン ス ト ラ ク タ を 定 義 で き ま す 。 こ の こ と を コ ン ス ト ラ ク タ の オ ー バ ー ロ ー ド と い い ま す 。 ・ ク ラ ス に は 引 数 の 異 な る 同 じ 名 前 の メ ソ ッ ド を 定 義 で き ま す 。 こ の こ と を 、 メ ソ ッ ド の オ ー バ ー ロ ー ド と 言 い ま す 。 ・ オ ー バ ー ロ ー ド さ れ た コ ン ス ト ラ ク タ と メ ソ ッ ド は 、 引 数 の 数 と 種 類 に よ っ て 、 ど れ が 実 行 さ れ る か 決 定 さ れ ま す 。 ・ this キ ー ワ ー ド は 、そ の キ ー ワ ー ド が 使 わ れ て い る イ ン ス タ ン ス 自 身 を 指 し ま す 。 自 明 な this キ ー ワ ー ド は 省 略 で き ま す 。this.x の this.を 省 略 this.y の this.を 省 略 フ ィ ー ル ド の x を 参 照 し ま す