• 締切済み

ご教示ください。

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

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

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

staticメソッドとインスタンスメソッドの違いをまだ学修されていないと見受けます。 staticメソッドの例として、java.lang.Math クラスのメソッドは全部staticメソッドなのでいちいちMathクラスのインスタンス作成はしません。クラス名.メソッド名() で呼び出します。 double x = Math.sqrt(data); java.util.Calendar クラスは、シングルトンパターンという作りになっていて、コンストラクターは、外部から呼び出せません(無いわけではない隠蔽されてるだけ)。 static メソッドである getInstance()のなかでのみインスタンス作成可能で、一回作ったら、static private fieldに保持して、このインスタンスを返します。 次回のgetInstance()実行からは、前回作ったインスタンスを返します。

関連するQ&A

  • クラス、インスタンスメソッドについて

    JAVA初心者です。 現在、先人が作ったプログラムの修正作業を行っておりますが、 以下の点に疑問があります。(因みに、先人はJAVAのスペシャリストではありません。) あるクラスが以下の様になっております。 public class Sample { private static Sample s = new Sample(); private Sample() { } /** クラスメンバに存在するインスタンス取得 * @return Sampleクラスの唯一のインスタンス */ public static Sample getInstance(){ return s; } public static void methodA(){ ... } } でこのmethodAを使用するには、以下の様にします。 Sample.getInstance().methodA() これはこれで納得で、うまく動作しますが、これは 結局の所、クラスメソッドにしたかったという事ではないのかな?と 疑問に感じています。つまり、単純に Sample.methodA と呼び出せばうまくいきます。 ところが、たまたまAPIドキュメントを見ていた所、Calendarクラスにもやはり getInstanceというものが存在し、現在日時を取得するのに Calendar.getInstance().getTime() の様に呼び出すと書いてありました。 Sampleクラス、JAVAのCalendarクラス(これに限った事では無いとは思いますが) のこれらのgetInstanceの効用とはなんなんでしょうか? ・クラスの外でnewでインスタンスを作り出さない所 ・それでいてクラスメソッドではない(?)所 この辺りについてご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • javaでのコンストラクタの実行

    javaでのコンストラクタの実行 フィールドにHello a=new Hello(); とかいてメインメソッドにもHello b=new Hello(); とかくとaインスタンスとbインスタンスのどっちのコンストラクタが先に実行されるんですか? よろしくお願いします。

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

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

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

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

    • ベストアンサー
    • PHP
  • 科目を扱うためのフィールドからなるクラス

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

  • Calendarクラスのフィールドは、クラス変数?インスタンス変数?どちらですか?

    宜しくお願いします。 Calendarクラスのフィールドの、Calendar.YEARなどは、 Calendarというクラス名で修飾されているので「クラス変数」ですよね。 クラス変数なので、全てのインスタンスで共有されているはずです。 なので、あるインスタンスから、Calendar.YEARに変更を加えると、全てのインスタンスに 変更が適用されると思うのですが、そうなりません。何故でしょうか。 例えば以下のようなコードを書いた場合、このように出力されます。 2008年10月6日 2009年10月6日 2008年10月6日 YEARはクラス変数なので、3つ目の出力も2009年になると思ったのですが、YEARは 各インスタンスで所有されているようです。 (上手くインデントできないようでして、読みにくいコードで失礼します) import java.util.*; public class DateTest { public static void main(String[]args){ Calendar cal = Calendar.getInstance(); showDate(cal); Calendar cal2 = Calendar.getInstance(); cal2.add(Calendar.YEAR, 1);//ここでCalendarのクラス変数を変更している showDate(cal2);//変更が適用されている showDate(cal);//変更が適用されていない?なぜ? }  //Calendarインスタンスの年・月・日を出力する public static void showDate(Calendar cal){ System.out.println(cal.get(Calendar.YEAR)+"年"              +(cal.get(Calendar.MONTH)+1)+"月" +cal.get(Calendar.DATE)+"日"); } } プログラムは嘘をつかないので、自分の理解が誤っていると思います。 どなたか解決する知識をお持ちの方、どうぞご教示ください。 (初心者ですので、できれば、ほどほどのレベルの説明でお願いします。) 宜しくお願いします。

  • thisキーワードについて確認

    下記の確認事項が正しいかどうか、yesかNoかで判定してくださいましたら幸いです。 確認1:thisは、現在実行中のオブジェクト自身をあらわす参照型変数。 確認2:『インスタンスメソッドやコンストラクタから他のメソッドやメンバ変数を参照する場合、 オブジェクト変数を指定せず参照することができるが、それは、インスタンスメソッド、コンストラクタは現在のオブジェクトを表すthisを持っているため。単純名で参照されているインスタンスメンバは、 実はコンパイラによりthis.単純名に変換されている。 クラスメソッドは個々のオブジェクトに属さないため、メソッド内にthis を持っていないので、thisは使えない。』

    • ベストアンサー
    • Java
  • インスタンス化について(ポリモーフィズムについて)

    Java初心者です。 Javaの書籍で、ポリモーフィズムを説明している箇所において オブジェクトを生成する際に、以下のような書き方をしているのを見ます。 1.----- スーパークラス名 オブジェクト名 = new サブクラスのコンストラクタ名(); -------- 上記は、 何を実現する為に、左辺と右辺のクラス名とコンストラクタ名を変えているのでしょうか? (もちろん詳細は実際に書かれたメソッドや変数によると思いますが、一般的な話として。) また併せて、 2.----- サブクラス名 オブジェクト名 = new サブクラスのコンストラクタ名(); ------- と書いた時とでは、使用(アクセス)出来るメソッドや変数、 生成されたオブジェクトの中身が、どのように変わってくるのでしょうか? 2.の方法では、何が実現出来ないのでしょうか? 教えて下さい!

    • ベストアンサー
    • Java
  • インスタンスフィールドの初期化方法

    クラスのインスタンスフィールドを初期化する場合、次の3つが考えられますが、どれが一番スマートなんでしょうか。 クラスQ1はインスタンス変数int xを持つとします。 1.コンストラクタ内で初期化 e.g. Q1() {this.x = 1;} 2.宣言時に初期化 e.g. int x = 1; 3.インスタンス初期化子内で初期化 e.g. { x = 1; } Q1(){}

    • ベストアンサー
    • Java
  • Dimensionクラスの使い方

    Javaを始めたばかりの者です。 参考書を読みながら進めていて下記のソースコードで Dimensionクラスを使用している箇所で行き詰まりました。 使われていたのは、以下のコード --------------------------------------------------------------------------------------------------------------------- import java.awt.*; import javax.swing.*; import java.util.*; class xxx{  static public void main(String[] argv){  /*標準入力からmsgに文字列を入力*/  String msg = scan.next();  /*JLabelクラス型のオブジェクト型変数を作成し、インスタンスを生成*/  JLabel label = new JLabel(msg);  /*JLabelのインスタンスのコンストラクタに入力されたmsgのサイズを取得*/  Dimension dim = label.getPreferredSize();  ・・・etc  } } ---------------------------------------------------------------------------------------------------------------------- 自分が今まで使ってきたクラスは下記のような感じで使っていましたが、ここではnewしていない。 これは、どういうことなんでしょうか? クラス名 dim = new クラス名(); インスタンス作成 = コンストラクタの呼び出し。 new演算子はクラスのコンストラクタを呼び出している理解ですが Dimension dim = label.getPreferredSize(); 上記のコードではDimentionクラスのインスタンスは作られていないということだと思います。 ということは、 ここでは何をしているのでしょうか? どなたか、教えて下さい。

    • ベストアンサー
    • Java

専門家に質問してみよう