1
プログラミング言語
3
今日の配布物
片面の用紙
1
枚
今日の課題が書かれています。
3/33
今日やること
http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/
にアクセスすると、教材があります。
2007年10月08日分と書いてある部分が、本日の教材です。本日の内容
前回の課題の解答
オブジェクト指向プログラミング(その
1
)
画面への文字の出力
5/33
前回の課題
その1:講義資料の
pdf ファイルにあった、
Sample02a.java をコンパイル、実行しなさい。
•
実行結果
•
何故、そのような値が出力されたか
を報告しなさい。
public class Sample02a{
public static void main(String[] args){ int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9}; t1[1]=1; System.out.println(t1[0]); System.out.println(t1[1]); System.out.println(t2[3]); }
public class Sample02a{
public static void main(String[] args){
int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9}; t1[1]=1; System.out.println(t1[0]); System.out.println(t1[1]); System.out.println(t2[3]); }
解説
実行結果
コンソールに と表示される。 0 1 37/33
public class Sample02a{
public static void main(String[] args){ int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9}; t1[1]=1; System.out.println(t1[0]); System.out.println(t1[1]); System.out.println(t2[3]); } }
public class Sample02a{
public static void main(String[] args){
int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9}; t1[1]=1; System.out.println(t1[0]); System.out.println(t1[1]); System.out.println(t2[3]); } }
解説
実行結果
整数型の配列 は、0に初期化 されるので、0 が出力される。 1を代入 したので、 1が出力 される。 t2宣言時に値を代入 しているので、 3が出力される。前回の課題
その2:t2 の配列の要素をすべて画面に出力する
プログラムを書きなさい。
ここで、while, for,
do~while のうち、
9/33
public class Sample02a{
public static void main(String[] args){ int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9}; int int int int i;i;i;i; for(i=0;i<=9;i++){ for(i=0;i<=9;i++){ for(i=0;i<=9;i++){ for(i=0;i<=9;i++){ System.out. System.out. System.out.
System.out.printlnprintlnprintlnprintln(t2[i]);(t2[i]);(t2[i]);(t2[i]); } } } } } }
public class Sample02a{
public static void main(String[] args){
int[] t1 = new int[10];
int[] t2 = {0,1,2,3,4,5,6,7,8,9}; int int int int i;i;i;i; for(i=0;i<=9;i++){ for(i=0;i<=9;i++){ for(i=0;i<=9;i++){ for(i=0;i<=9;i++){ System.out. System.out. System.out.
System.out.printlnprintlnprintlnprintln(t2[i]);(t2[i]);(t2[i]);(t2[i]); } } } } } }
解説
for
文を使った場合
配列のサイズは 10なので、0から 9まで繰り返す。 for文で 使う為に、 変数iを 宣言。 t2[i]の値を出力。 while や do~while を使った場合の例は webに挙がっています。オブジェクト指向プログラミング
11/33
オブジェクト指向プログラミング
C
言語は、関数を駆使して記述する言語だった。
基本的に、全部の命令は関数。
Java
は、オブジェクトを駆使して記述する言語。
すべてオブジェクト。
関数的に利用できるモノもあるけど
… …
。
クラス、インスタンス、メソッド
→
次のページから解説
理解するのは、結構、面倒です。
オブジェクトって何?
直感編
概念とか設計図の世界 実物(オブジェクト)の世界 中身 = 水色の液体 できること • 中身を出す • 中身を入れる缶
B
中身 = オレンジ色の液体 できること • 中身を出す • 中身を入れる缶
A
缶
中身 = ?? できること • 中身を出す • 中身を入れる 何も言われないと 空である13/33
オブジェクトって何?
直感と
Java
編
概念とか設計図の世界 実物(オブジェクト)の世界 中身 = 水色の液体 できること • 中身を出す • 中身を入れる缶
B
中身 = オレンジ色の液体 できること • 中身を出す • 中身を入れる缶
A
缶
中身 = ?? できること • 中身を出す • 中身を入れる 何も言われないと 空である Javaだと インスタンス と呼ぶ クラス 変数 コンストラクタ メソッド インスタンス インスタンスオブジェクトって何?
Java
編
概念とか設計図の世界 実物(オブジェクト)の世界 contents = 20; メソッド • pushContents(); • popContests();Data2
contents = 10; メソッド • pushContents(); • popContests();Data1
Test
int contents;メソッド • pushContents(); • popContests(); contests=0; Javaだと インスタンス と呼ぶ 変数 コンストラクタ
15/33
オブジェクト指向プログラミング
main
インスタンスA インスタンスB インスタンスCインスタンス間で
データをやりとりする。
それぞれのインスタンス
が処理を行う。
関数のように 使えるクラス例:
ここから先は、覚える事が一杯です。
17/33
Java
のプログラムの構造
プログラムは、1つ以上のクラスを持 ちます。 クラスは、変数とコンストラクタ、メソッ ドを伴っています。 それぞれ、省略可能です。 メソッド main を持つクラスが、必ず 必要です。 プログラムのファイル名と、mainを持 つクラス名は、一致している必要が あります。 慣習として、クラス名は大文字から、 メソッド名は小文字から初めます。 クラス 変数の宣言 コンストラクタ メソッド クラス 変数の宣言 コンストラクタ メソッド プログラムサンプル例1
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
public class Hello {
public static void main(String[] args) { System.out.println("Hello, world!"); }
}
Hello.java
の場合:
mainを持っているクラス名がHelloなので、ファイル名はHello.java
クラスが持っている変数は無し
コンストラクタも無し
19/33
やりたいこと
1.
クラスを書く
2.
インスタンスを生成する
3.
実際に使ってみる
修飾子について
修飾子というのが、これから出てきます。
それぞれの変数やメソッドを、どこから利用でき
るかを指定します。
public : すべてのクラスのメソッドからアクセス可能 private:同じクラスのメソッドからのみアクセス可能 省略したら、同じパッケージ内でpublicになる publicな変数 privateな変数 publicなメソッド private Data1 Data3 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる21/33
クラスの書き方
class Test { } class Test { } 必要なら修飾子を書く(クラスの修飾子については次回以降) class名を書く int test01; コンストラクタを書くが、今回はなし。 次回以降に詳細。public void push(int test03){
System.out.println(test01 + test03); } 変数を宣言する メソッドを書く。 書き方は 後のスライド。 classと書く 変数やメソッドを クラスのメンバと言います 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる
変数の宣言の書き方
int test01;
static int test02;
public int test04;
int test01;
static int test02; public int test04;
型を書く 変数名を書く 必要ならstaticと書く。 説明は次回以降。
修飾子と
static
以外は、
C
言語の書き方に似ています。
修飾子を書く 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる23/33
メソッドの書き方
public void push(int test03){
System.out.println(test01 + test03);
}
public void push(int test03){
System.out.println(test01 + test03); } 返値の型を書く メソッド名を書く メソッドの中でのみ使用する 変数の定義を書く 引数を書く
修飾子以外は、
C
言語の関数の書き方に似ています。
必要ならstaticと書く。 修飾子を書く 返値が有る場合は、Cと同様、return で返す 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみるインスタンスの生成
その
1
1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる宣言と生成を行う必要がある。
宣言の仕方:
生成の仕方:
例えば、クラス
Test
のインスタンス
dt
を生成するなら、
クラス名
インスタンス名;
クラス名
インスタンス名;
インスタンス名
= new クラス名();
インスタンス名
= new クラス名();
Test dt;
dt
= new Test();
Test dt;
dt
= new Test();
インスタンスの生成
その
2
宣言と生成を
1
行で書くこともできる。
たとえば、クラス
Test
のインスタンス
dt
を生成するなら、
クラス名
インスタンス名
= new クラス名();
クラス名
インスタンス名
= new クラス名();
Test dt
= new Test();
Test dt
= new Test();
1. クラスを書く
2. インスタンスを生成する
使い方
インスタンスのメンバにアクセスするには、
とする。
たとえば、クラス
Test
に整数型の変数
test01
という変数
があって、クラス
Test
のインスタンス
dt
を生成した場合、
としてアクセスできる。
インスタンス名
.
メンバ名
インスタンス名
.
メンバ名
1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみるdt.test01
dt.test01
class Test{
int test01=2;
public void multiple(int test03){
System.out.println(test01 * test03); }
}
public class Sample03a{
public static void main(String[] args){ Test dt = new Test();
dt.multiple(100); dt.test01=5; dt.multiple(100); } } class Test{ int test01=2;
public void multiple(int test03){
System.out.println(test01 * test03); }
}
public class Sample03a{
public static void main(String[] args){ Test dt = new Test();
dt.multiple(100); dt.test01=5; dt.multiple(100); } }
サンプルプログラム
クラスTestの インスタンスdtを生成 test01=2; multiple(); dt メソッドを、引数100 を渡して実行 インスタンスdtの変数 test01に代入 test01=5; multiple(); dt test01=2; multiple(); Test クラスTestの詳細29/33
println
メソッドと
メソッド
標準出力に文字を出力するメソッド
System.out.print()
出力した後、改行しない。
System.out.println()
出力した後、改行する。
改行する・しないの違いがあるだけで、他は一緒。
基本的な使い方
その
1
文字列
Test Data
を表示する例:
System.out.println("Test Data"); System.out.println("Test Data");int
型の変数
t
の値を表示する例:
""で文字を囲む System.out.println(t); System.out.println(t); そのまま、変数名を書けば OK値
100
を表示する例:
System.out.println(100); System.out.println(100); C言語と違う。 Cの場合 printf("%u¥n",t);31/33
基本的な使い方
その
2
文字列
Test Data
と整数型の変数
t
の値を表示する例:
System.out.println("Test Data " + t); System.out.println("Test Data " + t); + 記号で連結できるt+10
の値を表示する例:
System.out.println(t + 10); System.out.println(t + 10); + は演算と解釈される。 Test Data 10 出力結果(t=10の場合): 20 出力結果(t=10の場合):色んな例
文字列と変数と値が
+
で並んでいる例:
System.out.println("Test Data " + t + 10); System.out.println("Test Data " + t + 10); Test Data 10 10 出力結果(t=10の場合): 2つの+は、どちらも 連結と解釈される文字列と変数と値が
+
で並んでいる例:
System.out.println("Test Data " + (t + 10)); System.out.println("Test Data " + (t + 10)); Test Data 20 出力結果(t=10の場合): 連結 括弧おかげで、33/33
public class Sample03b{
public static void main(String[] args){ int t=10; System.out.println("Test Data"); System.out.println(t); System.out.println(t+10); System.out.println("Test Data" + t); System.out.println("Test Data " + t + 10); System.out.println("Test Data " + (t + 10)); } }
public class Sample03b{
public static void main(String[] args){
int t=10; System.out.println("Test Data"); System.out.println(t); System.out.println(t+10); System.out.println("Test Data" + t); System.out.println("Test Data " + t + 10); System.out.println("Test Data " + (t + 10)); } }
サンプルプログラム:
ファイル名は Sample03.java誤植のおもひで
21ページ目 上から2行目:
誤: 必要ならstaticと書く