• ベストアンサー

new クラス名(); が必要なとき   必要ないとき

class Sample { public static void main(String args[]) { Car car1; car1 = new Car(); Car car2; car2 = car1; car1 = null; ・・・・・・・      ・・・・・・・      ・・・・・・・ } } 途中省略してあるのですが、このようなソースコードがありました。 car2オブジェクトはなぜ宣言だけでいいのでしょうか? car1のように、new Car(); は何故必要ないのでしょうか?これで何故代入ができるのかわかりません。 どのようなときに、new クラス名(); が必要なのでしょうか? 宜しくお願いします。

noname#114571
noname#114571
  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

car1,car2は、参照で、いわゆるCでいうポインタみたいなもので、newしたときに実体が作成されて、 car1 = new Car(); としたら、car1が、newで作成したオブジェクトを指すようになります。 car2 = car1; は、新たにコピーして代入されるというのではなく、 (新たにコピーして代入される場合もありますが) その単に参照先をコピーしたということで、 car1に対する操作とcar2に対する操作は同じになります。 >どのようなときに、new クラス名(); が必要なのでしょうか? 初期化する時(実体が必要な時)に、必要だと思います。

noname#114571
質問者

お礼

あーなるほど、そういうことだったんですね。 ありがとうござました。

その他の回答 (1)

  • RAPTsong
  • ベストアンサー率42% (74/175)
回答No.2

この結果、car2 は car1 と同じ物を指していることになります。 実体は1つで、それを参照しているのが、car1 と car2 ということになります。 なお、car1 = new Car(); も代入文です。 new Car() で作成されたインスタンスを car1 に代入しています。

noname#114571
質問者

お礼

ありがとうございました。 >car1 = new Car(); も代入文です そうですよね。本にもそうありました。

関連するQ&A

  • クラス名はどうするのですか?

    package ex7; public class Sample { public final static int VALUE = 100; } package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } 上記のプログラムのクラス名は何をつければいいですか・・・? 同じくプログラム名は何と付ければいいですか・・・? ご多忙中恐れいります・・・。 ご回答の程宜しくお願い申し上げます。 回答者 これが、素人さんには分かりにくいんですね。 mkdir ex7 で、ex7 というディレクトリを作製して、 その中に、 Sample.java を public class Sample { public final static int VALUE = 100; } で、 Main.java を package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } で作製して、 ex7 の中から出て、 javac ex7/Sample.java javac ex7/Main.java でコンパイルします。 質問者 度々すいません・・・。 ファイル名は何にすればいいですか・・・? ご回答がなかなか来ません。

    • ベストアンサー
    • Java
  • 初歩的な メソッドの引数について

    参考書のサンプルなんですが、 Carクラスのメソッドの引数のところで num = n と代入しているのですが、 これを直接void setNum(int num)としたほうがらくだと思うのですがなにか意味があるのでしょうか? class Sample4{ public static void main(String args[]){ Car car1 = new Car(); car1.setNum(33); } } class Car{ int num; void setNum(int n){ num = n; System.out.println("台数" + num); } }

    • ベストアンサー
    • Java
  • mainクラスのpublicの意味を教えて下さい

     お早う御座います、JAVA初心者です、宜しくお願いします。  main クラスの public をコメントアウトしてもエラーもなく走ります。  これは、「public static void main(String[] args)」を持っているクラスを自動的に「main クラス」と判断しているということでしょうか。 ============================================================ class Sub { void disp() { System.out.println(" a "); } } /*public*/ class Main { public static void main(String[] args) { Sub s = new Sub(); s.disp(); } }

    • ベストアンサー
    • Java
  • クラスメソッドのみのクラスのオブジェクト生成は不可??

    あるテキストのjavaの問題です。 public class Draw{   static void pixel(int x,int y){     /*座標(x、y)に点を描画*/   }   static void line(int x1,int y1,int x2,int y2){     /*座標(x1、y1)~(x2、y2)に線を引く*/   } } で、これを実行するための以下のようなクラス public class TestDraw{ <ここに入力> } という問題なのですが2つまでは絞れたのですが、 (1) public static void main(String args[]){   Draw d = new Draw().line(10,10,20,30); } ↑× (2) public static void main(String args[]){   Draw.line(10,10,20,30); } ↑○ (2)はlineメソッドがstaticメソッドだからオブジェクト生成しなくても良い、ということなんですが (1)も正解のような気がするのですが・・・ 解説によると「lineはvoidなのでnew Draw().line(10,10,20,30);とすれば正解、とあります。 どうもいまいち理解できません。 クラスメソッドはオブジェクト生成しなくとも良い→オブジェクト生成できない ということなのでしょうか? それからちなみに、public classって2つ記述できないんではありませんでしたか?

    • ベストアンサー
    • Java
  • クラスを呼び出した時のオブジェクト名の出力について

    ご覧いただいてありがとうございます。 java勉強中の者です。現在クラスについての勉強をしています。 質問内容ですが、クラスを呼び出した時に対象のオブジェクトの名前を表示させたいというものです。 以下、サンプルのコードを記載してその後詳しい説明をします。 class Car{//車の情報を保持 int number; //車のナンバーを保持 double gas;//ガソリンの量を保持 void show(){//車の情報を出力 NAMEの部分は後程説明します System.out.println("車のナンバーは"+ number +"です。"); System.out.println("車のガソリン量は"+ gas +"です。"); } public class Sample1{ public static void main(String[] args){ Car car1 = new Car();//car1のオブジェクト car1.number = 1111; car1.gas = 10; Car car2 = new Car(); car2.number = 2222; car2.gas = 20; car1.show(); } 以上がサンプルのプログラムです。 上記のclass Car内のvoid show()の中にあるSystem.out.printlnの2つの文あたりです。 「車のナンバーは~」の直前に、呼び出したオブジェクトの名前を出力したいのです。今回であれば、メインメソッド内の一番下の「car1.show();」のオブジェクト名を表示させたいです。 具体的には「car1の車のナンバーは1111です。」と表示させたいです。 関数か何かがあるのかと思い、少し調べてみましたが見当たらなかったため投稿させていただきました。関数が存在しないのであれば、具体的な簡単なサンプル等書いていただけるととてもありがたいです。 よろしくお願いします。 ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • Javaのガーベジコレクションについて。

    javaのガーベジコレクションの対象となるタイミングがわからないので教えて下さい。 class Sample{ Sample gc; } class SampleMain{ public static void main(String[] args){ Sample gc1 = new Sample(); Sample gc2 = new Saample(); gc1.gc = gc2; gc2.gc = gc1; gc1 = null; gc2 = null; } }

    • ベストアンサー
    • Java
  • Javaのガーベジコレクションについて

    class Sample{ Sample sm; } class SampleMain{ public static void main(String[] args){ Sample sm1 = new Sample(); Sample sm2 = new Sample(); sm1.sm = sm2; sm2.sm = sm1; sm1 = null; sm2 = null; } } このプログラムでガーベジコレクションの対象(実行される可能性がある)は何行目になりますか?

    • ベストアンサー
    • Java
  • 初心者なので教えてほしいです。

    下記のコードなんですが、どこか間違っていますか? テキスト通りに入力したはずなんですが、 『メソッド本体がないか、abstractとして宣言されています』 というエラーが出てしまいます。 どういう意味なのか分らなくて・・・ **************************************************** //車クラス class Car{ int num; double gas; } //車クラスのオブジェクトを作成する class Sample1{ public static void main(String[] args); { Car car1; car1 = new Car(); car1.num = 1234; car1.gas =20.5; System.out.println("車のナンバーは" +car1.num+ "です。"); System.out.println("ガソリンの量は" +car1.gas+ "です。"); } } *************************************************************

    • ベストアンサー
    • Java
  • java内部クラスについて

    内部クラスがstaticな場合 public class mainclass{   public static void main(String[] args) {     innerClass ic = new innerClass();   }   public static class innerClass{   } } と innerClass ic = new innerClass();で動作しnewできますが、 class が static でない場合どういう書き方になりますでしょうか? 色々と理解不足がある状況だとおもいますがよろしくお願いいたします。

  • コマンドプロンプトを使用して。

    よろしくお願いいたします。ネット上にあったサンプルコードをコンパイルし、実行したところ 「Exception in thread "main"java.lang.NoSuchMethodError: main」というメッセージが表示されたのですがどういうことなのでしょうか? コードは以下の通りです。わかる方いましたらよろしくお願いいたします。 public class Sample { public static void main(String[] args1,String[] args2) { MyObject object = new MyObject(); object.setName("mikel"); String s = object.getName(); System.out.println(s); } } class MyObject { String name; public void setName(String str) { name = str; } public String getName() { return name; } }

    • ベストアンサー
    • Java

専門家に質問してみよう