いけず言葉しりとり

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クラスのインスタンスは作られていないということだと思います。

ということは、
ここでは何をしているのでしょうか?
どなたか、教えて下さい。

A 回答 (2件)

> インスタンスを生成せずにこの様な使い方をしているのはどういう理屈なのでしょうか?



Javaのインスタンスは必ずどこかで誰かがnewで生成したものであって、生成せずにインスタンスのフィールドやメソッドを使用することはできません。
質問文にある例でも、どこかでDimensionのインスタンスが生成されています。ただし、getPreferredSize()を呼ぶ人はその詳細を知る必要はなくて「getPreferredSize()を呼べば(どこかでnewされた)Dimensionのインスタンスが返ってくる」ことだけ理解していればいいのです。
    • good
    • 0
この回答へのお礼

回答有難うございます。
なるほど、インスタンスはどこかで誰かが必ず生成したものであって、生成せずにインスタンスのフィールドやメソッドを使用することはできない。

覚えておきます。

昨日からずっと気になっていました。やっと先に進めます。

>getPreferredSize()を呼ぶ人はその詳細を知る必要はなくて「getPreferredSize()を呼べば(どこかでnewされた)Dimensionのインスタンスが返ってくる」ことだけ理解していればいいのです。

なるほどー。

有難うございました。

お礼日時:2011/10/02 12:10

label.getPreferredSize() の中で作ってるか何かしてるんじゃないの?

この回答への補足

回答ありがとうございます。
ちょっと、質問の仕方が悪かったようで申し訳ありません。

すいません、オブジェクト指向とかクラスという概念自体始めてなので
混乱しています。

もっと基本的なことで、
クラス名A 変数名 = new クラス名Aという使い方しか知らないので、
今回のような場合はどう解釈すれば良いのでしょう?

また、今回の場合後々dim.widthという値を使っていました。
これはDimensionクラスに有るwidthというフィールドを使っているんだと思うのですが、

インスタンスを生成せずにこの様な使い方をしているのはどういう理屈なのでしょうか?

補足日時:2011/10/01 16:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報