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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Q&A

解決済

5回答

1378閲覧

インスタンスについて

revoiot

総合スコア188

Java

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

0グッド

0クリップ

投稿2018/05/25 04:23

現在、オブジェクト指向を理解するために、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がインスタンスと呼ばれると書かれているのは見たことがありません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

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

投稿2018/05/25 04:30

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2018/05/25 05:19

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

2018/05/25 07:59

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

0

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

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

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

投稿2018/05/25 04:30

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

revoiot

2018/05/25 04:36 編集

要するに、Sword s = new Sword();の等式の左辺にあるもの()と、new Sword();自体がインスタンスと呼ばれるという認識でいいですか? 例えば以下の場合、 A = new Sword(); B = new Sword(); Sword A = new Sword(); A, B , Sword Aいずれも同じインスタンスということでしょうか?
KSwordOfHaste

2018/05/25 04:49

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

2018/05/25 05:12

僕の回答にあるものについて、 s と sw は変数で、 new Sword() で作られたものがインスタンスです。 new Sword() はコンストラクタと呼ばれるインスタンスを初期化する目的を持った関数を呼び出して、インスタンスを新しく生成しているのです。 質問者の方は A = と Sword A = が違う変数だと誤解していたりするようなので、インスタンスをもっと具体的に理解するためにもJavaをもう少し先まで勉強すべきだと思います。 変数宣言や、クラス、インターフェースの話など一文をきちんと説明するために必要な要素がまだまだありますが、まずはコンパイルして正しく動作するコードを書いてみましょう。
guest

0

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

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

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

投稿2018/05/25 15:14

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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

投稿2018/05/25 05:04

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

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

投稿2018/05/25 04:38

terry3

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

revoiot

2018/05/25 04:41 編集

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

2018/05/25 04:48

new Sword();はインスタンスを作る操作になります。 インスタンスはどれかとなってしまうとコード上で見つけることはできないと思います。。 強いていうならメモリという部分に0と1の配列で表現されています。 ”s”はその配列を指している名前となります。 また Sword a = new Sword(); Sword b = new Sword(); とすると、インスタンスが2つ作られます。newの数だけインスタンスが作られます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問