ここから本文です

解決済みの質問

簡単なことですが資格試験前なので解決しときたくて書き込みました。インスタンス...

saikodesukasoudesukaさん

簡単なことですが資格試験前なので解決しときたくて書き込みました。インスタンス変数といえば通常
class TestClass{
int a = 10;
void mthodA(){}
void mthodB(){}
}
このようなときの a のこと

(フィールドと呼ばれることもあるもの)だと思っているのですが
追加で逆引きの本を買ったのですがそこで書かれていたことは

オブジェクトの宣言
宣言したクラスを利用するには、インスタンスを作成する必要があり、インスタンスを作成するには、
インスタンス変数を宣言する必要があります。インスタンス変数の宣言は、通常の変数の宣言方
法とほぼ同様です。
中略
通常の変数を宣言した場合は、変数の実体が作成されますが、オブジェクトを宣言しても
オブジェクトの実体が作成されるわけではありません。

と、ありました。この場合のインスタンス変数は
TestClass test = new TestClass();
このときの test をさしているものだと思うのですが、自分の勘違いなのでしょうか?
自分は SUN教科書 で勉強したので極端な言い方ですが、上のほうのインスタンス変数が本当で
後述のものが間違いかと思っているのですが、どうなのでしょうか。ものによって多少の違いがあるのは
わかりますがこの場合は、呼び方ではなく、示しているもの自体が違うのではないかと思うのですが。
教えてください。

Javaを勉強するのにいいと思われる本なども教えていただけると幸いです。

違反報告

ベストアンサーに選ばれた回答

hiro_jkingさん

まず、
TestClass test = new TestClass();
を2つに分割して考えてみませんか?

TestClass test; ←これがオブジェクトの宣言
test = new TestClass(); ←これがインスタンスの生成

となっていますね。

TestClass test = new TestClass();
とは、宣言をしてインスタンスの生成まで同時に行っていると言うことです。

また、
int a = 10;
これは、変数宣言ですね。(10を代入して初期化しています。)
プリミティブ型の変数は、フィールドとかメンバ変数と呼ばれます。

本屋さんで自分のレベルにあった本を探すのが一番ですよ。
勉強がんばってください。

質問した人からのコメント

  • 回答ありがとうございました。資格試験に対して少々あせってたみたいで、皆さんの回答を読ませていただき理解できたと思います。
  • コメント日時:2008/1/18 17:55:44

グレード

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 3点(5点満点中)3人が役に立つと評価しています。

ベストアンサー以外の回答

(2件中1〜2件)

並べ替え:回答日時の
新しい順
古い順

 

tomo_ponnさん

う~ん、どうでしょうかね。
どちらもインスタンス変数というと思いますが・・・
int a = 10; の「a」
TestClass test = new TestClass(); の「test」

その逆引き本を見たことがないのでなんとも言えませんが
言いたいのは
「プリミティブな値を渡した時(値渡し)とオブジェクトを渡し時(参照渡し)で
実態?の違いがあるんだよといいたいだけなのかなと思います。

オブジェクトはクラスは直接代入しないで
TestClass test = TestClass();×
TestClass test = new TestClass();○
インスタンスを生成する必要(new)する必要があるんだよね。
(別にnew TestClass()がインスタンス変数と言っているわけではない。)
と言うことがいいたいだけなのかなと思いますがいかがでしょう。

呼び方の違いではなく、説明の受け取り方の違いだけのような気がします。

ちなみにクラス変数は下記のように記載されているものです。
static int count = 0;

私も説明がうまくないので、なにかあれば補足ででも

  • 違反報告
  • 編集日時:2008/1/18 00:51:02
  • 回答日時:2008/1/18 00:50:06

maria_salon1984さん

>宣言したクラスを利用するには、インスタンスを作成する必要があり
スタティックメソッドは無視ですかね。
>インスタンスを作成するには、インスタンス変数を宣言する必要があります
オブジェクトnewするのに他にフィールドあらたに作れというのか
しかも引数にオブジェクトとるとき
A(new B());変数にすら入れないこともあるけど。
>通常の変数を宣言
通常の変数?
>変数の実体
変数の実体?

…ってなわけで、その逆引きの本は捨てましょう。
質問者様の意図していることが正解です。

補足:
例えば
class B{
A a = new A();
}
ならaはインスタンス変数で何ももやっとこ無いのですけどね。
何というか、日本語にしてしまっているから間違っている感じはします。
日本語訳にすると「日本語正解説明java」とは異なってくることが多々あるので。
(もやっとするものに三項演算子とかありますね)

tomo_pon様の回答を読んで思ったのは
>インスタンスを作成する
= newする
ってこと。
やっぱ値渡しと参照渡しの話なんでしょうか…
デモそれにしても混乱を招く本だとは思います。
ローカルでオブジェクトをnewする時、
それをインスタンス変数と呼んでしまったら何をローカル変数と呼んで良いのか。


javaを勉強するのに良い本。
まぁ色々あるとは思いますが、
sunのsjc-pの参考書などは良くかかれてますよ。
重箱の隅をつつくようなものもありますが。
javaを理解するにはいいかもしれません。

また、評判がいいのはEffectiveJavaですかね。
javaの本はCから入った人が多いので、((String[] argsじゃなくString args[]と書いてるとか))
なかなか「コレ!」って本は難しいですかねぇ。

  • 違反報告
  • 編集日時:2008/1/18 11:41:28
  • 回答日時:2008/1/17 22:29:08
知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:Java]

ただいまの回答者

12時16分現在

2706
人が回答!!

1時間以内に4,767件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する