Javaの授業 10 [ クラスとオブジェクト ]
クラスとオブジェクト
※Javaを学ぶ序盤での最大の難関※
設計書からペンを作る(厳密には間違えた説明。初心者向け)
例と用語の関係①
設計書 →クラス
ペン →オブジェクト
Javaでは設計書からペンを作ることをインスタンス化と呼ぶ。
(ペンはオブジェクトやインスタンスと呼ばれる)
ペンには色やペンの太さが存在。
このようなペン毎の特徴をJavaではフィールドと呼んでいます
例と用語の関係②
オブジェクトの特徴 ⇒ フィールド
オブジェクトができること ⇒メソッド
実際の記述
public class クラス名{
フィールド宣言;
コンストラクタ宣言{
}
メソッド宣言{
}
}
※ 今後はmainメソッドのあるファイルとは別管理のファイルで作成
クラスの宣言例
-------------------------------------------------
public class Pen{
String color;
//フィールド
public Pen{ //コンストラクタ
}
public void draw(){ //メソッド
}
}
-------------------------------------------------
クラスの利用
クラス名 変数名 = new クラス名();
-------------------------------------------------
public class Execute{
public static void main(String[] args){
Pen pen = new Pen(); //インスタンス化
pen.draw(); //penクラスのdrawメソッドを使う
}
}
-------------------------------------------------
まとめ
・クラス 設計書にあたるもの。まず最初に作る必要がある。
・オブジェクト(インスタンス)
設計書から実際に使える形にしたもの。
インスタンスやオブジェクトと呼ばれる。
・フィールド オブジェクトの特徴を示す。
ポイントは同じ設計書から作られていても
別の状態となりえること。
・メソッド オブジェクトができること(オブジェクトへの操作)
基本的にはオブジェクトの操作はすべて
メソッドを経由することが基本思想となっている。
・コンストラクタ
オブジェクトを作成した時に一番最初に実行する「メソッド」
一番わかりにくい特徴を持つため追々説明。
例、Pen
-------------------------------------------------
Pen.java : Penのクラスファイル(ペンの設計書)
-------------------------------------------------
public class Pen {
//※フィールドはメソッドには含まれず、classに含まれる。
String color; //色を示すフィールド
String size; //太さを示すフィールド
//※コンストラクタの名前はclassと同じ。
classに含まれる。
戻り値がない。
//コンストラクタ:引数無し
public Pen() {
color = "黒";
size = "普通";
}
//コンストラクタ:引数有
public Pen(String penColor, String penSize) {
color = penColor;
size = penSize;
}
//メソッド : 絵を描く
public void draw() {
System.out.println("ペンの状態");
System.out.println("ペンの色 ;" + color);
System.out.println("ペンの太さ:" + size);
System.out.println("絵を描きました。");
}
}
-------------------------------------------------
Execute.java : 実行クラス(ペンを使って絵を描く)
-------------------------------------------------
public class Execute {
public static void main(String[] args) {
Pen pen1 = new Pen();
//ペン①⇒特に指定無く、設計書からペンを製造する
Pen pen2 = new Pen("黒", "太め");
//ペン②⇒色:黒 太さ:太め を指定してペンを製造する
Pen pen3 = new Pen("赤", "細め");
//ペン③⇒色:赤 太さ:細め を指定してペンを製造する
Pen pen4 = new Pen("青", "極細");
//ペン④⇒色:青 太さ:極細 を指定してペンを製造する
pen1.draw(); //ペン①を利用して絵を描く
pen2.draw(); //ペン②を利用して絵を描く
pen3.draw(); //ペン③を利用して絵を描く
pen4.draw(); //ペン④を利用して絵を描く
}
}
-------------------------------------------------
Pen.javaとExecute.javaの両方をコンパイル、Executeを実行。
(Execute.javaをコンパイルすると自動でPen.javaもコンパイルされる)
部分解説。
① Pen pen1 = new Pen(); pen1のインスタンス化。
pen1という箱を用意。(変数宣言)
この時、大きな枠を意識、その中にフィールドの内容を示す枠①を書く。
コンストラクタを見る。()なので引数なし。
引数なしのコンストラクタのフィールド状態を書き込む。
※pen1という変数はcolor = "黒" , size = "普通"の特徴を持つPen。
Javaの授業 [ 応用課題1 ]
選択肢から選ぶ系の問題は割愛。
実践問題。
次の条件を満たすプログラムを作成しなさい。
・ if 文と論理演算を使用すること。
・ for 文または while 文を使用すること。
・メソッドを1つ以上作成すること(mainメソッドを除く)。
・配列を使用すること。
内容はなくてもいいからとにかく作成すればいいらしいが
余計に何を作ったらいいのかわからないという+q+
で、最終的に提出したのはこちら。
------------------------------------------
import java.io.*;
public class Ouyou1{
public static void main(String[] args){
int[] month ={
0,31/*1月*/,28/*2*/,31/*3*/,30/*4*/,
31/*5月*/,30/*6*/,31/*7*/,31/*8*/,
30/*9月*/,31/*10*/,30/*11*/,31/*12*/
//各月の日数
};
hantei(month);
}
public static void hantei(int[] m) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("1月1日を土曜日として日付に対応した曜日を表示します。");
System.out.println("月の数字を入力して下さい(1~12)");
String line = reader.readLine();
int a = Integer.parseInt(line);
int sum = 0;
int i = 0;
if (1 > a || a > 12){
System.out.println("1~12の間で入力してください");
} else {
//前月までの合計日数
while( i < a ){
sum += m[i];
i++;
}
//月初の曜日判定
int h = sum % 7;
System.out.println("日にちを入力して下さい");
String line2 = reader.readLine();
int n = Integer.parseInt(line2);
if (0 >= n || n > m[a]){
System.out.println(a + "月にその日にちはありません。");
} else {
//日付の曜日判定
switch ((n + h) % 7) {
case 0:
System.out.println("「金曜日」");
break;
case 1:
System.out.println("「土曜日」");
break;
case 2:
System.out.println("「日曜日」");
break;
case 3:
System.out.println("「月曜日」");
break;
case 4:
System.out.println("「火曜日」");
break;
case 5:
System.out.println("「水曜日」");
break;
default:
System.out.println("「木曜日」");
break;
}
}
}
} catch (IOException e){
System.out.println(e);
}catch (NumberFormatException e){
System.out.println("数字を入力してください");
}
}
}
-------------------------------------------------------
無事OK貰いました。
で、次が最難関[ クラスとオブジェクト ]とのこと。
そこまで予習して後は進まずに復習で授業をひたすら待つ構え-w-