180 likes | 270 Views
アルゴリズムとプログラミング (Algorithms and Programming). String クラスの機能と使い方 参照型変数. 第12回:補足的事項. 講義資料等:. http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html. メソッドのオーバーライド. 復習. オーバーライド (override). 親クラスと子クラスのそれぞれに、 メソッド名 、 引数 、 戻り値 が 全て同一 で内容が異なるメソッドを定義すること. 混同注意!. オーバーロード (overload).
E N D
アルゴリズムとプログラミング(Algorithms and Programming) • Stringクラスの機能と使い方 • 参照型変数 第12回:補足的事項 講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html
メソッドのオーバーライド 復習 オーバーライド(override) 親クラスと子クラスのそれぞれに、 メソッド名、引数、戻り値が全て同一で内容が異なるメソッドを定義すること 混同注意! オーバーロード (overload) ひとつのクラス内に、メソッド名が同じで、引数の型及び数が異なるメソッドを定義すること
メソッドのシグニチャー 復習 メソッドを区別するための メソッド名、引数の型、戻り値 をシグニチャー(signature)という メソッドの書式 戻り値 メソッド名(型 変数名1, 型 変数名2,...)
クラスの配列 基本型(int型)の配列宣言の例 int a[ ] ; a = new int[10] ; ユーザが定義したクラスでも配列を作ることが可能 例)Pointクラスの参照型変数を3個格納する配列の宣言 Pointクラスが既に 定義されているものとする Point p[ ] ; p = new Point[3] ; 3個の参照型変数を 格納する pはオブジェクト参照型変数 の配列である
pにオブジェクト参照を代入する 例) p[0] = new Point(0.0, 0.0); p[1] = new Point(0.0, 1.0); p[2] = new Point(2.0, 3.0); p[0]~p[2]の3つのオブジェクト参照 変数に、それぞれ生成したインスタ ンスの参照を代入した
Stringクラス システムに組み込まれている Stringオブジェクトの宣言と初期化 String s = "abcdefg"; String s = new String ( "Hello, Java!" ); 文字列リテラルはStringクラスのインスタンス
Stringクラスの各種メソッドの例 コンストラクタ String s = new String ( "Hello, Java!" ); 文字列の長さを得る s.length(); i番目の文字を得る s.charAt ( i ); (先頭文字は i=0) 文字列の一部を置換する s.replace("Java","ジャバ"); 数値を文字列に変換する int i = 1234; s = String.valueOf( i ); 文字列を数値に変換する int i = Integer.valueOf( "1234" ); この他、多数のメソッドが用意されている
Stringクラスの演算子 String s = new String("abc"); s = s + "def"; +演算子は、文字列の結合を意味する s = 先頭メモリ番地A a b c d e f a b c a b c d e f 元のインスタンスとは別のメモリ番地に新たなインスタンスが生成される インスタンスの内容を変更するのではなく、新たなインスタンスを生成し、古いのを捨てている s = 先頭メモリ番地B
Stringの配列 複数の文字列を格納する際に 使用する 例1) String a[] ; a = new String[3]; a[0] = "abcd"; a[1] = "efgh"; a[2] = "ijkl";
例2)main()メソッドの引数文字列 public static void main(String[] args) { • args はStringクラスの参照型変数を格納する配列 • 確保される配列の個数は、プログラムを実行する際に与えられる引数の個数に等しい 例) java Sample 1.0 abcd "1.0" →args[0] "abcd"→args[1] args.length は 2 プログラム名 引数1 引数2
Stringクラスの特徴 • Stringオブジェクトは読み出しのみ可能、変更不可能 • 演算やメソッドにより変更しているように見えても、実は元のインスタンスを捨てて、新しいインスタンスに差し替えている • 基本型ではないがシステムレベルでサポートされており、比較的軽い 変更可能な文字列を提供するのは StringBufferクラス
参照型変数 使用法:配列やクラスのインスタンスの参照を格納する ? 参照型変数に格納されるデータは?: インスタンスの格納されているメモリ番地(アドレス) が格納されており、中身自身が格納されているわけ ではない 注意点:インスタンスの中身(内容)の比較を行う際に 参照型変数同士の比較をしても意味がない。 では、どうすればよいか?
参照型変数の比較 class X { int x; X(int a){x=a;} } X o1 = new X( 2 ); X o2 = new X( 2 ); o1とo2は全く別のインスタンス o1とo2の中身の値は全く同じ o1とo2の中身の比較を行う文?
o1とo2の中身の比較を行う文? 理由: o1とo2は別々のインスタンスであり、格納されるメモリ番地は異なるから。 下記の論理式は真か、偽か? o1 == o2 答え: 偽(false) 内容の比較を行うメソッド o1.equals(o2) == true equals()メソッドは、Objectクラスで定義され継承されている
s1 s2 s1 s2 a b c a b c a b c オブジェクトの複製 String s1 = "abc"; String s2 ; 問題: s1とは別のインスタンスとして、s2にs1の内容のコピーを作りたい。どう書けばよいか? 1. s2 = s1; s2はs1と同じインスタンスを指し示すだけで中身はコピーされない 2. s2 = new String(s1); コンストラクタで別インスタンスを生成し、s1の内容で初期化
まとめ • Stringクラスの特徴と使い方 • 参照型変数に関する注意事項
今後の展望 • 本講義でJavaの基本文法はほぼカバー • カバーしきれなかった点 • インターフェース • 例外処理 • マルチスレッド • 各種クラスライブラリの活用 • ラッパークラス • Stringクラス • ファイル入出力用クラス..等 さらに高度なクラスライブラリへ
今後の展望 • コンピュータ言語の文法自体は底が浅い • しかし、アルゴリズムは奥が深い • 本講義で身に着けたJava言語を武器に、アルゴリズムの勉強を自ら進めることが可能 • また、世に出ている優れたプログラムを読んで、基本構造の設計手法やコーディングテクニック等を学ぶことで、実用的なプログラミング能力を身につけることもできる IT技術を自在に操るスキルと洞察力