• ベストアンサー

toStringメソッドについて

java言語超初心者です。以下のコードを入力しました。 class MyCls1 { String name; int count; public void look() { System.out.println("名前" + name + "個数" + count); } } class MyCls2 { String name; int count; public void look() { System.out.println("なまえ" + name + "こすう" + count); } public String toString() { String str = "MyCls2:name = " + name + "count=" + count; return str; } } public class JaCls06 { public static void main(String args[]) { MyCls1 bbb = new MyCls1(); bbb.name = "AAA"; bbb.count = 111; bbb.look(); System.out.println(bbb); MyCls2 dd = new MyCls2(); dd.name = "BBB"; dd.count = 2222; dd.look(); System.out.println(dd); String ee; ee = dd.toString(); System.out.println(ee); } } 実行結果が 名前AAA個数111 MyCls1@19821f なまえBBBこすう2222 MyCls2:name = BBBcount=2222 MyCls2:name = BBBcount=2222 なんですが、2行目以降の結果がどの行を反映して出てきたのかが全くわかりません。どうか、教えてください。初歩的な質問で申し訳ないです。

  • Java
  • 回答数5
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.5

>これは今勉強に使っている本の >練習問題です。 そんな本は、処分することを個人的にはお勧めします。 まずは、次に上げる統合開発環境Eclipseの解説書のどちらか(または両方)を 入手することを強くお勧めします。 これらの解説書には、ほぼ全ての機能が包括的に解説されていますので、 実用上も辞書的に活用できて非常に有益です。 Eclipse3.3 完全攻略 宮本 信二 ¥ 2,940 http://www.amazon.co.jp/Eclipse3-3-%E5%AE%8C%E5%85%A8%E6%94%BB%E7%95%A5-%E5%AE%AE%E6%9C%AC-%E4%BF%A1%E4%BA%8C/dp/4797347074/ref=sr_1_2?ie=UTF8&s=books&qid=1213595941&sr=1-2 開発のプロが教える標準Eclipse 3.3完全解説 (デベロッパー・ツール・シリーズ) 鈴村 幸太郎 ほか ¥ 2,940 http://www.amazon.co.jp/%E9%96%8B%E7%99%BA%E3%81%AE%E3%83%97%E3%83%AD%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E6%A8%99%E6%BA%96Eclipse-3-3%E5%AE%8C%E5%85%A8%E8%A7%A3%E8%AA%AC-%E3%83%87%E3%83%99%E3%83%AD%E3%83%83%E3%83%91%E3%83%BC%E3%83%BB%E3%83%84%E3%83%BC%E3%83%AB%E3%83%BB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%88%B4%E6%9D%91-%E5%B9%B8%E5%A4%AA%E9%83%8E/dp/475615087X/ref=pd_bxgy_b_img_b それと、Javaの解説書としては、次のリンク内に示したものをお勧めします。 http://okwave.jp/qa3929030.html Javaの入門書には、全くレベルの低いものが沢山あります。 インターネット時代ですから、簡単な入門レベルの情報は、WEB上に散在しており、 個人的にはそれで十分かと思います。 せっかくお金をつぎ込むのなら、長い将来にわたって役に立ちそうな、本格的な 書籍を購入するべきだと考えます。

somehow123
質問者

お礼

ご親切にありがとうございます。 参考にする本は、おっしゃる通りたくさん出回っていて、 全くの初心者である私にはどれが良い本なのかが わからなくて、困ってもいました。 大変参考になりました。

その他の回答 (4)

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.4

>class MyCls { >... >int ins_hensu = 0; >... >public void ins_method() { >... これは、何かの問題なのでしょうか? 可能ならば、こんな問題は解かない事が得策です。 クラス名から変数名,メソッド名が基本的なJavaの名付規約に 反していますし、全く無意味な名前になっていることがまず問題です。 この様な問題を解いていっても、全くオブジェクト指向設計の考え方が 身に付くわけではないので、注意が必要です。 言ってみれば、覆面算や数独といった数字パズルをいくら解いても、 数学のセンスは全く磨かれないのと同じです。 オブジェクト指向設計の最大の利点のひとつは、実用的で現実的な問題を オブジェクトとして定義できて、その解決手段を単純なメソッドの組合せで、 現実に即した方法で解決が図れるという点です。 ですから、非現実的なオブジェクト(クラス)を定義することには、 全く意味がありませんし、その様なクラスならば誰が見ても理解できないような クラスを作ることも簡単にできますし、それが解ったからと言って何の意味も ありません。 この問題を考えるような時間が有るのならば、統合開発環境を入手して、 デバッガやプロファイラ等の使い方からJavaDocの書き方等をマスターすべきです。 いまどき、テキストエディターでプログラミングを書いて、コマンドプロンプトで コンパイルするような方法を知っていることは、これも全く意味がないでしょう。

somehow123
質問者

お礼

回答ありがとうございます。 これは今勉強に使っている本の 練習問題です。

  • jyugemu55
  • ベストアンサー率68% (11/16)
回答No.3

意見が分かれるところですが、私は、今のあなたのレベルならば、eclipseなどの開発環境を使うのはお勧めしません。 例に出ているプログラムの出力内容が、どうしてそうなるのかということが、キチンと理解できるようになる事が大事だと思います。 簡単にヒントだけ書きます。 ・System.out.println(引数);の引数は、参照型の場合は暗黙のうちにtoString()メソッドが呼ばれます。 ・toString()メソッドをオーバーライドしていないクラスは、スーパークラスのtoString()メソッドが呼び出されます。 ・ObjectクラスのtoString()メソッドの実装は「クラス名@XXXX」という文字列を返します。 本を何度も読み返してみてください。 そして何度もソースコードを追いかけてみてください。 理解できるまで何度も繰り返してください。 本当にJavaを理解したいのであれば、この回り道が必要だと考えます。 ※なんちゃってサンデーアマグラマーで良ければ、いきなりeclipseで楽すればいいと思いますけどね。(eclipse本当に楽ですからねぇ)

  • mw43
  • ベストアンサー率0% (0/1)
回答No.2

何がしたいのかわかりませんが、どの行を反映して出力されているかの回答は通りです。 public class JaCls06 { public static void main(String args[]) { MyCls1 bbb = new MyCls1(); bbb.name = "AAA"; bbb.count = 111; bbb.look();  ⇒名前AAA個数111 System.out.println(bbb);  ⇒MyCls1@19821f MyCls2 dd = new MyCls2(); dd.name = "BBB"; dd.count = 2222; dd.look();  ⇒なまえBBBこすう2222 System.out.println(dd);  ⇒MyCls2:name = BBBcount=2222 String ee; ee = dd.toString(); System.out.println(ee);  ⇒MyCls2:name = BBBcount=2222 } } dyna_1550さんのアドバイス通り、トレースすれば一発でわかります。 上記はeclipseのデバッグによりステップオーバーで確認しました。 (ものの1分とかかりません)

somehow123
質問者

お礼

回答ありがとうございます。 Java入門の本の通りに進めているのですが、何度読んでもわからないために質問させていただきました。 常に煮詰まってますが、がんばります。。。

  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.1

eclipseやNetBeansなどの統合環境を利用することをおすすめします。 ブレークポイントを利用すれば、どのように実行しているかトレース できますので。 変数の内容も、いつセットされたか、詳細にたどれます。

somehow123
質問者

お礼

回答ありがとうございます。 eclipseやNetBeansを使ってみましたが、これを使いこなすのもまた勉強がさらに必要ですね。 がんばります。。。。 めげそう。

関連するQ&A

  • toString()メソッドについて

    ある本に、 ------------------------------------------------------------------------- System.out. println(car1); 特に何も準備せずに上のコードを記述すると、Objectクラスから継承したtoString()メソッドが呼び出されます。 そしてこのtoString()メソッドの戻り値となっている「Car@数値」という文字列が画面に出力されるようになっているのです。 ------------------------------------------------------------------------- と書いてありましたが、toString()メソッドの戻り値となっている「Car@数値」という文字列が画面に出力とはいったいどういう意味でしょうか?

    • ベストアンサー
    • Java
  • 内部クラスのインスタンスを動的に取得したい

    class test {   public test(String str){     try{       Class c = Class.forName("test$TESTSUB" + str);       c.newInstance();  // ココでエラー     }catch(Exception e){       e.printStackTrace();     }   }   public static void main(String[] args){     new test(args[0]);   }   class TESTSUB1 {     public TESTSUB1(){       System.out.println("# " + toString());     }   }   class TESTSUB2 {     public TESTSUB2(){       System.out.println("# " + toString());     }   } } 上記のようなコードにより、内部クラスのインスタンスを 動的に得たいと思っていますが、エラーとなってしまいます。 エラー回避方法、または他にいい方法がありましたら、 ご教示のほどよろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaのコンパイルエラーについてです。

    「これならわかるJava」という本でjavaを勉強してます。 以下のソースコードをコンパイルした所、 「注:DogList.java の操作は、未チェックまたは安全ではありません。 注:詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください」 と、表示されます。 ネットで色々と調べてみましたが上手く行きません。 よろしくお願い致します。 import java.io.*; import java.util.*; class Dog { private String name; private int energy; public Dog(String n, int e){ name = n; if(e < 0) e = 0; energy = e; } public Dog(){ this("未定",50); } public void bark(){ if(energy == 0){ System.out.println("お腹が減ってほえられないよ。"); return; } System.out.println("わん、わん!"); energy--; } public void intro(){ System.out.println("僕の名前は" + name + "だ。わん。"); System.out.println("エネルギーは" + energy +"だ。わん。"); } public void eat(int e){ if(e < 0){ System.out.println("マイナスは与えられません。"); return; } energy += e; } public String getName(){ return name; } public void setName(String n){ name = n; } public int getEnergy(){ return energy; } public void setEnergy(int e){ if(e < 0) e = 0; energy = e; } public String toString(){ return "僕の名前は" + name + "だ。わん。\n" +"エネルギーは" + energy + "だ。わん。" ; } } class DogList { public static void main(String[] args) throws IOException { Vector dogs = new Vector(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str, name; int n, energy; for(;;){ System.out.println("名簿:どうしますか?"); System.out.println("1 一覧 2 追加 3 終了"); str = br.readLine(); n = Integer.parseInt(str); if(n == 1){ for(int i = 0; i < dogs.size(); i++){ ((Dog)dogs.elementAt(i)).intro(); System.out.println("-----"); } } else if(n == 2){ System.out.println("名前を入力:"); name = br.readLine(); System.out.println("エネルギーを入力:"); str = br.readLine(); energy = Integer.parseInt(str); dogs.addElement(new Dog(name, energy)); } else{ break; } } } }

    • ベストアンサー
    • Java
  • 以下のコードのどこが問題なのでしょうか?

    java初心者です。よろしくお願いいたします。以下のコードはどこに問題があるのでしょうか?よろしくお願いいたします。 public class Sample2 { public static void main(String[] args1,String[] args2) { MyObject object = new MyObject(); object.setName("mikel" , "jun"); String s = object.getName(); System.out.println(s); } } class MyObject { String name; public void setName(String str1,String str2) { name = "str1"+"str2"; } public String getName() { return name; } }

    • ベストアンサー
    • Java
  • 親クラスと子クラスのフィールドとメソッドについて

    親クラスと子クラスのフィールドとメソッドについて 以下のサンプルソースを実行した時の動作の原理について 教えてください。 oya型変数にkoクラスのインスタンスを作成した場合、 メソッドはkoクラスのものなのに、 フィールドはoyaクラスのものになるということが イマイチすっきり理解できません。 どういうことなんでしょうか。 ------------------------------------------------------- [ソース] public class exec { public static void main( String args[]){ oya obj = new ko(); System.out.println(obj.str_field); obj.disp_field(); } } public class oya{ String str_field="親実行"; public void disp_field(){ System.out.println(str_field); } } public class ko extends oya { String str_field = "子実行"; public void disp_field(){ System.out.println(str_field); } } ------------------------------------------------------- [実行結果] > 親実行 > 子実行 -------------------------------------------------------

    • ベストアンサー
    • Java
  • ArrayListを使ったクラスの作成の仕方

    次のプログラム、どこが間違っているのでしょうか? コンパイルは通るのですが、実行しようとすると ずら~っとエラーが出てしまいます。 (例)at java.lang.ClassLoader.defineClass1(Native Method) at java.security.SecureClassLader.defineClass..... at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) ********************************************************** package siryou; import java.util.ArrayList; import java.io.*; class Info { private String name; private String age; private String nationality; public void setName(String nm) { name = nm; } public void setAge(String a) { age = a; } public void setNationality(String nt) { nationality = nt; } public void show(String j) { System.out.println("「名前=" + name + "」"); System.out.println("「年齢=" + age + "」"); System.out.println("「国籍=" + nationality + "」"); } } class Kojinjyoho02 { public static void main(String args[])throws IOException { System.out.println("何回入力しますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); Info in = new Info(); ArrayList list = new ArrayList(); for(int i =0; i < res; i++){ System.out.println("名前は?"); str = br.readLine(); in.setName(str); System.out.println("年齢は?"); str = br.readLine(); in.setAge(str); System.out.println("国籍は?"); str = br.readLine(); in.setNationality(str); list.add(in); } for(int j=0; j < list.size(); j++){ String jyoho = (String)list.get(j); in.show(jyoho); } } }

    • ベストアンサー
    • Java
  • ArrayクラスとtoStringについて

    問題集で次のプログラムを見掛ました。 public class Main{  public static void main(String args[]){   int[] array = new int[0];   System.out.println(array);  } } これを実行するとprintlnメソッドで toStringメソッドが呼び出されますが、 ArrayクラスはObjectクラスを継承しているため、 toStringメソッドもObjectクラスから継承されているので、 結果として、配列の要素数が0であっても、 エラー等が発生せずハッシュコードが表示される、ということです。 ObjectクラスのtoStringメソッドが ハッシュコードを返すものであるのは理解できます。 でも、なぜ要素数が1以上で何かしらの要素が存在する場合は、 ハッシュコードが返らないのでしょうか? 詳しい方、解説をお願いします。

  • Javaの参照渡し

    以下のようなプログラムで望むような結果(下に書いてある実行結果)は得られるでしょうか。 class HelloWorld {   public static void main(String[] args)   {     String str;     makeString1(str);     System.out.println(str);     makeString2(str);     System.out.println(str);   }   public static void makeString1(String str)   {     String words = "HelloWorld!";     str = words;   }   public static void makeString2(String str)   {     str = "HelloWorld!!";   } } ---実行結果--- HelloWorld! HelloWorld!!

    • ベストアンサー
    • Java
  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • メソッドのオーバーライド(java)

    class A3{ void hello(){ System.out.println("A3"); } void hello(int i){ System.out.println("A3"+i); } } class B3 extends A3{ void hello(){ System.out.println("B3"); } } class C3 extends B3{ void hello(String s){ System.out.println("C3"+s); } } class MethodOverriding3{ public static void main(String args[]){ A3 obj = new C3(); obj.hello(); } } 上のプログラムを実行すると"B3"と表示されまが、どうしてクラスBのメソッドが実行されるのでしょうか? クラスAのメソッドが無視される仕組みがわかりません。 また、クラスMethodOverriding3でobj.hello("abc")としてコンパイルすると mo.java:25: シンボルを見つけられません。 シンボル: メソッド hello(java.lang.String) 場所 : A3 の クラス obj.hello("abc");   ^ エラー 1 個 とエラーが出ます。 どうしてでしょうか? 誰か教えてください、お願いします。

    • ベストアンサー
    • Java