平 成 25 年 度 静 岡 県 立 大 学 公 開 講 座 Javaで 学 ぶプログラミング 基 礎 第 1 回 Java 言 語 の 概 要 第 2 回 Javaプログラミングの 基 礎 第 3 回 コンソール アプリケーション 作 成 第 4 回 Androidアプリケーション 作 成 JavaとJava 仮 想 マシン Javaとは Sun Microsystems によって 開 発 された オブジェクト 指 向 言 語 プラットホーム 非 依 存 一 度 ソースを 書 くと UNIXでもWindowsでも 動 く 文 法 は CやC++から 多 くを 引 き 継 いでいる ライブラリも 充 実 している ネットワークやセキュリティに 配 慮 されている 配 布 されているファイル Java 実 行 環 境 (Java Runtime Environment; JRE) Javaのプログラムを 実 行 するのに 必 要 自 分 の 機 種 (WindowsとかLinuxとか) 用 が 必 要 も 無 料 で 配 布 されています Java 開 発 キット (Java Development Kit; JDK) Javaの 基 本 的 なプログラムに 必 要 自 分 の 機 種 (WindowsとかLinuxとか) 用 が 必 要 も 無 料 で 配 布 されています Javaのプログラムソース テキストファイル public class Hello { public static void main(string[] args) { System.out.println("Hello, world!"); それぞれの 行 が 何 を 意 味 しているのかは 徐 々に やっていきます プラットホーム 非 依 存 C 言 語 の 場 合... プログラムを 書 く UNIX 用 Windows Linux その 他 色 んな 環 境 で 動 かしたい! それぞれ 用 に 書 く 必 要 Javaの 場 合... プログラムを 書 く どれでも 動 く Java Java Java 実 行 環 境 実 行 環 境 実 行 環 境 Windows Linux その 他
C 言 語 でのプログラム 作 成 Javaでのプログラム 作 成 その1 1プログラムを 書 く のソース のソース 1プログラムを 書 く Javaのプログラムのソース 2コンパイルする の Cコンパイラ の Cコンパイラ 2コンパイルする の Javaのコンパイラ の Javaのコンパイラ プログラマの 領 域 3 実 行 する 実 行 ファイル 実 行 Windows 実 行 ファイル 実 行 Linux プログラマの 領 域 3 実 行 する Java 仮 想 マシン 用 のバイトコード の Java 実 行 環 境 上 で 実 行 Windows の Java 実 行 環 境 上 で 実 行 Linux Javaでのプログラム 作 成 その2 Java 仮 想 マシン 1プログラムを 書 く 2コンパイルする Windowsで 書 いて 3 Linuxで 実 行 する実 行 とかもできる Javaのプログラムのソース の Javaのコンパイラ Java 仮 想 マシン 用 のバイトコード の Java 実 行 環 境 上 で 実 行 Windows の Javaのコンパイラ の Java 実 行 環 境 上 で 実 行 Linux Java 仮 想 マシンは その 名 の 通 り 仮 想 の 計 算 機 Javaバイトコードは Java 仮 想 マシン 上 で 動 作 する Javaコンパイラは バイトコー ドを 生 成 Java 実 行 環 境 は バイトコー ドを 各 プラットホーム 用 に 翻 訳 して 実 行 Javaのプログラムのソース コンパイラ Java 仮 想 マシン 用 の バイトコード 実 行 環 境 Windows コンパイラ 実 行 環 境 Linux コンパイルと 実 行 コンパイルと 実 行 その1 1プログラムを 書 く Javaのプログラムのソース テキストエディタとかで 書 く 拡 張 子 は.java コンパイラ つまり test.java のように なる Java 仮 想 マシン 用 の バイトコード コンパイラ 実 行 環 境 実 行 環 境 Windows Linux
コンパイルと 実 行 その2 2コンパイル コンソールで 次 のようにする javac ファイル 名 test.java をコンパイルしたい なら javac test.java 拡 張 子 が.class のファイルが できる Javaのプログラムのソース コンパイラ Java 仮 想 マシン 用 の バイトコード 実 行 環 境 Windows コンパイラ 実 行 環 境 Linux 3 実 行 コンパイルと 実 行 その3 コンソールで 次 のようにする java 拡 張 子 無 しのファイル 名 test.class を 実 行 したいなら java test Javaのプログラムのソース コンパイラ Java 仮 想 マシン 用 の バイトコード 実 行 環 境 Windows コンパイラ 実 行 環 境 Linux 演 習 1の 内 容 演 習 1:コンパイルと 実 行 Hello World サンプルプログラム Hello World を 入 力 し コンパイ ル 実 行 を 行 います どのようなファイルができるか 確 認 していきます 流 れ: 1. ファイルをおくフォルダの 作 成 2. テキストエディタで hello.java を 入 力 作 成 3. コマンドプロンプト 上 で hello.javaをコンパイル 4. コマンドプロンプト 上 で hello を 実 行 ソースを 置 く 場 所 の 作 成 1. デスクトップで 右 クリックし コンテクストメニューで [ 新 規 作 成 ] [フォルダ] とし Java というフォルダを 作 成 コマンドプロンプトの 立 ち 上 げ 1. 左 下 のスタートボタン を 押 す 2. ファイルの 検 索 でcmdと 入 力 出 てきたcmdを 実 行 黒 いコマンドプロンプトが 立 ち 上 がります 3. コマンドプロンプト 上 で cd Desktop Java と 入 力 してEnterキーを 押 す プロンプトが c: Users ユーザー 名 Desktop Java となっているか 確 認 しましょう
ソースの 記 述 1. テキストエディタでサンプルプログラム1を 書 きます 実 習 室 には テキストエディタとしてサクラエディタ がインストールされています 2. Hello.java というファイル 名 で 保 存 します Hello.txtではないので 注 意 しましょう public class Hello { public static void main(string[] args) { System.out.println("Hello, world!"); コンパイル 1. フォルダ Java 内 に Hello.java があることを 確 認 しま しょう 2. コマンドプロンプトで 次 を 入 力 実 行 します javac Hello.java エラーが 出 た 場 合 は ソースに 誤 入 力 がないかを 確 認 してみてください 3. フォルダ Java 内 に Hello.class ができたことを 確 認 しましょう 実 行 1. コマンドプロンプトで 次 を 入 力 実 行 します java Hello 画 面 に Hello Worldと 出 ます 基 本 的 なデータ 型 Javaとデータと 変 数 処 理 するには 処 理 するものを 蓄 えておく 場 所 が 必 要 変 数 ものには 種 類 がある データの 型 Javaで 使 用 できるデータ 型 Javaで 使 用 できるデータ 型 boolean 型 : true または faulse char 型 : 16bitのUnicode 文 字 byte 型 : 8bit 符 号 付 き 整 数 short 型 :16bit 符 号 付 き 整 数 int 型 :32bit 符 号 付 き 整 数 long 型 :64bit 符 号 付 き 整 数 float 型 :32bit 浮 動 小 数 点 数 double 型 :64bit 浮 動 小 数 点 数
変 数 の 宣 言 変 数 とは " 値 を 保 存 しておく 箱 "のようなものです 入 れられるものの 種 類 が 決 まっています 最 初 に こういうのを 入 れる こういう 名 前 の 箱 を 使 う と いうことを 書 いておく 必 要 があります 宣 言 記 述 方 法 記 述 例 : 型 変 数 名,, 変 数 名 ; int roop; 変 数 の 代 入 参 照 変 数 に 値 を 保 存 することを 代 入 と 言 います = で 行 う 変 数 名 = 代 入 する 値 ; 例 : i = 10; 宣 言 の 時 に 同 時 に 値 を 代 入 することもできる int roop = 10; 変 数 に 保 存 している 値 を 参 照 したいとき( 使 用 したいと き)は 変 数 名 をそのまま 記 述 します 演 算 その1 色 々な 演 算 子 が 使 用 できる 算 術 演 算 子 : 論 理 演 算 子 : x + y : x と y の 和 A && B :AかつB x - y : x と y の 差 A B :AもしくはB x * y : x と y の 積!A :Aの 否 定 x / y : x を y で 割 った 商 x % y : x を y で 割 った 余 り 関 係 演 算 子 : x < y : x < y のとき 真 (1) さもなければ 偽 (0) x <= y : x <= y のとき 真 (1) さもなければ 偽 (0) x > y : x < y のとき 真 (1) さもなければ 偽 (0) x >= y : x > y のとき 真 (1) さもなければ 偽 (0) x == y : x = y のとき 真 (1) さもなければ 偽 (0) x!= y : x!= y のとき 真 (1) さもなければ 偽 (0) 演 算 その2 その 他 にも ビット 演 算 を 行 う 演 算 子 とかがある x & y : x と y のビットごとのAND x y : x と y のビットごとのOR x ^ y : x と y のビットごとのXOR x << y : x を y ビットだけ 左 シフト x >> y : x を y ビットだけ 算 術 右 シフト x >>> y : x を y ビットだけ 論 理 右 シフト 演 算 その3 インクリメントとディクリメント インクリメント 増 加 ディクリメント 減 少 1 : x++ : xの 値 を 評 価 後 インクリメント 2 : ++x : xの 値 をインクリメント 後 評 価 3 : x-- : xの 値 を 評 価 後 ディクリメント 4 : --x : xの 値 をディクリメント 後 評 価 上 の 意 味 1 : y=x++ : y=x; x=x+1; : 値 を 渡 してから xに1を 加 える 2 : y=++x : x=x+1; y=x; : xに1を 加 えてから 値 を 渡 す 3 : y=x-- : y=x; x=x-1; : 値 を 渡 してから xから1を 引 く 4 : y=--x : x=x-1; y=x; : xから1を 引 いてから 値 を 渡 す 代 入 演 算 子 加 算 代 入 : 整 数 型 の 変 数 i に2を 加 えて i に 代 入 したい i+=2; 他 にも 減 算 代 入 (-=) 乗 算 代 入 (*=) 除 算 代 入 (/=) 等 一 通 りあります
printlnとprint 標 準 出 力 への 出 力 標 準 出 力 に 文 字 を 出 力 する System.out.print() 出 力 した 後 改 行 しない System.out.println() 出 力 した 後 改 行 する 改 行 する しないの 違 いがあるだけで 他 は 一 緒 基 本 的 な 使 い 方 その1 文 字 列 Test Data を 表 示 する 例 : System.out.println("Test Data"); int 型 の 変 数 t の 値 を 表 示 する 例 : System.out.println(t); そのまま 変 数 名 を 書 けば OK 値 100 を 表 示 する 例 : System.out.println(100); ""で 文 字 を 囲 む そのまま 書 くと "100"と 解 釈 して 出 力 してくれる 基 本 的 な 使 い 方 その2 文 字 列 Test Data と 整 数 型 の 変 数 t の 値 を 表 示 する System.out.println("Test Data " + t); 出 力 結 果 (t=10の 場 合 ): Test Data 10 t+10の 値 を 表 示 する 例 : System.out.println(t + 10); 出 力 結 果 (t=10の 場 合 ): 20 + 記 号 で 連 結 できる + は 演 算 と 解 釈 される 色 んな 例 文 字 列 と 変 数 と 値 が+で 並 んでいる 例 : System.out.println("Test Data " + t + 10); 出 力 結 果 (t=10の 場 合 ): 2つの+は どちらも Test Data 10 10 連 結 と 解 釈 される 文 字 列 と 変 数 と 値 が+で 並 んでいる 例 : System.out.println("Test Data " + (t (t + 10)); 出 力 結 果 (t=10の 場 合 ): Test Data 20 連 結 括 弧 おかげで 演 算 として 解 釈 ファイル 名 は Sample02.java public class Sample02{ public static void main(string[] args){ int t=10; 演 習 2: サンプルプログラム2 System.out.println("Test Data"); System.out.println(t); System.out.println("Test Data" + t); System.out.println(t+10); t=100*10; System.out.println(t+10);
オブジェクト 指 向 プログラミング オブジェクト 指 向 プログラミング ( 基 本 編 ) 複 数 のオブジェクトがある それぞれのオブジェクトが 処 理 を 行 う オブジェクト 間 でデータをやりとりする Javaと オブジェクト 指 向 プログラミング Javaは オブジェクトを 駆 使 して 記 述 する 言 語 基 本 多 くがオブジェクト インスタンス 次 のページから 解 説 理 解 するのは 結 構 面 倒 です C 言 語 は 関 数 を 駆 使 して 記 述 する 言 語 基 本 的 に 全 部 の 命 令 は 関 数 設 計 図 と 実 物 オブジェクトの 動 作 を どこかで 書 かないと... 設 計 図 を 書 いて それに 基 づいて 生 成 しよう 同 じ 動 作 をする オブジェクトも 簡 単 に 作 れる オブジェクトって 何? 直 感 編 概 念 とか 設 計 図 の 世 界 缶 中 身 =?? 何 も 言 われないと 最 初 は 空 である できること 中 身 を 出 す 中 身 を 入 れる 缶 A 缶 B 実 物 (オブジェクト)の 世 界 中 身 = オレンジ 色 の 液 体 できること 中 身 を 出 す 中 身 を 入 れる 中 身 = 水 色 の 液 体 できること 中 身 を 出 す 中 身 を 入 れる オブジェクトって 何? 直 感 とJava 編 概 念 とか 設 計 図 の 世 界 変 数 缶 中 身 =?? コンストラクタ 何 も 言 われないと 空 である できること 中 身 を 出 す 中 身 を 入 れる 缶 A 缶 B Javaだと インスタンス と 呼 ぶ 実 物 (オブジェクト)の 世 界 インスタンス 中 身 = オレンジ 色 の 液 体 できること 中 身 を 出 す 中 身 を 入 れる 中 身 = 水 色 の 液 体 できること 中 身 を 出 す 中 身 を 入 れる インスタンス
オブジェクトって 何? Java 編 概 念 とか 設 計 図 の 世 界 変 数 Test コンストラクタ int contents; contests=0; popcontests(); Data1 Data2 実 物 (オブジェクト)の 世 界 インスタンス contents = 10; popcontests(); contents = 20; Javaだと インスタンス と 呼 ぶ popcontests(); インスタンス Javaのプログラムの 構 造 1つ 以 上 のを 持 ちます は 変 数 とコンストラクタ メ ソッドを 伴 っています 省 略 可 能 です main を 持 つが 必 ず 必 要 です プログラムのファイル 名 と mainを 持 つ 名 は 一 致 している 必 要 があります この main が 実 行 されます 慣 習 として 名 は 大 文 字 から 名 は 小 文 字 から 初 めます プログラム 変 数 の 宣 言 コンストラクタ 変 数 の 宣 言 コンストラクタ サンプル 例 1 Hello.java の 場 合 : public class Hello { mainを 持 っている 名 がHello なので ファイル 名 はHello.java が 持 っている 変 数 は 無 し コンストラクタも 無 し public static void void main(string[] args) { System.out.println("Hello, world!"); はmainだけ の 記 述 と インスタンスの 生 成 やりたいこと 1. を 書 く サンプルプログラム2を 作 りながら 見 ていきましょう 外 観 3つの 部 分 01 行 目 03~14 行 目 17~26 行 目 01: 01: 02: 02: 03: 03: 04: 04: 05: 05: 06: 06: 07: 07: 08: 08: 09: 09: 10: 10: 11: 11: 12: 12: 13: 13: 14: 14: 15: 15: 16: 16: 17: 17: 18: 18: 19 19 20: 20: 21: 21: 22: 22: 23: 23: 24: 24: 25: 25: 26: 26: 27: 27: import import java.lang.string; class class HelloClass{ String String name; name; int introop=1; HelloClass(String x){ x){ name=x; public public void void hello(){ hello(){ System.out.println(this.name + ":Hello ":Hello World"); public public class class HelloWorld{ public public static static void void main(string[] args){ args){ int inttestnum=5; HelloClass dt01 dt01 = new new HelloClass("OB01"); HelloClass dt02 dt02 = new new HelloClass("OB02"); dt01.hello(); dt02.hello();
書 く 際 のお 約 束 サンプルプログラムを 見 ると 各 行 の 末 尾 に ; がある と 思 います このように Javaは 1 文 の 末 尾 に ; を 書 きます 構 造 上 の 塊 を 示 すために { を 使 用 します "はここからここまで" "はここからここ まで" ということを 示 す 囲 まれているのをブロックと 呼 んだりします 修 飾 子 について 修 飾 子 というのが これから 出 てきます それぞれの 変 数 やを どこから 利 用 でき るかを 指 定 します public : すべてののからアクセス 可 能 private: 同 じのからのみアクセス 可 能 省 略 したら 同 じパッケージ 内 でpublicになる Data1 publicな 変 数 privateな 変 数 publicな privateな 1. を 書 く Data3 01 行 目 : パッケージのimport 03~14 行 目 : の 記 述 1. を 書 く Javaには すでに 多 くのが 準 備 されている つまり 1から 自 分 でわざわざ 書 く 必 要 はない パッケージという 形 でまとめられている どのパッケージを 使 うのかを 指 定 するときにimportを 使 用 する 書 き 方 : import パッケージ 名 ; 例 : 01: import java.lang.string; 3つの 部 分 に 分 けられる 変 数 の 宣 言 03: class HelloClass{ 04: String name; 05: int roop=1; コンストラクタ 06: 07: HelloClass(String x){ 08: name=x; 09: 10: 11: public void hello(){ 12: System.out.println(this.name + ":Hello World"); 13: 14: 03と14 行 目 : の 宣 言 1. を 書 く 04と05 行 目 : 変 数 の 宣 言 1. を 書 く 最 初 にclassと 書 き その 後 に 名 を 記 述 します 直 後 の 中 括 弧 の 間 に 実 際 の 中 身 を 書 きます 記 述 方 法 class の 名 前 { 中 略 記 述 例 : 03: class HelloClass{ 中 略 14: 変 数 とは " 値 を 保 存 しておく 箱 "のようなものです 入 れられるものの 種 類 が 決 まっています 最 初 に こういうのを 入 れる こういう 名 前 の 箱 を 使 う と いうことを 書 いておく 必 要 があります 宣 言 記 述 方 法 記 述 例 : 05: 型 変 数 名,, 変 数 名 ; int roop=1; 宣 言 と 同 時 に 値 を 代 入 する 場 合
11~13 行 目 1. を 書 く とは インスタンスに 対 する 操 作 のこと インスタンスが 何 をするかを 記 述 する 入 力 を 貰 い 何 か 処 理 をし 出 力 をする が 基 本 入 力 0~ 複 数 個 何 か 処 理 をする 出 力 0~1 個 11~13 行 目 の 書 き 方 1. を 書 く 入 力 の 個 数 文 だけ 書 く 次 のように 書 きます 修 飾 子 返 値 の 型 名 ( 引 数 1の 型 引 数 1){ 文 ; return 返 値 ; 出 力 がある 場 合 書 く 11: 12: 13: 入 力 出 力 public void hello(){ System.out.println(this.name + ":Hello World"); 07~09 行 目 コンストラクタ 1. を 書 く インスタンスを 生 成 するときに 自 動 的 に 実 行 される 返 値 のないのように 記 述 される コンストラクタの 名 前 は の 名 前 と 同 一 になります インスタンスを 生 成 するときに 渡 す 引 数 の 種 類 によって 使 用 するコンストラクタを 切 り 替 えることができます コンストラクタが 無 い 場 合 は 何 も 行 われない この 機 能 を 使 うと 柔 軟 に 初 期 値 とかを 設 定 できます 07~09 行 目 : コンストラクタの 書 き 方 1. を 書 く 返 値 の 無 いのように 書 きます 名 ( 引 数 1の 型 引 数 1){ 文 ; 入 力 の 個 数 文 だけ 書 く 06: 07: HelloClass(String x){ 08: name=x; 09: 10: 03: 07: 08: 09: 14: 17: 18: 20: 25: 26: コンストラクタの 実 行 : class HelloClass{ ( 略 ) HelloClass(String x){ name=x; ( 略 ) コンストラクタ インスタンス 生 成 時 の 引 数 は コンストラクタに 渡 される インスタンスが 生 成 され たときに 実 行 される public class HelloWorld{ public static void main(string[] args){ HelloClass dt01 = new HelloClass("OB01"); ( 略 ) 20,21 行 目 インスタンスの 生 成 その1 1. を 書 く 宣 言 と 生 成 を 行 う 必 要 がある 宣 言 の 仕 方 : 名 インスタンス 名 ; 生 成 の 仕 方 : インスタンス 名 = new 名 (); 例 えば HelloClass のインスタンス dt01 を 生 成 するなら HelloClass dt01; dt01 = new HelloClass();
1. を 書 く 20,21 行 目 インスタンスの 生 成 その2 23,24 行 目 : 使 い 方 1. を 書 く 宣 言 と 生 成 を1 行 で 書 くこともできる 名 インスタンス 名 = new 名 (); 例 えば HelloClass のインスタンス dt01 を 生 成 す るなら HelloClass dt01 = new HelloClass(); インスタンスのメンバにアクセスするには インスタンス 名.メンバ 名 とする インスタンス dt01 の 変 数 roop を 参 照 したい 場 合 dt01.roop ドット インスタンス dt01 の hello を 実 行 したい 場 合 dt01.hello() 17: 17: 18: 18: 19 19 20: 20: 21: 21: 22: 22: 23: 23: 24: 24: 25: 25: 26: 26: 流 れ(1) 20 行 目 でdt01が 生 成 コンストラクタでdt01の 変 数 nameにはob01が 代 入 同 様 に 21 行 目 でdt02が 生 成 public class HelloWorld{ public static void void main(string[] args){ int inttestnum=5; HelloClass dt01 dt01 = new new HelloClass("OB01"); HelloClass dt02 dt02 = new new HelloClass("OB02"); dt01.hello(); dt01 dt02 dt02.hello(); hello(); hello(); roop=1; roop=1; name="ob01"; name="ob02"; 17: 17: 18: 18: 19 19 20: 20: 21: 21: 22: 22: 23: 23: 24: 24: 25: 25: 26: 26: 流 れ(2) 23 行 目 でdt01のhelloを 実 行 helloはnameの 中 身 "OB01"と"Hello World"を 出 力 同 様 に 24 行 目 はdt02のhelloを 実 行 public class HelloWorld{ public static void void main(string[] args){ int inttestnum=5; HelloClass dt01 dt01 = new new HelloClass("OB01"); HelloClass dt02 dt02 = new new HelloClass("OB02"); dt01.hello(); dt01 dt02 dt02.hello(); hello(); hello(); roop=1; roop=1; name="ob01"; name="ob02"; 演 習 3: 内 容 サンプルプログラム3を 入 力 し コンパイル 実 行 を 行 います どのようなファイルができるか 確 認 していきます 流 れ: 1. ファイルをおくフォルダの 作 成 2. テキストエディタで HelloWorld.java を 入 力 作 成 3. コマンドプロンプト 上 で HelloWorld.javaをコンパ イル 4. コマンドプロンプト 上 で HelloWorld を 実 行 演 習 3: ソースの 記 述 コンパイル 実 行 1. HelloWorld.java というファイル 名 で 保 存 します 2. コマンドプロンプトで 次 を 入 力 実 行 します javac HelloWorld.java フォルダ Java 内 に HelloWorld.class と HelloClass.class ができたことを 確 認 しましょう 1つの 毎 に1つのファイルができます 3. コマンドプロンプトで 次 を 入 力 実 行 します java HelloWorld
利 点 スタティックな の 場 合 わざわざインスタンスを 生 成 しなくても その 機 能 を 利 用 できるようになります 変 数 の 場 合 複 数 のインスタンスで 共 通 に 使 える 変 数 を 利 用 できるようになります 注 意 する 点 static なの 中 では インスタンスメンバな 変 数 に アクセスすることはできません class Test{ static int int st_data; staticなtest_func02の 中 からは int int data; 変 数 dataは 利 用 できない public static void void test_func02(){ 文 ; メンバとインスタンスメンバ 変 数 やには static をつけることができます staticがついているものをメンバ ついていないも のをインスタンスメンバと 呼 びます staticがついている 変 数 やに 関 しては すべての インスタンスが 同 じモノを 使 うようになります メンバは インスタンスを 生 成 しなくても 利 用 する ことができます メンバには 名.メンバ 名 のようにアクセスします 直 感 的 な 図 直 感 的 な 図 概 念 とか 設 計 図 の 世 界 Test int contents; static int st_cont; 実 物 (オブジェクト)の 世 界 static と 書 かれたメンバが 居 ることに 注 目! 概 念 とか 設 計 図 の 世 界 Test int contents; static int st_cont; Data1 実 物 (オブジェクト)の 世 界 contents = 10; st_cont; static cont(); Test.st_cont=10; Test. cont(); インスタンスを 生 成 しなくても アクセス 可 能 名.メンバ 名 でアクセスする 今 回 は Test.st_cont の 様 にする static cont(); Test.st_cont=10; Test. cont(); Data2 cont(); contents = 20; st_cont; cont();
直 感 的 な 図 直 感 的 な 図 概 念 とか 設 計 図 の 世 界 Test int contents; static int st_cont; Data1 実 物 (オブジェクト)の 世 界 contents = 10; st_cont; 概 念 とか 設 計 図 の 世 界 Test int contents; static int st_cont; Data1 実 物 (オブジェクト)の 世 界 contents = 10; st_cont; static cont(); 同 じものを 利 用 Test.st_cont=10; Data2 cont(); contents = 20; st_cont; Test.st_cont=15とすれば static cont(); Data1.st_cont も15に Test.st_cont=15; Data2 cont(); contents = 20; st_cont; Test.cont(); Test.cont(); cont(); cont(); 直 感 的 な 図 概 念 とか 設 計 図 の 世 界 Test int contents; static int st_cont; static cont(); Test.st_cont=20; Test.cont(); Data1 Data2 ここに 値 を 代 入! Data1.st_count=20 実 物 (オブジェクト)の 世 界 contents = 10; st_cont; cont(); contents = 20; st_cont; ここに 代 入 と 同 じ 結 cont(); 果 に! の 書 き 方 の 例 class Test{ static int int st_data; int int data; static と 書 くだけです public void void test_func01(){ System.out.println(data); public static void void test_func02(){ System.out.println(st_data); public class Sample04a{ public static void void main(string[] args){ Test.st_data=10; Test.test_func02(); インスタンスを 生 成 しなく ても 使 える オーバーロードって? のオーバーロード も 引 数 のデータ 型 個 数 並 び 方 のどれかが 異 なっていれば 同 じ 名 前 で 沢 山 定 義 する ことができます これをオーバーロードと 言 います 異 なる 引 数 で 同 じ 処 理 を 行 いたいとき 等 に 便 利 です
例 : public class Sample04d{ public static void main(string[] args){ calc(10,20); calc(10.5,20.5); 同 じのは 名 だけで 実 行 できます 引 数 が( 整 数, 整 数 ) なので こちらが 実 行 public static void calc(int data01, int data02){ System.out.println(data01*data02); 引 数 が(double,double) なので こちらが 実 行 public static void calc(double data01, double data02){ System.out.println(data01+data02); 例 2: class Test{ int value; Test(){ value=10; Test(int value01){ value=value01*10; 2つ 以 上 のコンストラクタを 書 くことができる どちらが 実 行 されるかは 引 数 で 判 断 される 引 数 が 無 いので こちらが 実 行 される public class Sample05{ public static void main(string[] args){ Test dt01 = new Test(); Test dt02 = new Test(100); System.out.println(dt01.value); System.out.println(dt02.value); 引 数 として 整 数 が 一 つ 渡 されるので こちらが 実 行 される 継 承 とは あるが 存 在 しているとき それを 流 用 して 違 うク ラスを 記 述 することができる! 継 承 Test01 int data01; test_func01(); Test02 int data01; int data02; test_func01(); もとのをスーパー 新 しくできたをサ ブと 呼 びます 新 しくできたサブは 普 通 のと 同 様 の 方 法 でインスタンスを 生 成 し 使 えます サブの 書 き 方 もとのを 拡 張 (extends)する 形 で 書 きます class サブ 名 extends スーパー 名 { 拡 張 したい 内 容 を 書 く く 直 感 的 には 以 下 のような 感 じ Test02 Test01 int data01; サブ int data02; 拡 張 された 部 分 test_func01(); スーパー サブの 書 き 方 例 class Test01{ int int data01; void void test_func01(){ 中 略 スーパー class Test02 extends Test01{ int int data02; 拡 張 された 内 容 Test02 Test01 int data01; サブ int data02; test_func01();
生 成 されたインスタンス class Test01{ int int data01; void void test_func01(){ 中 略 class Test02 extends Test01{ int int data02; public class Sample04d{ public static void void main(string[] args){ Test02 dt02 dt02 = new new Test02(); 以 下 略 dt02 普 通 に 生 成 data02; dt02.test_func01()のように 普 通 にアクセス dt02.data01のように 普 通 にアクセス data01; test_func01(); のオーバーライド class Test01{ サブの 方 で int int data01; スーパーと 同 じ 名 前 引 数 の void void test_func01(){ 中 略 を 定 義 した 場 合 サブで 書 いた 方 が 有 効 に class Test02 extends Test01{ int int data02; void void test_func01(){ 中 略 のオーバーライド dt01( 生 成 されたインスタンス) Test01 data01; data02; test_func01(); dt01.test_func01()として こちらが 使 われる test_func01(); こちらは 使 われない アブストラクトとは アブストラクト と アブストラクト を 書 く 際 に 拡 張 されることを 前 提 に を 書 くことができる アブストラクト アブストラクトは 拡 張 されることが 前 提 なので それ 自 身 をにするインスタンスは 作 れない アブストラクトの 中 では 拡 張 時 にオーバーライド されることを 前 提 に を 書 くことができる アブストラクト アブストラクトは サブ 内 でオーバーライ ドしないと コンパイル 時 にエラーが 出 る アブストラクト 拡 張 されることを 前 提 とした 書 式 : 通 常 のの 書 き 方 に abstract とつける abstract 修 飾 子 class 名 { と 同 じように 変 数 の 宣 言 コンストラクタ 等 を 書 く アブストラクトの 例 abstract class Test01{ void test01(){ System.out.println("Test 01"); class Test02 extends Test01{ void test02(){ System.out.println("Test 02"); アブストラクト Test01をスーパー とするサブTest02 public class Sample06a{ public static void main(string[] args){ Test02 dt01 = new Test02(); インスタンスを 生 成 Test01 dt01 = new Test01();はできない
アブストラクト サブで オーバーライドされる 前 提 の サブ 内 でオーバーライドされないと コンパイル 時 にエラーが 出 る 書 式 :に abstract とつける abstract 修 飾 子 class 名 { 略 abstract 修 飾 子 返 値 の 型 名 ( 引 数 ); ); 必 ずオーバーライドされるため 実 際 に 行 う 内 容 は ここには 書 かない アブストラクトの 例 abstract class Test01{ void test01(){ System.out.println("Test 01"); abstract void test02(); アブストラクト class Test02 extends Test01{ void test02(){ System.out.println("Test 02"); public class Sample06b{ public static void main(string[] args){ Test02 dt01 = new Test02(); アブストラクト Test01を スーパー とする サブTest02 必 ずオーバーライド インターフェースとは インターフェース アブストラクトだけを 宣 言 するための 機 能 インターフェース 内 には 定 数 とアブストラクト のみを 記 述 できる インターフェースに 基 づいたを 書 くことができる このことをインターフェースを 実 装 するという データのやり 取 りの 方 法 を 強 制 するので インター フェースと 呼 ばれる と 異 なり 2つのインターフェースを 1つのクラ スに 同 時 に 実 装 できる インターフェースの 書 き 方 書 式 : interface interface 名 { 記 号 定 数 の 宣 言 アブストラクト interfaceの 中 では 記 号 定 数 の 宣 言 とアブストラクト しか 書 くことができません の 書 き 方 その1 このインターフェースに 基 づいたを 書 くことを インターフェースを 実 装 すると 言 います インターフェースを 実 装 するには 次 のように 書 きます 書 式 : class 名 implements interface 名 { 省 略 アブストラクトは 内 でオーバーライドする 必 要 があります
の 書 き 方 その2 2つ 以 上 のインターフェースを 同 時 に 実 装 できます 書 式 : class 名 implements interface 名,interface 名 { 省 略, で 区 切 って インターフェース 名 を 実 装 したいだけ 繋 げ ます の 書 き 方 その3 を 継 承 し さらにインターフェース 実 装 できます 書 式 : class 名 extends 名 implements interface 名 { 省 略 の 拡 張 とインターフェース を 拡 張 するとき スーパーとして 利 用 できる のは ただ1つだけ インターフェースは 複 数 を 同 時 に 利 用 できる 普 通 の 拡 張 その1 2つのスーパー は 持 てない その2 インターフェースと スーパーは 同 時 インターフェース その1 にもてる インターフェース その2 インターフェースは 2つ 同 時 でもOK インターフェースの 例 interface InterTest01{ double root_2 = 1.41421356; void test01(double ddt); class Test02 implements InterTest01{ public void test01(double ddt){ System.out.println(ddt*root_2); public class Sample07a{ public static void main(string[] args){ Test02 dt01 = new Test02(); dt01.test01(100.0); インターフェース インターフェースを 実 装 した インスタンスを 生 成 を 実 行