質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Java

    14396questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

インスタンスについて

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 233

revoiot

score 116

現在、オブジェクト指向を理解するために、javaを勉強しているのですが、インスタンスについて、あまりよく理解できないので質問させてください。

public class Main{
 public static void main(String[] args){
  Sword s = new Sword();
}


質問
上記のコードの中で、Sword s = new Sword();をいう文がありますが、sがインスタンスと呼ばれるものということでいいのでしょうか?

ちなみに、どの文献を調べても、Sword s = new Sword();は、クラス名 変数名 = new クラス名();と説明がありますが、sがインスタンスと呼ばれると書かれているのは見たことがありません。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+2

sはインスタンスを指している変数です。
インスタンス(実態)ってのはメモリの何処かに存在していて、sを通してそのインスタンスを操作します

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 14:19

    うーん・・・マイナスがついてますが、自分はy_waiwaiさんのこの回答に不正確な点は(誤字※を除けば)
    ない気がします。マイナス付与した方は何が違うとお考えだったのでしょうか・・・
    (操作しますじゃなくてアクセスしますと書いた方がいいとか?もしそうならささいなニュアンスの違いに思えます)
    ※:「実態×」「実体〇」

    キャンセル

  • 2018/05/25 16:59

    私もこの回答は問題もないし間違ってもいないと思います。
    マイナス評価した方はぜひ理由を書いてほしいですね。
    とりあえず、プラスに1票入れておきます。

    キャンセル

+2

s はインスタンスを指す変数です。
変数とインスタンスの違いですが、例えば

Sword s = new Sword();
Sword sw = s;

と書いた時、変数(値を指し示すもの)は2つありますが、インスタンス(値そのもの、実体)は1つです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 13:36 編集

    要するに、Sword s = new Sword();の等式の左辺にあるもの()と、new Sword();自体がインスタンスと呼ばれるという認識でいいですか?

    例えば以下の場合、
    A = new Sword();
    B = new Sword();
    Sword A = new Sword();

    A, B , Sword Aいずれも同じインスタンスということでしょうか?

    キャンセル

  • 2018/05/25 13:49

    横から失礼します。
    > new Sword();自体がインスタンスと呼ばれるという認識でいいですか?
    右辺を評価した「結果」がインスタンスと認識した方がよい気がします。
    > A, B , Sword Aいずれも同じインスタンスということでしょうか?
    一般名詞としてならどれもインスタンスと呼ばれます。しかしA, B, Swordそれぞれ異なる3つのインスタンスになります。「同じインスタンス」という表現は「実体が同じか」と解釈されることが多いので「同じインスタンスか」と聞かれると「NO」と考える人が多いと思います。

    キャンセル

  • 2018/05/25 14:12

    僕の回答にあるものについて、 s と sw は変数で、 new Sword() で作られたものがインスタンスです。
    new Sword() はコンストラクタと呼ばれるインスタンスを初期化する目的を持った関数を呼び出して、インスタンスを新しく生成しているのです。

    質問者の方は A = と Sword A = が違う変数だと誤解していたりするようなので、インスタンスをもっと具体的に理解するためにもJavaをもう少し先まで勉強すべきだと思います。
    変数宣言や、クラス、インターフェースの話など一文をきちんと説明するために必要な要素がまだまだありますが、まずはコンパイルして正しく動作するコードを書いてみましょう。

    キャンセル

checkベストアンサー

+1

インスタンスは、データの種類を示す単語です。
int n = 99; というコードが変数 n の中に整数という種類のデータを格納するのと同じように、Sword s = new Sword(); というコードは変数sの中にインスタンスという種類のデータを格納します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

厳密にはsはインスタンスの名前という認識の方がいいと思います。

今回の場合はswordという名前のclass(以下sword)があるはずです。
それをnew クラス名();とすることでswordのインスタンスが作成されます。sはそのインスタンスの名前です。

よく言われることですが、classが設計図のようなものでインスタンスが実際に作られたものになります。
JavaはJVMというもので動きます。インスタンスを作成するということはJVMというステージ上にclassを基にしたキャラクターを登場させるイメージでは多少はわかりやすいでしょうか?
ただ登場キャラクターが出てきても名前がないので名前をつけてあげます。(今回はswordにsという名前をつける)

疑問点があれば遠慮なく仰ってください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 13:40 編集

    今回の場合、new Sword();がインスタンスということでいいですか?

    キャンセル

  • 2018/05/25 13:48

    new Sword();はインスタンスを作る操作になります。

    インスタンスはどれかとなってしまうとコード上で見つけることはできないと思います。。
    強いていうならメモリという部分に0と1の配列で表現されています。
    ”s”はその配列を指している名前となります。

    また
    Sword a = new Sword();
    Sword b = new Sword();
    とすると、インスタンスが2つ作られます。newの数だけインスタンスが作られます

    キャンセル

+1

解決済みですが念のため。

「インスタンス」に相当する概念がソースコードのどこかという疑問を持たれております。が、厳密に言うならば「インスタンス」という概念が直接ソースコード上に現れるわけではありません。インスタンスはプログラムを実行して「new〇〇」という処理をした際に作られるものです。

プログラミングの段階ではこれに仮の名前を付けて扱っていくことになります。この例では変数名sがこの「仮の名前」です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14396questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。