この章で行う学習内容
●Javaの主要機能、設計図と呼ばれているクラスについて
●クラスを構成する、フィールド・メソッド・コンストラクタについて
●クラスを使用するために必要なインスタンスについて
●プログラムに値を渡したい場合に使用するコマンドライン引数について学びます
●2種類の変数、メンバ変数とローカル変数について
●変数と同様に、クラスやメソッドにもわかりやすい名前を付けます。
その方法である命名規約について学びます。
●クラスを構成する、フィールド・メソッド・コンストラクタについて
●クラスを使用するために必要なインスタンスについて
●プログラムに値を渡したい場合に使用するコマンドライン引数について学びます
●2種類の変数、メンバ変数とローカル変数について
●変数と同様に、クラスやメソッドにもわかりやすい名前を付けます。
その方法である命名規約について学びます。
クラス
クラスとは?
クラスとはどんなものでしょうか?
会社で使用しているパソコンと自宅のパソコンは違います。 ただし、パソコンは色や形が違っても「パソコン」です。
いきなりですが、デスクトップパソコンを作ってみましょう!
①まずパソコン本体が必要です。 「どんなパソコン本体が必要なんだろう?」 「色は何色がいいかな?」 と考え、パソコン本体の設計図を作ります。
②①で作成した設計図を使い、 パソコン本体(モノ)を作ります。 設計図があるので、パソコン本体 (モノ)はいくつでも作れます。
③次に、パソコンにはマウスが必要です。 「どんなマウスがいいかな?」と考え、マウスの設計図を作ります。
④マウスの設計図を使い、 マウス(モノ)を作ります。 設計図はあるので、何個でもマウスを 作ることができます。
⑤同じようにディスプレイを作り、 パソコン本体・マウスを1つにするため、パソコン自体の設計図を作ります。
このような感じで、パソコンが出来上がります。
ここでいう設計図にあたるものが、Javaプログラミング言語の「クラス」です。
クラスにはオブジェクトのデータ(色やメーカー)などを定義します。 例えば、黒いパソコン、白いパソコンというそれぞれのパソコンによって色が違う点から、 「パソコンには色という要素がある」という定義をする、といった感じです。
設計図があれば「モノ」を作ることができるように、
クラスからオブジェクトを作ることができます。
その上で、「パソコン」クラスを「私のパソコン」オブジェクトという具体的な「モノ」にして、 「黒」という色や「デスクトップ型」という形を与えて使うことにするのです。
このようなクラス(設計図)を利用して
オブジェクト(パソコン)を作成することを、
インスタンスの生成といいます。
パソコン本体、このオブジェクト(モノ)を
「パソコン本体クラスのインスタンス」、
同じようにマウスのこのオブジェクト(モノ)は
「マウスクラスのインスタンス」と言います。
会社で使用しているパソコンと自宅のパソコンは違います。 ただし、パソコンは色や形が違っても「パソコン」です。
いきなりですが、デスクトップパソコンを作ってみましょう!
①まずパソコン本体が必要です。 「どんなパソコン本体が必要なんだろう?」 「色は何色がいいかな?」 と考え、パソコン本体の設計図を作ります。
②①で作成した設計図を使い、 パソコン本体(モノ)を作ります。 設計図があるので、パソコン本体 (モノ)はいくつでも作れます。
③次に、パソコンにはマウスが必要です。 「どんなマウスがいいかな?」と考え、マウスの設計図を作ります。
④マウスの設計図を使い、 マウス(モノ)を作ります。 設計図はあるので、何個でもマウスを 作ることができます。
⑤同じようにディスプレイを作り、 パソコン本体・マウスを1つにするため、パソコン自体の設計図を作ります。
このような感じで、パソコンが出来上がります。
ここでいう設計図にあたるものが、Javaプログラミング言語の「クラス」です。
クラスにはオブジェクトのデータ(色やメーカー)などを定義します。 例えば、黒いパソコン、白いパソコンというそれぞれのパソコンによって色が違う点から、 「パソコンには色という要素がある」という定義をする、といった感じです。
設計図があれば「モノ」を作ることができるように、
クラスからオブジェクトを作ることができます。
その上で、「パソコン」クラスを「私のパソコン」オブジェクトという具体的な「モノ」にして、 「黒」という色や「デスクトップ型」という形を与えて使うことにするのです。
このようなクラス(設計図)を利用して
オブジェクト(パソコン)を作成することを、
インスタンスの生成といいます。
パソコン本体、このオブジェクト(モノ)を
「パソコン本体クラスのインスタンス」、
同じようにマウスのこのオブジェクト(モノ)は
「マウスクラスのインスタンス」と言います。
構文
01.
フィールド
02.
クラス内のどこでも使用できる変数。
03.
メソッド
04.
処理する部品。引数、戻り値を持つ。
05.
コンストラクタ
06.
特別なメソッド。
07.
今まで作成したもので考えてみると・・・
08.
public
class
Lv0240{ ← 全体「クラス」
09.
public
static
void
main(String args[]){
10.
↑
11.
クラスの中にあるものが「メソッド」
12.
//処理
13.
}
14.
}
例文1
01.
//クラス
02.
public
class
PersonalComputer{
03.
public
Stinrg name;
04.
public
int
price;
05.
//↑フィールド
06.
07.
public
PersonalComputer(){
08.
//↑コンストラクタ
09.
name = “DELL”;
10.
price =
150000
;
11.
}
12.
13.
public
static
void
main(String args[]){
14.
//↑メソッド
15.
PersonalComputer myPC =
new
PersonalComputer();
16.
myPC.show();
17.
}
18.
19.
public
void
show(){
20.
//↑メソッド
21.
System.out.println(name + “は” + price + “円です。”);
22.
}
23.
}
※フィールドもメソッドも複数定義することができます!
オブジェクトとは?
Javaはオブジェクト指向プログラム言語といわれますが、 オブジェクトとは何でしょうか?オブジェクトとは、 英語で簡単に言うと「もの」という意味になります。 私たちが生きているこの世界のすべてが「モノ」で構成されています。 研修で使っているパソコンを例にしてみます
具体的なパソコン1台1台がオブジェクトになります! 例え、メーカーや形・色が同じだったとしても、 同じパソコン、つまり同じオブジェクトではありません。
このように私たちの世界と同じような考えをプログラミング言語にも応用 しようというのが、「オブジェクト指向言語」です。
具体的なパソコン1台1台がオブジェクトになります! 例え、メーカーや形・色が同じだったとしても、 同じパソコン、つまり同じオブジェクトではありません。
このように私たちの世界と同じような考えをプログラミング言語にも応用 しようというのが、「オブジェクト指向言語」です。
フィールド
フィールドとは?
フィールドは、クラスが持つ情報を表すものです。
同一クラスのどこからでも参照できます。
構文
1.
アクセス修飾子 型 フィールド名 アクセス修飾子
2.
・
public
どこからでも参照可能
3.
・
private
自クラス内でのみ参照可能
4.
メソッド
5.
処理する部品。引数、戻り値を持つ。
例文1
1.
//サンプルソース
2.
public
class
PersonalComputer {
3.
private
String name;
4.
public
int
price;
5.
//↑フィールド ・・・
6.
}
※フィールドnameはprivateなので自クラスのみ参照可能です。priceはpublicなので他クラスからも参照可能です。
メソッド
メソッドとは?
クラスの部品、動作、機能を表すものです。
このクラスができること(振る舞い)です。
構文
01.
アクセス修飾子 戻り値の型 メソッド名(型 引数名
1
, ・・・, 型 引数名n){
02.
処理
03.
}
04.
アクセス修飾子
05.
・
public
どこからでも参照可能
06.
・
private
自クラス内でのみ参照可能
07.
戻り値の型
08.
・このメソッドが処理した結果を返す値の型になります
09.
戻り値で値を何も返さない場合、
10.
つまり戻り値がない場合は「
void
」を指定します。
11.
メソッド名
12.
・任意につけることができます
13.
・メソッドの処理に適した名前を付けます
14.
引数
15.
・メソッドが処理する時に、必要な値(もらう値)になります
16.
引数は
1
つだけでなく、
17.
カンマ区切りで複数指定することができます。
例文1
01.
public
class
MyPC{
02.
//戻り値なし、引数なしのメソッド
03.
public
void
show1() {
04.
String name = “DELL”;
05.
int
price =
150000
;
06.
System.out.println( name + “は” + price + “円です。” );
07.
}
08.
//戻り値String、引数なしのメソッド
09.
public
String show2() {
10.
String name = “HP”;
11.
int
price =
60000
;
12.
String message = name + “は” + price + “円です。”;
13.
return
message;
14.
}
15.
//戻り値void、引数String型1つ
16.
public
void
show3( String name ) {
17.
int
price =
75000
;
18.
System.out.println( name + “は” + price + “円です。” );
19.
}
20.
//戻り値String、引数String型1つ、int型1つ
21.
public
String show4( String name ,
int
price) {
22.
String message = name + “は” + price + “円です。”;
23.
return
message;
24.
}
25.
}
注意点
戻り値を返さない場合は、戻り値の型をvoidにします。
これで、戻り値なしという意味になります。
この場合returnする必要はありません!
returnは、メソッドの処理が終わるということです。
returnの後に処理はできません。
例) return a;
× System.out.println(a);
mainは特別なメソッドです。
このメソッドはJava実行時に最初に呼ばれます。
例)C:\sample>java Sample
これは、「Sampleクラスのmainメソッドを実行」という意味になります。
これで、戻り値なしという意味になります。
この場合returnする必要はありません!
returnは、メソッドの処理が終わるということです。
returnの後に処理はできません。
例) return a;
× System.out.println(a);
mainは特別なメソッドです。
このメソッドはJava実行時に最初に呼ばれます。
例)C:\sample>java Sample
これは、「Sampleクラスのmainメソッドを実行」という意味になります。
※フィールドnameはprivateなので自クラスのみ参照可能です。priceはpublicなので他クラスからも参照可能です。
コンストラクタ
コンストラクタとは?
インスタンスを生成する時に呼ばれるメソッド。
インスタンスを生成時に初期化を行います。
構文
01.
アクセス修飾子 クラス名(型 引数名
1
,・・・,型 引数名n){
02.
初期化処理
03.
}
04.
アクセス修飾子
05.
・
public
どこからでも参照可能
06.
・
private
自クラス内でのみ参照可能
07.
引数
08.
・このコンストラクタが処理する時に、必要な値(もらう値)になります 初期化処理とは?
09.
例えば、自転車インスタンスを生成した時、この自転車は何色でしょうか?
10.
自転車は売りに出された時には、色がついています。
11.
つまり、インスタンス生成完了時には色がついていなければなりません。
12.
13.
インスタンスに対してデフォルト設定をしたり、最後の仕上げをするのが、
14.
初期化処理になります。
例文1
01.
public
class
Bicycle{
02.
//タイヤの数
03.
public
int
tireCnt;
04.
//自転車の色
05.
public
String color;
06.
07.
public
Bicycle(
int
tireCnt , String color ){
08.
this
.tireCnt = tireCnt;
09.
this
.color = color;
10.
}
11.
}
【自クラスのフィールドの呼び出し方】
this.フィールド名
this.フィールド名
this
this.は「自クラスの」という意味になります。
コンストラクタの中で、引数の名前とフィールドの名前が同じになっています。
引数なのかフィールドなのかを指定する為、thisを使います。
※自クラスのメソッド・コンストラクタの呼び出し時にもthisを使用する事で呼び出せます。
コンストラクタの中で、引数の名前とフィールドの名前が同じになっています。
引数なのかフィールドなのかを指定する為、thisを使います。
※自クラスのメソッド・コンストラクタの呼び出し時にもthisを使用する事で呼び出せます。
注意点
コンストラクタの定義をしない場合は?
定義上は、コンストラクタの存在しないクラスになっていますが、実は、 デフォルトコンストラクタが存在することになります。
定義上は、コンストラクタの存在しないクラスになっていますが、実は、 デフォルトコンストラクタが存在することになります。
例文
1.
public
class
Sample{
2.
public
Sample(){}
//が省略されています
3.
public
void
method() {
4.
System.out.println(“メソッド処理”);
5.
}
6.
}
例文
01.
public
class
Sample{
02.
public
Sample(){
03.
}
04.
public
void
method() {
05.
System.out.println(“メソッド処理”);
06.
}
07.
}
08.
引数があるコンストラクタ、またはコンストラクタに処理を定義する時は、
09.
デフォルトコンストラクタはなくなってしまいます。
10.
public
class
ConstructorSample {
11.
int
num;
12.
public
ConstructorSample(){}
13.
//↑はなくなる
14.
public
ConstructorSample(
int
num ) {
15.
int
型引数があるコンストラクタの定義
16.
this
.num = num;
17.
}
18.
public
void
method() {
19.
System.out.println(“メソッド処理”);
20.
}
21.
}
インスタンス
インスタンスとは?
クラスは設計図のようなものでした。
この設計図を元に実体化したものをインスタンスと言います。
例えば、自転車の設計図があります。
これで自転車に乗ることができるでしょうか?
答えはNoです。あくまでも設計図であり、自転車ではないので乗ることはできません。
自転車に乗るには、自転車の実体(インスタンス)が必要になります。
1つの設計図から複数のオブジェクト(実体)を生成できる。
この設計図を元に実体化したものをインスタンスと言います。
例えば、自転車の設計図があります。
これで自転車に乗ることができるでしょうか?
答えはNoです。あくまでも設計図であり、自転車ではないので乗ることはできません。
自転車に乗るには、自転車の実体(インスタンス)が必要になります。
1つの設計図から複数のオブジェクト(実体)を生成できる。
インスタンスの使用方法
構文
1.
①フィールドアクセス
2.
インスタンス名.フィールド名
3.
②メソッド呼び出し
4.
インスタンス名.メソッド名( 引数 )
5.
6.
※インスタンス名とは、インスタンスを格納している変数名のことです。
7.
フィールド使用方法
例文1 フィールドの呼び出し
1.
public
class
Field_01{
2.
private
String str;
3.
public
int
num;
4.
public
Field_01() {
5.
str = “フィールド”;
6.
num =
1
;
7.
}
8.
}
1.
public
class
FieldSample_01 {
2.
public
static
void
main( String args[] ) {
3.
Field_01 sample =
new
Field_01();
4.
sample.str;
5.
//↑ここでエラーが発生
6.
sample.num;
7.
}
8.
}
例文2 メソッドの呼び出し(引数、戻り値がない場合)
1.
public
class
Instance_02 {
2.
public
void
show() {
3.
public
int
num;
4.
System.out.println(“★”);
5.
}
6.
}
1.
public
class
InstanceSample_02{
2.
public
static
void
main( String args[] ){
3.
Instance_02 sample1 =
new
Instance_02();
4.
sample1.show();
5.
}
6.
}
例文3 メソッドの呼び出し(引数、戻り値がある場合)
1.
public
class
Instance_03{
2.
public
int
plus(
int
a ,
int
b ){
3.
int
c = a + b;
4.
return
c;
5.
}
6.
}
01.
public
class
InstanceSample_03{
02.
public
static
void
main( String args[] ){
03.
Field_01 sample =
new
Field_01();
04.
Instance_03 sample2 =
new
Instance_03();
05.
int
sum = sample2.plus(
10
,
5
);
06.
//↑int型の戻り値を返すので、受け取る
07.
System.out.println( sum );
08.
}
09.
}
クラスの用途
メインクラス
mainメソッドを持っていて、プログラムの最初に呼ばれるクラス。
Javaはメインメソッドを読み込んで実行します。
mainメソッドを持っていて、プログラムの最初に呼ばれるクラス。
Javaはメインメソッドを読み込んで実行します。
例文
1.
//Main1はmainメソッドを持っています。ですから、「メインクラス」ということになります。
2.
public
class
Main1 {
3.
public
static
void
main( String[] args ) {
4.
Sample1 sample =
new
Sample1();
5.
sample.show();
6.
}
7.
}
01.
/*
02.
Sample1クラスはmainメソッドを持っていない、
03.
★を表示するshowメソッドを持ったクラスです。
04.
ですから、「処理クラス」ということになります。
05.
*/
06.
public
class
Sample1 {
07.
public
void
show() {
08.
System.out.println(
"★"
);
09.
}
フィールド、メソッドの呼び出し方法
構文
01.
自クラスのフィールドの呼び出し方法
02.
this
.フィールド名 ;
03.
自クラスのメソッドの呼び出し方法
04.
■戻り値が無い場合
05.
this
.メソッド( 引数 ) ;
06.
■戻り値がある場合
07.
戻り値の型 変数名 =
this
.メソッド( 引数 ) ;
08.
他クラスのフィールドの呼び出し方法(アクセス修飾子が
private
以外)
09.
インスタンス名.フィールド名 ;
10.
他クラスのメソッドの呼び出し方法(アクセス修飾子が
private
以外)
11.
■戻り値が無い場合
12.
インスタンス名.メソッド( 引数 ) ;
13.
■戻り値がある場合
14.
戻り値の型 変数名 = インスタンス名.メソッド( 引数 ) ;
コマンドライン引数
コマンドライン引数とは?
この引数は、実行したクラスのメインメソッドの引数argsに渡ります。
argsはStringの配列です。
渡された値は、左から順に配列に格納されます。
今回の場合は、
“引数1” ⇒ args[0]
“引数2” ⇒ args[1]
となります。
argsはStringの配列です。
渡された値は、左から順に配列に格納されます。
今回の場合は、
“引数1” ⇒ args[0]
“引数2” ⇒ args[1]
となります。
例文
1.
public
class
Sample {
2.
public
static
void
main( String[] args ) {
3.
System.out.println(args[
0
]);
4.
}
5.
}
出力結果
1.
引数
1
2.
要素数の取得方法
コマンドライン引数を使うことで、実行時に値を決められ、
再コンパイルなしに、いろいろなパターンを試すことができます。
ただ、その都度値の数も変わります。
mainメソッド実装時には、引数argsに何個の値が渡されるのかわかりません。
そこで、何個の値がわたってきているのか取得する方法があります。
配列の箱の数を「要素数」といいます。
再コンパイルなしに、いろいろなパターンを試すことができます。
ただ、その都度値の数も変わります。
mainメソッド実装時には、引数argsに何個の値が渡されるのかわかりません。
そこで、何個の値がわたってきているのか取得する方法があります。
配列の箱の数を「要素数」といいます。
構文
1.
配列名.length
例文
例) int size = args.length;
これでargsの箱の数がint型で取得できます。
これはどの配列に対しても有効です。
int size = 配列変数.length;
で箱の数が取得できます。
これでargsの箱の数がint型で取得できます。
これはどの配列に対しても有効です。
int size = 配列変数.length;
で箱の数が取得できます。
01.
public
class
Sample {
02.
public
static
void
main( String[] args ) {
03.
// argsの中身を全て表示
04.
int
size = args.length;
05.
for
(
int
i =
0
; i < size; i++ ) {
06.
System.out.println( args[i] );
07.
}
08.
}
09.
}
String型の数字をint型の数字に変換する方法
コマンドライン引数に数字を渡して、足し算などの計算をさせたい場合、
通常のままだとコマンドライン引数はString型なので、計算をさせることが出来ません。
通常のままだとコマンドライン引数はString型なので、計算をさせることが出来ません。
構文
1.
int
i = Integer.parseInt(String型) ;
例文
1.
String numStr = args[
0
];
2.
int
i = Integer.parseInt(numStr);
メンバ変数とローカル変数
メンバ変数とは?
メンバ変数とは、クラスに直接宣言された変数のことです。つまりフィールドのことです。
例文
01.
public
class
Human {
02.
/* 名前 */
03.
public
String name;
04.
/* 年齢 */
05.
public
int
age;
06.
//↑この場合、メンバ変数はクラスに直接宣言されている「name」と「age」になります。
07.
public
Human( String name ,
int
age ) {
08.
this
.name = name;
09.
this
.age = age;
10.
}
11.
}
他のクラスからの変数の呼び出し
構文
1.
インスタンス名.メンバ変数名
例文
01.
・Humanクラスから「name」に入っている値を取得する
02.
public
class
MemberSample {
03.
public
static
void
main( String[] args ) {
04.
// Humanクラスのインスタンス生成
05.
Human man =
new
Human(
"山田"
,
23
);
06.
// メンバ変数nameを取得
07.
String name = man.name;
08.
System.out.println(name);
09.
}
10.
}
出力結果
1.
山田
2.
ローカル変数とは?
例文
01.
public
class
Human {
02.
public
Human( String name ,
int
age ) {
03.
/* 名前 */
04.
String name;
05.
/* 年齢 */
06.
int
age;
07.
//↑ここでのローカル変数は、コンストラクタ内に定義されている「name」と「age」になります。
08.
name =
"名前"
;
09.
ge =
10
;
10.
}
11.
}
12.
ローカル変数はそのコンストラクタ、またはメソッド内でしか使用できません。
命名規約
名前の付け方
クラス名、メソッド名
以前、変数名の命名規約で、
変数名をつける際には、名前に意味を持たせるようにしましょう!
と学びました。
クラス・メソッド名も同じように命名規約を用いるようにしましょう。
名前を見ただけで、「どんなクラスなのか?」「どんな処理をしているメソッドなのか?」
がわかるような名前をつけましょう。
以前、変数名の命名規約で、
変数名をつける際には、名前に意味を持たせるようにしましょう!
と学びました。
クラス・メソッド名も同じように命名規約を用いるようにしましょう。
名前を見ただけで、「どんなクラスなのか?」「どんな処理をしているメソッドなのか?」
がわかるような名前をつけましょう。
例文(悪い例)
1.
public
class
A{
2.
private
String str1;
3.
private
String str2;
4.
public
void
setStr1( String str ) {
5.
this
.str1 = str ;
6.
}
7.
}
例文(良い例)
1.
public
class
Car{
2.
private
String name;
3.
private
String color;
4.
public
void
setName( String name ) {
5.
this
.name = name ;
6.
}
7.
}
良い例では、クラス名に「Car」という名前を付けているので、
車のクラスだというのが分かりやすくなっています。
一方、悪い例では全く同じ処理が記述してあるクラスではありますが,
クラス名が「A」となっており、何をするクラスなのか全く分かりません。
クラスを使用する時にとても不適切です。
メソッド名も同じです。良い例ではメソッド名を「setName()」としています。
それぞれ「車」に名前を設定し、色を設定する処理が記述されているのが、
とても分かりやすいですよね。
悪い例を見てみましょう。
「setStr1()」
このメソッド名を見て、このメソッドは何を処理するメソッドなのかは分かりませんよね。
何かを設定するメソッドなのかな・・とは思えても何を設定するのか見当もつきません。
このように、クラス名メソッド名を判りやすく付けることにより、
自分でソースを読む時にも、誰かがこのクラス・メソッドを使う時にも
理解しやすくすることが可能になります!
車のクラスだというのが分かりやすくなっています。
一方、悪い例では全く同じ処理が記述してあるクラスではありますが,
クラス名が「A」となっており、何をするクラスなのか全く分かりません。
クラスを使用する時にとても不適切です。
メソッド名も同じです。良い例ではメソッド名を「setName()」としています。
それぞれ「車」に名前を設定し、色を設定する処理が記述されているのが、
とても分かりやすいですよね。
悪い例を見てみましょう。
「setStr1()」
このメソッド名を見て、このメソッドは何を処理するメソッドなのかは分かりませんよね。
何かを設定するメソッドなのかな・・とは思えても何を設定するのか見当もつきません。
このように、クラス名メソッド名を判りやすく付けることにより、
自分でソースを読む時にも、誰かがこのクラス・メソッドを使う時にも
理解しやすくすることが可能になります!
クラス名
クラス名を付ける時は、最初の文字を大文字にするのが一般的なルールです。
1.
public
class
Main {
2.
public
static
void
main ( String[ ] args ) {
3.
System.out.println(
"HelloJava"
) ;
4.
}
5.
}
01.
//複数の単語をつなげる時は、単語の区切り文字も大文字にします。
02.
public
class
ItemBean {
03.
private
int
id ;
04.
public
void
setId (
int
id ) {
05.
this
.id = id;
06.
}
07.
public
int
getId ( ){
08.
return
this
.id;
09.
}
10.
}
メソッド名
メソッド名を付ける時は、最初の文字を小文字にするのが一般的なルールです。また、メソッドは振る舞いを表すので動詞を使用します。
1.
public
class
Car {
2.
private
String name ;
3.
public
void
run( ) {
4.
System.out.println(
this
.name +
"が走り出しました。"
);
5.
}
6.
}
1.
//複数の単語をつなげる時は、単語の区切り文字も大文字にします。
2.
public
class
ItemBean {
3.
private
String name ;
4.
private
int
id ;
5.
public
void
setId(
int
id ) {
6.
this
.id = id ;
7.
}
8.
}