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

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

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

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

Q&A

解決済

4回答

5469閲覧

Javaのクラス型のフィールドとは何か?が知りたいです

meria

総合スコア5

Java

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

0グッド

1クリップ

投稿2021/04/28 17:34

編集2021/04/29 03:09

勉強サイトprogeteのJAVAについての質問です
クラス型のフィールド
インスタンスフィールドにクラス型の変数を定義することで、フィールドにインスタンスを持つことが可能です。
下図のようにPerson型のownerというインスタンスフィールドを持つようにしてみましょう。

のついての質問です

分かっていること
クラス、フィールド、メソッドについてはある程度分かっています

分からないこと
1.クラス型の変数とは何かを
2.フィールドにインスタンスを持つこと!とは何か?
3.クラス型のフィールドは、なんのため、何に使うためににあるのでしょうか?
が知りたいです


Manクラスのフィールドに
Personクラスのインスタンスを

Class Man {
Person owner;

}
⏫の風にManクラスにPersonクラスのインスタンスを作ったということなのでしょうか?

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

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

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

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

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

m.ts10806

2021/04/28 21:13

全ての人がProgateやっているわけではないので、 URLとか引用可能な情報は引用されたほうがいいでしょうし、 調べて何も出ない内容ではないでしょうし、 そんな全部太字にするほどの内容ではないと思います。 Progateに依存するより入門書一冊通されたほうがいいとも思います。
dodox86

2021/04/29 01:38

Progateの該当のコンテンツを見た訳ではないので分かりませんが、 > 下図のようにPerson型のownerというインスタンスフィールドを持つようにしてみましょう。 この説明の前後にJavaの「クラス」や「インスタンス」、「フィールド」に関する説明はありませんでしたか。それを理解した上で、「クラスは分かるけど、"クラス型のフィールド"とは何かが分からない」とのような疑問でしょうか。同じような用語がたくさん出てきて混乱してしまった、とか。質問者さんの現時点のJavaへの理解度が分からないので、回答にも困ると思います。
meria

2021/04/29 02:52

@m.ts10806さん 説明不足で申し訳ないです、、 有料サイトなので、引用できるものが少なく、URSを送って見れないと思ったのです、 クラス型のフィールドについて、1時間程調べたのですが、よく分からなくて質問して、太文字に書いてしまいました。 @dodox86さん その通りです、説明不足でした、 クラスは分かるのですが、クラス型のフィールドとはないかが分からないということです! 編集します! 助言ありがとうございます!
m.ts10806

2021/04/29 03:22

>1時間程調べた 時間だけ書いても何をどう調べて何を読んで何を試したか書いてないと他者には伝わりませんよ。 それに「クラス型」という表現は正しくないと思います。
gentaro

2021/04/29 06:08

「クラス型」とか書かれるとメタプログラミングでもやってるのかと思う。 その教材で「クラス型」とか言ってるなら別の教材でイチから勉強したほうが良さそう。
guest

回答4

0

progateでどう教えてるのかは知りませんが、oracleのドキュメントでは

クラス変数
インスタンス変数
名前の無い配列の要素 (※配列自身の名前でなく、インデックスでアクセスする中身)
メソッドの仮引数
コンストラクタの仮引数
ラムダ式の仮引数
例外をキャッチした際の仮引数
ローカル変数

と書いてあります。


1.クラス型の変数とは何かを

プリミティブでない変数。参照型の変数のことをクラス型の変数と表現することがよくあります。
なお、クラス型変数と似た言葉で、クラス変数というのがありますが、
クラス変数はstaticで宣言されたフィールドのことで、変数がプリミティブ型か参照型かは関係ありません。

2.フィールドにインスタンスを持つこと!とは何か?

すでに例がありますが。
フィールドにあるクラスのインスタンスを保持するだけです。
bbbとdddがインスタンスを保持しています。
eeeは、インスタンスが設定されていません。(保持していない)

java

1public class Hoge{ 2 int aaa = 1; // インスタンスフィールド(インスタンス変数)、プリミティブ型 3 String bbb = "2"; // インスタンスフィールド(インスタンス変数)、参照型(クラス型) 4 static int ccc = 3; // クラスフィールド(クラス変数)、プリミティブ型 5 static String ddd = "4"; // クラスフィールド(クラス変数)、参照型(クラス型) 6// 以下、(インスタンス変数)、参照型(クラス型)と書かないけど、わかるでしょ? 7 String eee = null; // インスタンスフィールド : インスタンスは無い 8}

3.クラス型のフィールドは、なんのため、何に使うためににあるのでしょうか?

が知りたいです

クラス型にかぎらずフィールドに変数を保持するのは、その変数を属性として管理して、
クラス内のどのメソッドからも参照できるようにします。

特定のメソッドの中でのみ利用する場合は、フィールドでなくローカル変数を使う方がよいです。

投稿2021/04/29 08:50

momon-ga

総合スコア4820

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

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

0

1.クラス型の変数とは何かを

変数はメソッドの中で宣言します。

java

1 public static void main(String[] args) { // main はメソッド 2 int i = 3; // i は基本型の変数 3 double[] a = new double[5]; // a は配列型の変数 4 Person p = new Person(); // p はクラス型の変数 5 }

基本型の変数には値が入ります。
配列型とクラス型は参照型といって、
new で生成したオブジェクト(クラスのインスタンス) の ID が入ります。
値はオブジェクト自身が持っていて、参照型の変数に値は入っていません。

2.フィールドにインスタンスを持つこと!とは何か?

Java

1class Person { 2 static int count; // count は、基本型のクラスフィールド 3 int age; // age は、基本型のインスタンスフィールド 4 String name; // name は、クラス型のインスタンスフィールド 5}

クラスフィールドは new Person() でインスタンスを生成しなくても
Person.count でいつでも参照できます。
インスタンスフィールドは、Person p = new Person(); の実行後
p.age や p.name という形でしか参照できません。
p.name = "bob"; のようにして Stringクラスのインスタンスを持つことができます。

3.クラス型のフィールドは、なんのため、何に使うためににあるのでしょうか?

クラスを定義するのに、基本型のフィールドしか使えないと困るでしょう。

投稿2021/04/29 07:47

kazuma-s

総合スコア8224

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

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

0

ベストアンサー

入門部分であると私は思います。入門書で必ず語られているべきもの。
Progateの記事見たわけではないですが、言い回しが分かりにくい(直感的ではない)
ですが、何も書いてないとは思えません。


クラスに宣言される変数が「フィールド」です。

java

1class Hoge{ 2 String s; 3 Integer i; 4 ArrayList<> a; 5 6 7} 8

s,i,aはいずれも「Hogeクラスが保持するフィールド」になります。
変数には必ず何かしらの「型」をつけて宣言する必要があります。

JavaにとってStringもIntegerも型ですが、同時に「クラス」でもあります。
java.lang.String
java.lang.Integer
java.util.ArrayList<E>

「オブジェクト」と表現しても良いです。

なので「クラス型」とは、「変数に宣言される型そのもの」であると推察されます。
宣言しただけでは何も内容を持たないのでnewして変数に情報を持たせるわけです。「インスタンス」は一般的にnewされた情報が変数に入った状態を言います。

以上から

1.クラス型の変数とは何かを

→任意の型でつけられた変数のこと

であり

2.フィールドにインスタンスを持つこと!とは何か?

→フィールドに対してインスタンス化したオブジェクトを入れること。

と言えます。

ちなみに、

3.クラス型のフィールドは、なんのため、何に使うためににあるのでしょうか?

手法や用途から考えるのは間違っています。
必要だから、使うから宣言するという前提があります。
先に書いたように「任意の型の変数」なので、「その変数は何に使うために宣言するのか」から考えたら明白ではないでしょうか。

投稿2021/04/29 03:35

m.ts10806

総合スコア80863

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

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

meria

2021/05/01 15:44

プロゲートのJava講座復習して、回答を見たらなんとなく理解しました。! クラスの設計図が二つとか、沢山あるとき、クラスの設計図に同じのを書かずにクラス型として、インスタンスを入れて、インスタンス名.変数.メソッドでそのクラスのインスタンスのメソッドを実行する感じの時に使うのがなんとなくわかりましたありがとうます!
m.ts10806

2021/05/02 23:12

>クラスの設計図が二つとか、沢山あるとき、クラスの設計図に同じのを書かずにクラス型として、インスタンスを入れて、インスタンス名.変数.メソッドでそのクラスのインスタンスのメソッドを実行する感じの時に使うのがなんとなくわかりましたありがとうます! ごめんなさい。何を言ってるのかサッパリです。 設計図を書くときには各役割は全て決まっているものですから「2つとか沢山」というあいまいな現象は起きないと思います。 何を「設計図」と仰っていますか?
guest

0

間違っている点もあるかもしれませんが、理解が進めば幸いです。

1.クラス型の変数とは何かを

そのままなのですが、Classで定義されているものを変数として定義していることなのではないでしょうか。

何をクラスと言うかによりますけど、例えば、

int型の変数

java

1int Tom;

Person クラスの変数

java

1class Person { 2 int name; 3 int age; 4}; 5 6Person Tom;

とかを比較すると、Person クラスのTomが、クラス型の変数な気がしますよね。

2.フィールドにインスタンスを持つこと!とは何か?

java

1Class Man { 2Person owner; 3 4}

と定義すると、Manクラスの中に、Person クラスのownerを持つことになります。Class Manを使った時点で、Person クラスのownerがインスタンス化されると思えばいいと思います。

3.クラス型のフィールドは、なんのため、何に使うためににあるのでしょうか?

例えば、Personクラスを定義したとして、
Person クラスの変数

java

1class Person { 2 int name; 3 int age; 4};

Manクラスのフィールドとして、Personクラスを含めるとします。

そうすると、

class Man {
bool is_man;
Person owner;
};

と、こんな感じで定義しますが、フィールドにクラスを含めないと、

class Man {
bool is_man;
int name;
int age;
};

と、こんな感じになります。ただ、この実装の中で、Personクラスが定義されていると、Manクラスと、Personクラスが似ているので、あまりよろしくない感じがすると思います。

似たものをまとめという点で、Manクラス内に、Personクラスを定義したほうがすっきります。すっきりさせるために使うのだと思います。

投稿2021/04/29 03:55

編集2021/04/29 03:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

momon-ga

2021/04/29 05:12

明らかに間違っているので修正されたほうがよいかと > Class Manを使った時点で、Person クラスのownerがインスタンス化されると思えばいいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問