- ベストアンサー
メソッドについて教えてください。
java 初心者2日程です(objective-c経験者) 教えていただきたいのですが、以下のように オブジェクト.メソッド というピリオドが一つの書式と クラス?.?(何を指しているのでしょうか?).メソッド? というピリオドが二つの書式が見受けられますが どういう違いで使い分けるのでしょうか? 申し訳ありません。教えていただけますか? //インスタンス化 MyObject object = new MyObject(); //メソッドの利用 object.methodA(); System.out.print(xxxxx);
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
object.methodA();は インスタンス変数.メソッド の形式。 System.out.print(xxxxx);は、 クラス名.staticなインスタンス変数.メソッド の形式です。 Javaにおいて「.」は、パッケージ名、クラス名、メンバ名(変数、メソッド)をくっつけるものです。 文法上は、1つ2つどころか、その気になればいくらでも付けることができます。 けど、普通は2つまでくらいしか見かけないですね。 パッケージ名の区切りに使うピリオドは置いておいて、それ以外のピリオドの登場場面を簡単に説明します。 1)インスタンス変数.メソッド、またはインスタンス変数.変数 これがいちばんよく見るものですね。 2)クラス名.メソッド、またはクラス名.変数 これはいわゆる static 宣言されたメソッドや変数を示します。 クラス内に書かれたstatic変数やメソッドは、クラスに一つだけで、個々のインスタンスには属さないものになります。 ですから、インスタンス変数名ではなくクラス名で指定します。 System.out.print() は上の2つを組み合わせたものです。
その他の回答 (3)
- asock
- ベストアンサー率70% (7/10)
#2です。ご質問を読み直したらわたしの解答がずれている気がしたので、訂正と少々補足を・・・ > 基本的にオブジェクト.メソッド() という書式です。 は間違いで、 メソッドの呼出は、オブジェクト.メソッド() もしくは クラス.スタティックメソッド() の2つです。 System.out の部分ですが、 Systemクラスのスタティックフィールド(静的変数) out という意味です。 静的メソッドと静的変数についてはこちらをご覧になるとよいと思います。 http://www.nextindex.net/java/static.html http://takeoba.cool.ne.jp/java/staticMember.htm
お礼
ありがとうございます
- asock
- ベストアンサー率70% (7/10)
メソッドは基本的に、オブジェクト.メソッド() という書式です。 Systemクラスのフィールド out はスタティックフィールドで、既に開かれている標準出力ストリームインスタンスを指します。 よって、System.out はPrintStreamオブジェクトそのものです。オブジェクトですので、.print()と続けてメソッドを書くことができます。 System.out.print("test")は以下のように考えるとよいと思います。 (System.out).print("test"); また、以下の記述を便宜的に省略していると考えることもできます。 PrintStream pstream = System.out; pstream.print("test"); 補足ですが、メソッドがなんらかのオブジェクトを返す場合は以下のような使いかたも出来ます。 // 子供クラス class Child { public String hoge() {return "子供だよ";} } // 父親クラス class Father { public void afo() {} } // 人間クラス public class Human { private Father father; public Child[] children = new Child[10]; // コンストラクタ Human() { father = new Father(); for (int i=0; i<children.length; i++) children[i] = new Child(); } // Fatherオブジェクトを取得 public Father getFather() { return father; } // Child配列を取得 public Child[] getChildren() { return children; } public static void main(String[] argv) { Human man = new Human(); // メソッド呼出その1 man.getFather().afo(); // (man.getFather()).hoge(); に同じ // メソッド呼出その2 man.getChildren()[0].hoge().length(); // (((man.getChildren())[0]).hoge()).length(); に同じ } } このように「.」 でつないでメソッドを呼び出していくことは記述上便利なのですがメソッドがnullを返しうる場合は例外が生じるので(null.メソッド()という呼出は出来ませんよね)、きちんと例外処理を行うか無闇やたらにつなげない方がよいと思います。
お礼
ありがとうございます
- pcbeginner
- ベストアンサー率46% (261/560)
System.out.print System:java.lang.Systemクラス out:上記Systemクラスのフィールド、java.io.PrintStreamクラスのインスタンス print(xxxx):printメソッド(今回の場合はjava.io.PrintStreamクラスのprintメソッド) つまり 「SystemクラスのoutというPrintStreamクラスのインスタンスのprintメソッドに引数xxxxを指定して実行する。」 です。 java.io.PrintStreamクラスには引数の型違いのprintメソッドが多数あります。 xxxxの型によって適切なprintメソッドが実行されます。
お礼
ありがとうございます
お礼
ありがとうございます