• ベストアンサー

インスタンスフィールドの初期化方法

komi1341の回答

  • ベストアンサー
  • komi1341
  • ベストアンサー率65% (25/38)
回答No.1

スマート、という表現が主観的なので正解はなさそうに思います。強いて言えば、一つのプログラム内で意味もなく複数のやり方を混ぜて使うのはスマートじゃないだろうな、というくらいです。 参考までに、私は基本的にコンストラクタ内で初期化しています。staticな定数なら宣言時に初期化。インスタンス初期化子は使ったことがありませんし、人のプログラムでも見たことがありません。

20203
質問者

お礼

>>スマート、という表現が主観的なので正解はなさそうに思います。 そうですね。みんなの意見を聞いてみたいです。 >>一つのプログラム内で意味もなく >>複数のやり方を混ぜて使うのは >>スマートじゃないだろうな 確かに。 >>私は基本的にコンストラクタ内で初期化しています 私はいつも宣言時に初期化していました。 宣言時に初期化かつコンストラクタでも同じ値で初期化するのは、意味のないことでしょうか。

関連するQ&A

  • 科目を扱うためのフィールドからなるクラス

    以下のように作成するクラスsubjectのjavaプログラムがわからないので教えてください。 1.フィールド名はenglish,literature,mathematicsとし、型はすべてintとする。アクセス修飾子はどこからでも参照できるようにする(インスタンス変数) 2.コンストラクタはデフォルトのコンストラクタと1.のフィールドに値を設定するためのコンストラクタの2つを用意する。

  • 抽象クラスのインスタンスフィールドの初期化について

    早速ではございますが質問をさせていただきます。 抽象クラスのインスタンスフィールドは、いつ初期化が 行われるのでしょうか?どうかご教授のほどよろしくお願 いします。

    • ベストアンサー
    • Java
  • メソッドの引数としてのthisの意味

    java初心者です。教えてください。 メソッドの引数としてのthisは何を表しているのですか? いろいろ調べてみてthisには以下の2つの使用法があることがわかりました。 1.インスタンス変数の名前とインスタンスメソッド内のローカル変数名がかぶったときに、メソッド内でインスタンス変数を表すときにthis.変数名とする。 2.あるクラスのコンストラクタ内で、同じクラスの別のコンストラクタを呼ぶときに使う。 しかし、引数としてのthisの意味がわかりません。 具体的には、addMouseListener(this);や、g.drawImage(img,10,10,this);のthisです。 後者の場合はオブジェクトgのインスタンスメソッドなので、thisはオブジェクトgへの参照を表しているのでしょうか?

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

    入社1年目のプログラミング経験0のSEです! Javaのクラスとインスタンスについてぜんぜん理解できません! 下のソースをどうしたらいいのかわからないです。 import java.io.*; class SumAndAvgMain{ public static void main(String argv[]){ BufferedReader r = new BufferedReader(new InputStreamReader(System.in),1); try{ //3教科の得点を入力しintに変換 //SumAndAvgクラスのインスタンスを作成 //合計点及び平均点を出力する。 }catch(IOException e){ System.out.println("例外発生"+e); } } } class SunAudAvg{ public static void main(String args[]){ //各教科の得点用のフィールド int kokugo; int suugaku; int eigo; //SumAndAvgクラスのコンストラクタ SumAndAvg(int kokugo,int suugaku,int eigo){ //フィールドに国語の点数を代入 //フィールドに数学の点数を代入 //フィールドに英語の点数を代入 } //3教科の合計点を求める int getGoukei(){ } //3教科の平均点を求める double getHeikin(){ } }

  • インスタンス変数の特殊な参照

    次のようなクラスを考えたときに(特に意味があるものではないですが) 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の値を 参照することって出来ないのでしょうか? 変数をクラス変数にする、引数として渡す以外の方法を探しています。

  • C++変数宣言時のコンストラクタについて

    Java開発をこれまでやってきたのですが、 C++を学ぼうとしています。 C++では下記のように宣言した場合hogeは インスタンスになり、Hogeクラスのコンストラクタが呼ばれるようなのですが、 Hoge hoge; Hogeクラスのコンストラクタが下記のような引数を持つものしか定義されていなかった場合は どの様な振る舞いをするのでしょうか? Hoge(int num); Javaでは引数の有るコンストラクタしか宣言しなかった場合はデフォルトコンストラクタは 作られなかったと思うのですが、c++では引数のないデフォルトコンストラクタができてるのでしょうか? また、デフォルトコンストラクタが出来ていなかった場合、 Hoge hoge; というようにプリミティブ型のような変数宣言の仕方で引数有りのコンストラクタを呼ぶことは出来るのでしょうか?

  • PHP5 コンストラクタや初期化の意味がわからない

    プログラミング初心者です。本を参考にしてPHPを勉強しています。 クラスの章でコンストラクタについて以下のように書かれていました。 コンストラクタはインスタンス化のタイミングで実行されるという性質上、 プロパティ(メンバ変数)やクラスで使用する各種リソースの初期化 といった処理を記述するのが一般的です。 初期化処理が不要な場合、コンストラクタは省略可能。 ここで質問です。 インスタンス化を行うのは初期化するためということでしょうか? 「~といった処理を記述するのが一般的」ということは、初期化が 本来の目的ではないという意味にもとれますがどうなんでしょうか。 また静的メソッドについては、 「インスタンス化を行わなくても利用できるメソッド」 と書かれていましたが、何がどう違うのか分かりません。 初期化とは何でしょうか?またなぜ初期化を行うのでしょうか? 静的メソッドと何が違うのでしょうか?

    • ベストアンサー
    • PHP
  • STL vectorの初期化

    STL vectorの初期化についてなんですが 以下のようなクラスのprivateなメンバ変数としてvectorを定義し それをメソッド内のループ処理にて初期化しながら使用したいのですが 初期化の仕方が分かりません。コンストラクタを呼べば初期化されるようですが 以下のようにヘッダとソース内で2度同じような宣言をしてしまっても問題ないのでしょうか? //=== test.h === class test { private : vector<int> array; public : int fnc(); }; //=== test.c === int fnc() { for (int i = 0; i < 10; i++) { //★ここで初期化したい vector<int> array;  ←これで問題ないか? for (int j = 0; j < 10; j++) { array.push_back( md ); } } } C#などでは宣言とインスタンス生成を別に分けられたのですがC++も同様の事が出来るのでしょうか? 一応「array = new vector<int>;」といれて見たのですがエラーが出ました。

  • ご教示ください。

    ご教示ください。 javaで日付操作をやっています。 通常、クラスのインスタンスを作成する場合 クラス名 変数名 = new クラス名(); ですが、カレンダークラスを使用した際に Calender 変数名 = Calender.getInstance(); と出てきました。 Calenderクラスにある、getInstanceメソッドを呼び出していると思います。 クラスをインスタンスすることで、そのクラス内にある、メソッドやフィールドを初期値で使えて(コンストラクタがない場合)と認識しています。 インスタンスで、直接、メソッドを呼び出せる場合があるのでしょうか?

  • フィールド、インスタンス変数、プロパティ、…

    フィールド、インスタンス変数、プロパティ、… C++では、クラスの構成要素はメンバと呼ばれ、メンバには変数と関数と二種類あり、変数は、 (1)メンバ変数(オブジェクトがデータを保持するメンバである事を強調する為、別称データメンバ) 関数は、 (2)メンバ関数 と、とってもクリアに呼ばれていました。 ところがJavaになって、メンバ変数が (1’)フィールド メンバ関数が (2’)メソッド と呼ばれるようになりました。 さらに(1’)が、 (1’’)インスタンス変数 (1’’’)プロパティ という風にも呼ばれるようになり、(1')と(1'')と(1''')が、混同して呼ばれるようになりました。 多くの人は、 「それらは "interchangeable" で同じ意味で用いられるものなのだ」 という根拠がよくわからない『解説』をしますが、同じ意味ならば同じ用語を使った方が全体がスッキリ且つ正確に表現できて都合がいいのに、なんでいろいろな用語を混用するのでしょうか? (A)そもそも何でデータメンバをフィールドと言い換えたのか?  (a)データメンバの方が、それがデータであることを示唆していていいのでは?  (b)フィールドって、Cの構造体のフィールドから名前が由来しているのでしょうか? (A)何でわざわざ(1'')や(1''')みたいな用語を使うのか? (B)どういう意図でそういう用語を使うのか? そこら辺の事情に詳しい方がいらっしゃいましたら、お教えください。

    • ベストアンサー
    • Java