クラスメソッド

計算機プログラミングI
第3回
•プリミティブ値
•クラスメソッド
•クラス変数
•式と演算
•変数の利用
1
計算機プログラミングI (増原) 2003年度
プリミティブ値
(3.1-2)
値には2種類ある
• オブジェクト値 ― 亀・ウィンドウ・色・・・
• プリミティブ値 (p.23の表)
–primitive = 原始的~はじめから用意されている値
(cf. オブジェクトは「定義」して「作る」値)
–用意されているもの: 整数・小数・真偽値・文字
(cf. 文字列はプリミィブでない)
–型 (値の種類) も予め決っている:
int, double, boolean, char, …
2
計算機プログラミングI (増原) 2003年度
値と変数
「変数は値をしまう箱」である
• int x = 100;
int y = y;
x = 200;
• Turtle m = new Turtle(200,200,0);
Turtle m1 = m;
m.moveTo(100,100,0);
このときのxとyの値は?
このときの m.getY() と
m1.getY() の値は?
3
計算機プログラミングI (増原) 2003年度
値と変数
「変数は値をしまう箱」である
• int x = 100;
int y = y;
x = 200;
• Turtle m = new Turtle(200,200,0);
Turtle m1 = m;
m.moveTo(100,100,0);
このときのxとyの値は?
200
100
x
このときの m.getY() と
m1.getY() の値は?
100
y
m
m1
x y
angle
color
4
計算機プログラミングI (増原) 2003年度
値と変数
「変数は値をしまう箱」である
オブジェクト値の
場合、変数に
しまわれるのは
「オブジェクトの
居場所」である
 「参照」という
• Turtle m = new Turtle(200,200,0);
Turtle m1 = m;
m.moveTo(100,100,0);
このときの m.getY() と
m1.getY() の値は?
m
m1
x y
angle
color
5
計算機プログラミングI (増原) 2003年度
クラスメソッド (3.3)
• メソッドは「オブジェクトに対する指令」
であった。では、指令を出す対象がいない
場合は?
例:
–2の平方根
–xとyの大きい方
 クラスメソッド
― 誰に対するでもない指令
6
計算機プログラミングI (増原) 2003年度
クラスメソッド (3.3)
• クラスメソッドの呼び出しの例
Turtle.speedAll(1); // 全ての亀の速度を1にする
System.exit(0);
// プログラムを終了させる
• オブジェクトに対するメソッド呼び出しとの区別
m1.fd(10); //オブジェクトのメソッド呼び出し
Turtle.speedAll(1); //クラスメソッドの呼び出し
文法:
【式】.【メソッド名】(【式】,…)
【クラス名】. 【メソッド名】(【式】,…)
(普通は)大文字で始まる名前
7
計算機プログラミングI (増原) 2003年度
クラスメソッド (3.3)
• どうやってクラスメソッドを見つけるか?
 仕様書を見る
–“static” と先頭に書かれているものが
クラスメソッド
–例
• 教科書p.12
• Java言語標準ライブラリの仕様書
8
計算機プログラミングI (増原) 2003年度
クラス変数
• クラスに1つずつしかない変数
• インスタンス変数との区別
d = d / 2;
//(ローカル)変数
m1.kameScale=1;
//インスタンス変数
Turtle.withKameAll = false; //クラス変数
文法:
【変数名】
【式】.【変数名】
【クラス名】. 【変数名】
計算機プログラミングI (増原) 2003年度
9
クラス変数の使い途
• 数学定数の利用: Math.PI ―― 円周率
• 画面への出力
「“x=3”と
インスタンスメソッドの呼び出し
表示せよ」
System.out.println(“x=” + x);
ターミナルウィンドウを
表わすオブジェクトを
しまうクラス変数
“x=”という文字列と
x の値をつなげる
(xが3のときは
“x=3” になる等)
System.out
10
計算機プログラミングI (増原) 2003年度
クラス変数の使い途
import java.awt.Color;
public class T23withPrint {
public static void main(String[] args){
int d = 100, x, y, a;
TurtleFrame f = new TurtleFrame();
Turtle m = new Turtle(200,300,0);
f.add(m);
m.fd(d);
x = m.getX()
y = m.getY();
プログラムの意味に
関する誤りを見つける
• 代入した前後で
a = m.getAngle() - 45;
System.out.println(“a= “ + a); 変数の値を表示する
Turtle m1 = new Turtle(x, y, a);
f.add(m1);
m.kameColor = new Color(0,255,255);
m.kameScale = m.kameScale * 2;
m.rt(45);
System.out.println(“d= “ + d);
• 式の値を表示することも
d = d / 2;
System.out.println(“d= “ + d); できる
m.fd(d);
m1.fd(d);
System.out.println(“m1.getX()= “ + m1.getX());
}
}
11
計算機プログラミングI (増原) 2003年度
式 (3.7)
式の例
• 180
•x
•d/2
• x*x + y*y
• (x*x + y*y) / 2
• Math.PI
• Math.random()
• m.getX()
• m.getX() / 2
• new Turtle()
• (new Turtle()).getX()
• m.fd(10)
• “x =”
• true
• “x=” + x
• “m=” + m
• “x=” + x + “ m =” + m
12
計算機プログラミングI (増原) 2003年度
式 (3.8.1)
演算の例
• i=i+1
• i++
• x=10
• y = 3 + (x=10)
• (int)3.14
•3/2
• (double) 3 / 2
• ((double) 3) / 2
• (double) (3 / 2)
• Math.random()*100
• int x;
• x = Math.random()*100;
• x = (int)(Math.random()
* 100);
• m.fd(100)
• m.fd(3.14)
• m.fd((int)(3.14 * 100))
13
計算機プログラミングI (増原) 2003年度
式 (3.8.3)
• true
• false
• 1==0
•2<3
• 2 <= 2
• 1 != x
• !(1 == x)
• -3 <= x && x <= 3
• -3 <= x <= 3
• y % 4 == 0
• y % 3 == 0 || y % 4 == 0
• (y > 0 && y % 3 == 0)
|| y % 4 == 0
14
計算機プログラミングI (増原) 2003年度
変数の使い方 (例)
int 長さ = 100, 角度 = 30;
・・・長さと角度を使って図形を描く・・・
長さ = 80; 角度 = 40;
・・・長さと角度を使って図形を描く・・・
長さ = 30; 角度 = 50;
コ
ピ
ー
・・・長さと角度を使って図形を描く・・・
15
計算機プログラミングI (増原) 2003年度