• ベストアンサー

変数の宣言 インスタンス

最近プログラミングを始めたのですが、 疑問点が出てきたので質問させていただきます。 実体をもっているクラスAがあり、 クラスBでクラスAを宣言するときに クラスB内で ・A a; とするのと ・A a = new A(); とするのでは何が違うのでしょうか? よろしくお願いいたします。

  • Java
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
noname#94983
noname#94983
回答No.2

A a; これは、ただ単に「クラスAのインスタンスを保管するための変数aを用意する」というだけ。変数aは用意されたが、そこにはクラスAのインスタンスは、まだない。つまり「なにもオブジェクトがない、空っぽの変数」だと思えばいい。だから、この後、どこかで必ず変数aにインスタンスを代入してやらないといけない。 A a = new A(); これは、「クラスAのインスタンスを保管するための変数aを用意し、Aのインスタンスを作ってこれに設定する」ということになる。new A()でクラスAのインスタンスが作成され、それが用意された変数aに代入される。

その他の回答 (1)

  • akinaga
  • ベストアンサー率60% (14/23)
回答No.1

私は、 (1) A a; ⇒ 宣言 (2) A a = new A(); ⇒ 定義 と呼んでいます。 違いは建物で例えると(1)は設計図、(2)は建物本体と 認識してます。つまり、定義しなければプログラムの機能として 動かないということです。

関連するQ&A

  • newしないインスタンス?実体化しなくてもいいの?

    JAVAについて教えて下さい。 ServletContext application = getServletContext(); の成り立ちの意味なのですが、newがなぜないのか教えて下さい。 ~自身の考え~ (1)サーブレットコンテキストというクラスをインスタンス化して (サーブレットコンテキスト 変数A = new サーブレットコンテキスト();)     ↑                         ↑   クラス                       クラス (2)変数Aドットメソッド()によって、代入変数Bを作り上げる (サーブレットコンテキスト 代入変数B = 変数A . メソッド();) (3)のはずが、上記の式にはnewがありません。 なんで?? ~~ ~疑問点~ もしかしたらHttpServletでimportしているからそこでnewインスタンス化宣言している? だとするならどのような式になっているのでしょうか。 もしくはメソッドのF3キーとして上位をたどったときに出てきた public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { public ServletContext getServletContext() { return getServletConfig().getServletContext(); } } として抽象クラスが出てきましたが、どこにもnew実体化していません。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • インスタンス変数の特殊な参照

    次のようなクラスを考えたときに(特に意味があるものではないですが) class A{ int a; A(){ a = 10; B b = new B(); } } class B{ int b; B(){ b = 20; C c = new C(); } } class C{ int c; C(){ c = 20; } } Cのコンストラクタの中から、Aのインスタンス変数aやBでのbの値を 参照することって出来ないのでしょうか? 変数をクラス変数にする、引数として渡す以外の方法を探しています。

  • クラスでnew宣言

    いつも御世話になっています。 クラス作成時に、 オブジェクト型(クラス型)を変数として宣言している時がある気がするのですが、ClassB classB = new ClassB(); この場合の利点は何かあるのでしょうか? 普通に考えれば、この記述を宣言することで、この宣言がされているクラス自身が、ClassBの実体を持つことになり、このクラスだけで多数のクラスの実体を利用できるようになる。 と思ったのですが。 クラスとしては、 ClassA { private ClassB classB = new ClassB(); } という場合です。 ここで、private ClassB classB;でない理由: むやみに、上記の書き方をすると、外部から書き換えられてしまう恐れがあるから、、なるべくその可能性を回避するため 宜しくお願いします。

    • ベストアンサー
    • Java
  • パブリック変数を宣言する時に・・・

    エクセルVBAの質問です。 モジュールAとBがあるとしまして、 Aの中にあるプロシージャからBの中のプロシージャを呼び出す場合、 変数を引き渡したいとしたらパブリック変数を使いますよね? この場合宣言は、 Aの宣言セクションでするのか、 Bの宣言セクションでするのか、 あるいは両方で同じ変数を宣言するのか、 どれなんでしょ?

  • Form1で宣言したインスタンスをForm2で使う

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが、あるフォームで宣言したインスタンスを別のフォームで使う方法がわかりません。具体的にソースコードで説明すると using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace tesuto {   public partial class Form1 : Form   {     class Car     {       public int a;     }     public void Form1_Load(object sender, EventArgs e)     {       Car bike = new Car();//ここで宣言したインスタンスを       bike.a = 10;       Form2 fm2 = new Form2(this);       fm2.Show();     }   }   public partial class Form2 : Form   {     public void Form2_Load(object sender, EventArgs e)     {       int b;       b = bike.a;//ここでこのように使いたい     }   } } ということです。 前も似たような質問をさせていただき、たくさんの回答をいただいたにも関わらず自分のプログラム能力が低く、理解できませんでした><。なのでよければ、回答は言葉だけではなくこの上のソースコードを基にして(コピペ貼り付けなどで)、すこしでいいですのでソースコードを書いていただけませんでしょうか。 また、プログラミングを初めてまだ間もないので、すこし初心者向けでお願いします。 質問する側なのに色々要求をして申し訳ないのですが、もし御面倒でなければ御回答をお待ちしております。 よろしくおねがいします。 

  • インスタンスのハンドル

    Windowsプログラミングにおいて、 ウィンドウのハンドル等などはピンとくるのですがインスタンスのハンドルというのがいまいちピンときません。 いろいろ調べたのですが、インスタンスを「実体」と解説しているサイトが多かったのですが、(たとえばここ)http://ew.hitachi-system.co.jp/w/E382A4E383B3E382B9E382BFE383B3E382B9.html ただウィンドウを表示させるようなプログラムをつくったとき、何が「実体」で、インスタンスのハンドルとはどういった働きをするのでしょうか。。

  • 別のクラスのインスタンスの作り方

    現在、javaからrubyに移行するために勉強しているのですが、別のファイルに定義したクラスのインスタンスが作成できなくて、困っています。 具体例をあげると require './B' class A end def initialize b = new B end end --別のファイル class B def initialize p 'hello' end  public : initalize end こんな2つのファイルがあったとして、Aのインスタンスを作成すると、 undefined method `B’ というエラーがでます。 私としてはこのエラーの原因がinitializeがデフォルトでprivate宣言なのが原因だと考えているのですが、publicと指定してもエラーとなることから、いくつか疑問が湧いたので質問させていただきます。 1、そもそもBクラスのインスタンスが作成できないのはinitializeがデフォルトでprivate宣言なのが原因なのか? 2、1があっていたと仮定するとBクラスのinitializeをpublic指定しているのになぜ呼び出せないのか? 3、rubyはなぜデフォルトでinitializeがprivateなのか?(javaではコンストラクタをprivateにするということは普通はしない。使うときはシングルトンやUtilのようなクラスを作るときに限る) 以上です。よろしくお願いします。

    • ベストアンサー
    • Ruby
  • 「static宣言されているメンバ関数」は、「インスタンスメソッド」な

    「static宣言されているメンバ関数」は、「インスタンスメソッド」なのでしょうか? それとも、「クラスメソッド」なのでしょうか? 先日、下記内容で質問して、その時は分かったつもりだったのですが、 やっぱり分かってなかったようなので、教えてください。 ▽「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。   http://okwave.jp/qa/q5858806.html 例) ▽前提 ・Aクラスのインスタンスa ・static宣言されたpublicメソッド「static_public_method」 ・static宣言されていないpublicメソッド「public_method」 ▽メンバ関数呼び出し ・$a->static_public_method() ・A::static_public_method() ・A::public_method() このとき、「$a->static_public_method()」は、インスタンス経由でアクセスすることになるので、 「インスタンスメソッド」になるのでしょうか。それとも、static(静的)宣言しているので、「クラスメソッド」になるのでしょうか? また、「A::static_public_method()」や、「A::public_method()」は、どちらになるのでしょうか? ※現在、頭の中がこんがらがっているのは、下記3点です。どれかひとつでも構わないので、分かりやすい考え方等あれば、ぜひ教えてください。 ・「static宣言したメンバ関数」は、「インスタンスメソッド」? 「クラスメソッド」? ・「スタティック」宣言してるのに、メンバ関数へ、「->(アロー演算子)」(オブジェクト経由)でアクセスできる理由 ・「A::static_public_method()」と「A::public_method()」の違い

    • ベストアンサー
    • PHP
  • クラス構造をネストしたの宣言

    クラスA クラスB を使い、お互いに関連した構造にしたいのですが、宣言に困り質問させていただきました。 A.cpp ファイルは class A{ B b; }; のように、クラスB を含んだ状態です。クラスBもクラスAを含んだ状態です。 ここで、オブジェクトファイルを作成すべく、 $g++ -c A.cpp とすると、クラスBが宣言されておらず怒られてしまいます。 クラスBを先に宣言したり、ヘッダーファイルを作成しても、クラスBでもクラスAのオブジェクトを使っているので、やはり"定義されていない"とおこられてしまします。 C言語の関数を入籠にした場合は、プロトタイプを使用して問題を回避しましたが、クラスの場合でこれを解決する手段がわからず質問させていただきました。 どうかご教授ください。

  • インスタンス化されているかの情報を 知るメソッド

    VisualStudioC#で Aというクラスがあり、それを B,Cというクラスでインスタンスで使用したとします。 A: { ?????? } B: { A a = new A(); } C: { A a = new A(); } Aクラスの中の処理でB,Cのどちらでインスタンス化されているのかという情報を 知るメソッドはあるのでしょうか? ちなみにインスタンス化するときにAに引数などを送り込まないこととします。

専門家に質問してみよう