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

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

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

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

Q&A

解決済

2回答

14165閲覧

配列インスタンスの理解があいまいです。

k_mail

総合スコア90

Java

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

0グッド

2クリップ

投稿2016/02/13 13:09

編集2016/02/13 13:15

Java SE7 Silver の資格を目指し勉強中です。
解説の意味が分かりませんでした。
分からない点は
・ Mainクラスの3行目で、生成しているのは「配列インスタンス」であって、Itemのインスタンス を生成しているわけではない

・ この配列のインスタンスの要素はオブジェクト型配列のデフォルト値である「null」で初期化さ れている。そのため、6行目でpriceフィールドにアクセスする段階で、変数の参照先がないと いう意味のNullPointerExceptionが発生する(←なぜpriceフィールドにアクセスできない?)

1 public class Item{
2 String name;
3 int price = 100;
4 }


1 public class Main{
2 public static void main(String[] args){
3 Item[] items = new Item[3];
4 int total = 0;
5 for(int i = 0; i< items.length; i++){
6 total += items[i].price;
7 }
8 System.out.println(total);
9 }
10}

回答は「実行時に例外がスローされる」です
抽象的な質問になってしまいますが、よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Item[] items = new Item[3];
Itemを入れることが出来る長さ3の配列を作っただけで
入れるItem(クラスのインスタンス)は作ってません。
作ってないものにアクセスしようとしたら例外が出ます。

と解説が既に充分な説明をしているので
何処が納得出来ないのか詳しく教えて下さい。

投稿2016/02/13 13:18

ozwk

総合スコア13521

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

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

k_mail

2016/02/13 13:23

Item(クラスのインスタンス)は作っていないから、Itemクラスのフィールドには アクセスできないということでしょうか。
ozwk

2016/02/13 13:23

はい
k_mail

2016/02/13 13:31 編集

ご返信有難うございます。 助かりました。 追記 勝手ながらフォローさせていただきました。 よろしくお願いします。
guest

0

少し補足しますと。Javaのデータ型は大きく分けて2種類あります。
一つはint,char,booleanなどの基本的な値を扱うプリミティブ型
もう一つはクラスなどから生成される、構造を持ったデータである参照型です。
配列も参照型に該当します。
参照型が生成されるとき、参照型の中身の値はユーザーが初期化しなければ、プリミティブ型なら0や0.0,\u0000,falseといった値でで初期化され、参照型(今回のItem型の配列の中身や、Itemを生成した場合のnameに該当)の場合はnullに初期化されるのです。
なので、

java

1Item[] items = new Item[3];

この段階では、配列の3つの中身はすべてnullの状態なのです。

投稿2016/02/13 17:51

swordone

総合スコア20651

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

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

k_mail

2016/02/14 00:48

コメントありがとうございます。 Item[] items = new Item[3]; この段階では、配列の3つの中身はすべてnullの状態 配列インスタンスを生成したとき、それがオブジェクト型では、要素は「すべてnullで初期化」されているのですね。 自分でもここがあやふやだったのかなと思います。 いつも丁寧に返信を頂き有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問