変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
復習ー I (General Review I) クラスとオブジェクトの概念 Concepts of class and object クラスの宣言とオブジェクトの生成 Definition of a class and creation of an object コンストラクタとメソッドのオーバーロー.
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
AIプログラミング Java とオブジェクト指向プログラミングの基 礎 認知システム論 情報工学コース コンピュータサイエンスコース 生体情報コース.
プログラミング第5回 1 while ループ 文字列の操作
プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
IO - 入出力 小西 亨.
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
アルゴリズムとプログラミング (Algorithms and Programming)
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
社会人学習講座 「Javaプログラミング概論」
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Bridge Pattern
オブジェクト指向入門.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
情報処理技法 (Javaプログラミング)2 第2回 前期の復習(2)
~手続き指向からオブジェクト指向へ[Ⅱ]~
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
ソフトウェア工学 知能情報学部 新田直也.
サブゼミ第9回 実装編③ 永続化とjava.ioパッケージ.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
リファレンスの復習と例外処理 2005年6月14日 海谷 治彦.
暗号技術 ~JAVAプログラム③~ (7週目)
WebサービスII (第7回) 2007年11月7日 植田龍男.
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム①~ (5週目)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
暗号技術 ~JAVAプログラム②~ (6週目)
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
第6章 インターネットアプリケーション 6.1 インターネットアプリケーション 6.2 Javaによるネットワーク処理 6.3 電子メール
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義 クラス変数  すべてのメソッドの外側でstaticで定義 staticメソッドとインスタンスのすべてのメソッドからアクセスできる クラス変数 インスタンス変数 インスタンス変数 すべてのメソッドの外側で定義 インスタンス内の各メソッドからアクセスできる メソッド ローカル変数 staticメソッド ローカル変数 メソッドの内側で定義 そのメソッドのみ有効 ローカル変数

public class Hensu { static int stakazu = 10; int inkazu = 40; void keisan() { int keikazu = 30; System.out.println(keikazu); System.out.println(inkazu); } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Hensu hen = new Hensu(); int mainkazu = 20; System.out.println(stakazu); System.out.println(mainkazu); hen.keisan(); //System.out.print(keikazu);エラー //System.out.println(inkazu);エラー

カプセル化 データ setter, getter,を用いてアクセス制御(他とのやりとり)をおこなう。 処理 setter setter 変数に値を設定するメソッド getter 変数から値を取り出すメソッド  データと処理を一体化する。独立性が高まる、ソフトウェアの部品化ができるなどのメリットがある。

public class GetSet { int a; void setKazu(int a){ this.a = a; System.out.println("セッターの"+a); } int getKazu(){ return a; public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ int b; GetSet ge = new GetSet(); ge.setKazu(10); b=ge.getKazu(); System.out.println("メインの"+b);

継承(インヘリタンス) スーパークラス スーパークラス(親) 定義された元のクラス サブクラス(子) サブクラス スーパークラスを拡張(extends)してつくる新しいクラス  サブクラスから生成されたインスタンス内部には、サブクラスで定義したデータと処理のみならず、スーパークラスで定義したデータと処理も含まれる。

public class Keisyou1_1 { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Keisyou1_3 kei1_3 = new Keisyou1_3(); kei1_3.hyouji(); kei1_3.hyoujioya(); System.out.println("Keisyou1_1からの表示です"); } public class Keisyou1_2 { public void hyoujioya(){ System.out.println("Keisyou1_2からの表示です"); public class Keisyou1_3 extends Keisyou1_2{ public void hyouji(){ System.out.println("Keisyou1_3からの表示です");

多態性(ポリモーフィズム) 処理 継承やインタフェースを用いておこなう。 「出力して」 処理:out 「メッセージを表示する」 処理:out 「メッセージを印刷する」  各インスタンスに同じ名前のメソッドを呼び出しても、インスタンスによって動作が異なる。重複するメソッド名を利用でき、見通しがよくなる。

class Display { public void out(String message) { System.out.println("ディスプレイに「" + message + "」と表示します"); } class Printer { System.out.println("「" + message + "」という文字列を印刷します"); public class PolymorPhism { public static void main(String[] args) { String message = "今日は雪です"; Display display = new Display(); Printer printer = new Printer(); display.out(message); printer.out(message);

コンストラクタ クラス 変数a,b インスタンス変数 コンストラクタ a=10; コンストラクタ b=20; コンストラクタ名はクラス名と同じにする 処理  インスタンス生成時にインスタンス変数を初期化できる。記述されていないときは自動的に追加される。

public class Constracta { int a,b; Constracta() { a = 10; b = 20; } public void hyouji(){ System.out.println("a+bは"+(a+b)); public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Constracta cons = new Constracta(); cons.hyouji();

オーバーロード 処理 jyou(1,2)をして jyou(1,2,3)をして jyou(1,2,3,4)をして 処理:jyou(a,b) 処理: jyou(a,b,c) a*b*cをする 処理: jyou(a,b,c,d) a*b*c*dをする 引数の数や型が異なれば、同じ名前のメソッドを定義できる。

public class OverLoad1_1 { public static void main(String[] args) { OverLoad1_2 ove1_2 = new OverLoad1_2(); int kekka; kekka = ove1_2.jyou(1,2); //オーバーロード System.out.println("2つのかけ算"+kekka); kekka = ove1_2.jyou(1,2,3); System.out.println("3つのかけ算"+kekka); kekka = ove1_2.jyou(1,2,3,4); System.out.println("4つのかけ算"+kekka); } public class OverLoad1_2 { int kotae; public int jyou(int s1,int s2){ return kotae = s1 * s2; public int jyou(int s1,int s2,int s3){ return kotae = s1 * s2 * s3; public int jyou(int s1,int s2,int s3,int s4){ return kotae = s1 * s2 * s3 * s4;

オーバーライド スーパークラス スーパークラスのhello() スーパークラスのhello()がサブクラスのhello()に上書きされた スーパークラスが定義したものサブクラスで再定義する。

public class OverRide{ public static void main(String[] args) { OverRidesub ovrsub = new OverRidesub(); ovrsub.hello(); ovrsub.night(); } class OverRidesuper{ void hello(){ System.out.println("おはよう"); void night(){ System.out.println("こんばんは"); class OverRidesub extends OverRidesuper{ void hello(){ //再定義 System.out.println("おはようございます"); super.hello();     //hello(); これを書くと「おはようございます」と「おはよう」の無限ループ

抽象メソッドのhyouji(kotae) 抽象クラス クラス名 abstract classで定義 抽象クラス スーパークラス メソッド名 abstractで定義 抽象メソッドのhyouji(kotae) サブクラスのhyouji(kotae) 中身のない抽象クラスのhyouji(kotae)が サブクラスのhyouji(kotae)に上書きされた サブクラス  具体的な処理内容がない(中身が未定でコーディングされていない)抽象メソッドを持つクラス

abstract class Keisan { //抽象クラス abstract void hyouji(int kotae); //抽象メソッド int n,m; void setsuuti(int n,int m){ //セッター this.n=n; this.m=m; } int getsuutin(){ //ゲッター return n; int getsuutim(){ return m; class Tasizan extends Keisan{ void hyouji(int kotae){ System.out.println(kotae); class Abstract1 { public static void main(String[] args) { Tasizan tasi = new Tasizan(); tasi.setsuuti(5,6); int kotae = tasi.getsuutin()+tasi.getsuutim(); tasi.hyouji(kotae);

インタフェース インタフェース インタフェース インタフェース interfaceで定義 インタフェースのkei() 実装クラスのkei() implementsで定義 中身のないインタフェースのkei()が実装クラスのkei()に上書きされた 実装(サブ)クラス  インタフェースはインスタンスが持つ機能の利用方法だけを定義してある。実装(サブ)クラスにより実装する。インタフェースは複数同時に実装できる。

interface asanoSHR{ void asaSHR(); } interface kaerinoSHR{ void kaeriSHR(); class aisatsu implements asanoSHR,kaerinoSHR{ public void asaSHR(){ System.out.println("おはよう"); public void kaeriSHR(){ System.out.println("さようなら"); public class Interface { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ aisatsu ai = new aisatsu(); ai.asaSHR(); ai.kaeriSHR();

ArrayList addでデータの追加 getで参照を取り出す ArrayListクラス型 オブジェクト オブジェクト オブジェクト 1 2 参照 addでデータの追加 getで参照を取り出す ArrayListクラス型 オブジェクト オブジェクト オブジェクト  ArrayListは配列のようにオブジェクトを格納する。

Scanner sc = new Scanner(System.in); String innamae; String naiyou; int n; ArrayList<String> list = new ArrayList<String>(); public void nyuryoku() { System.out.println("名前を入力してください:終わりはend"); innamae = sc.next(); while(innamae.equals("end") != true){ list.add(innamae); } public void hyouji(){ for (n=0;n<list.size();n++){ String naiyou = (String) list.get(n); System.out.println(naiyou);

StringTokenizer 101,abe 102,igarashi 103,yasuda , a b e 1 2 3 4 5 6 , a b e StringTokenizer(line,",") ,で区切り取り出す code name 101 abe CSVファイルから1行読み込み、カンマ区切りで取り出す

import java.io.*; import java.util.*; public class Tokenizer { public static void main(String[] args) throws NumberFormatException, IOException { // TODO 自動生成されたメソッド・スタブ File csv = new File("meibo.csv"); BufferedReader br = new BufferedReader(new FileReader(csv)); String line = ""; int code; String name; while((line = br.readLine()) != null){ StringTokenizer str = new StringTokenizer(line,","); code = Integer.parseInt(str.nextToken()); name = str.nextToken(); System.out.println(code+name); }

データベースアクセス ドライバ読み込み class.forNameで読み込み DBMS接続を開く DriverManager.getConnectionで接続 SQL送信路を開く createStatement()で開く SQL文送信 executeQuery(select〜)で select文送信と結果受信 実行結果受信 実行結果から値を取り出す get〜で結果を取り出し 実行結果(表)を閉じる closeで閉じる SQL送信路を閉じる closeで閉じる DBMS接続を閉じる closeで閉じる

try { //JDBCドライバのロード Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection( "jdbc:mysql://localhost:8889/jikken","root","root"); //データベースに接続 stmt = con.createStatement(); rs = stmt.executeQuery("select * from meibo"); while(rs.next() == true){ String gBan = rs.getString("ban"); String gNam = rs.getString("name"); System.out.println(gBan+gNam); (途中省略) try{ if(rs != null){ rs.close(); } if(stmt != null){ stmt.close(); if(con != null){ con.close();

Eria[] eriaJoho = new Eria[5] 1 2 3 4 Eriaクラスを入れる配列を確保

eriaJoho[h] = new Eria(eriaMei[h]) 1 2 3 4 Eriaをインスタンス化して配列へ入れる eriaMei:森と炎 nyujoKei:0 Eria eriaMei 森と炎 gokei nyujo hyoji heikin コンストラクタがあるので hが1のとき、”森と炎”を渡してeriaMeiに入る for(int h=1;h<=4;h++){ eriaJoho[h] = new Eria(eriaMei[h]) } String[] eriaMei 1 2 3 4 森と炎 海と水 不思議 キッズ

eriaJoho[h] = new Eria(eriaMei[h]) 1 2 3 4 インスタンスが4つ完成! eriaMei:森と炎 nyujoKei:0 Eria eriaMei 森と炎 gokei nyujo hyoji heikin eriaMei:海と水 nyujoKei:0 Eria eriaMei 海と水 gokei nyujo hyoji heikin eriaMei:不思議 nyujoKei:0 Eria eriaMei 不思議 gokei nyujo hyoji heikin eriaMei:キッズ nyujoKei:0 Eria eriaMeiキッズ gokei nyujo hyoji heikin

eriaJoho[eriaCode].gokei(nyujo) 1 2 3 4 eriaJoho[eriaCode]のgokeiを実行 eriaMei:森と炎 nyujoKei:1000 Eria eriaMei森と炎 gokei nyujo1000 hyoji heikin eriaCodeが1、nyujoが1000のとき、森と炎のインスタンスに1000を渡してgokeiを実行

eriaJoho[eriaCode].gokei(nyujo) 1 2 3 4 全部のデータが入力完了! eriaMei:森と炎 nyujoKei: 47160 Eria eriaMei 森と炎 gokei nyujo 450 hyoji heikin eriaMei:海と水 nyujoKei: 56712 Eria eriaMei 海と水 gokei nyujo 233 hyoji heikin eriaMei:不思議 nyujoKei: 40057 Eria eriaMei 不思議 gokei nyujo 1542 hyoji heikin eriaMei:キッズ nyujoKei: 15531 Eria eriaMeiキッズ gokei nyujo 1431 hyoji heikin

eriaJoho[h].hyoji() eriaJoho[h]のhyojiを実行 eriaMei:森と炎 nyujoKei: 47160 1 2 3 4 eriaJoho[h]のhyojiを実行 eriaMei:森と炎 nyujoKei: 47160 Eria eriaMei 森と炎 gokei nyujo 450 hyoji heikin hが1のとき、森と炎インスタンスのhyojiを実行 for(int h=1;h<=4;h++){ eriaJoho[h].hyoji() }

int heikin = nyujoKei / 7 heikinの計算と表示 eriaMei:森と炎 nyujoKei: 47160 1 2 3 4 heikinの計算と表示 eriaMei:森と炎 nyujoKei: 47160 Eria eriaMei 森と炎 gokei nyujo 450 hyoji heikin 6737 hが1のとき、森と炎インスタンスのhyojiを実行 public void hyoji(){ int heikin = nyujoKei / 7; System.out.〜 } 実行結果 森と炎 47,160 6,737