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

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

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

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

Q&A

解決済

5回答

1437閲覧

回答ありがとうございました。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

2クリップ

投稿2020/05/20 13:45

編集2020/05/21 07:11

質問内容は質問するほどのものでなかったようです。
ご迷惑をおかけしました。

回答ありがとうございました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/05/20 13:53

多すぎます、javadoc 読んでください
Zuishin

2020/05/20 23:57

C 言語の文字列からの連想ですか?
momon-ga

2020/05/21 05:09 編集

念のため確認ですが、 > getTimeメソッドはなぜ他クラスを戻り値として指定したのでしょうか。 というのは、同じクラス(Calendar?)を返すのが前提だと思っているのでしょうか。
退会済みユーザー

退会済みユーザー

2020/05/21 05:28

すみません、前提としてクラス自体を返す意味が分かっていません。 getTimeメソッドの定義にDateオブジェクトを返す、とあるのでDateが戻り値として指定されたのかと思ったのですが、そうすると何故メソッド定義にDateが出てきたのか分からなくなってしまいました。
Zuishin

2020/05/21 05:30

クラス自体を返していません。インスタンスです。クラスとインスタンスの区別がついていないなら、まずそこの区別をつけないと回答者の言っていることが理解できないと思います。
退会済みユーザー

退会済みユーザー

2020/05/21 05:32

すみませんクラスでなく、Date型のインスタンスということでよろしいでしょうか
Zuishin

2020/05/21 05:33

名前の違いだけではなく、その意味するところは理解されていますか?
退会済みユーザー

退会済みユーザー

2020/05/21 05:35

分かりかねますので教えていただけますか
Zuishin

2020/05/21 05:39 編集

どう説明すればいいのかわかりませんが、Integer はクラスで 10 はインスタンスです。
momon-ga

2020/05/21 05:39

asacaさん > 分かりかねますので教えていただけますか QAのやりとりでは限界がありますし、そもそも教えるのは非常に難しいので、それを求めるのは厳しいと思います。 本を読むなり、ネットの記事を読むなりして、疑問点を質問された方が良いかと思います。
退会済みユーザー

退会済みユーザー

2020/05/21 06:53

そうですね、質問してすみませんでした。
m.ts10806

2020/05/21 19:10

誰も「質問することが悪い」と言ってないのにどこをどう読んだらそう勘違いするのか。。
guest

回答5

0

Dateはクラス名であり、クラスはオブジェクトを生成するためのテンプレートと覚えていたので、戻り値にクラスを指定して何がどうなるのか全くイメージがつきません。

クラスもデータ型です。引数にしたり返り値にしたりできます。

オブジェクトが生成されるのは

クラス名 変数名 = new クラス名
の時ではないのですか?

(最終的には)メソッド内部でそれを行っています。

クラスは参照型であり、クラス型変数が持つのはオブジェクトではなく、オブジェクトの場所を参照する情報ではないのですか?

「だから返り値にできない」という理由にはなりません。

投稿2020/05/20 14:32

maisumakun

総合スコア146018

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

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

maisumakun

2020/05/20 14:33

> DateクラスとCalenderクラス以外にもこのように他クラスを戻り値とするメソッドがあるのでしょうか... それこそ、どんなオブジェクトにもあるObject.toStringは、どんな型のオブジェクトでもStringを返します。
退会済みユーザー

退会済みユーザー

2020/05/20 15:11

回答ありがとうございます。 クラスもデータ型のため戻り値に指定できることは納得できました。 ただ、int型は整数用の型で、整数に指定するためにintを戻り値に指定している、ということは分かるのですが、 じゃあDate型はクラス名だけど日付に指定するという機能があるのか?String型は?と考えてしまうと分からなくなります。
maisumakun

2020/05/20 23:12

> 整数に指定するため どういう意味ですか?
退会済みユーザー

退会済みユーザー

2020/05/20 23:32

戻り値を整数に指定したいときはint、実数にしたいときはdoubleを使用する、というようなイメージを持っていた、という意味です。
maisumakun

2020/05/20 23:54

クラス型を指定する場合も全く意味は同じです。 戻り値としてDate型の値が欲しければDateと書く、StringならString、というだけです。
退会済みユーザー

退会済みユーザー

2020/05/21 03:17

なぜDate型の値が欲しくなったのですか
maisumakun

2020/05/21 03:26

えっと、それを疑問に思うのですか? (逆に、DateでないとすればgetTimeは何を返せばいいのでしょうか)
退会済みユーザー

退会済みユーザー

2020/05/21 04:00

数値が欲しいとint、実数が欲しいとdouble 、と書くと覚えていました。クラスであるDateを返すことでどういう意味を持っているのかわからず、Dateを使う理由もわかりませんでした
maisumakun

2020/05/21 04:13

1つ気になった点がありますが、「クラスであるDateを返す」のではありません。 返り値に「int」と書いてもintという「型」が返されるのではなく、整数の「値」が返されますが、それと同様に、「クラスであるDate」が返ってくるのではなく、「Dateのインスタンスである値」が返り値となります。
退会済みユーザー

退会済みユーザー

2020/05/21 04:37

メソッドで値がインスタンス化され、Date型として戻るということでしょうか? メソッドでインスタンス化する値はDateクラスに関連するものであるため、Dateを返り値としたのですか?
maisumakun

2020/05/21 04:42

> メソッドで値がインスタンス化され、Date型として戻るということでしょうか? メソッド内で生成しているか、他で生成したインスタンスを流用しているかはわかりませんが、Date型のインスタンスを返します。
dodox86

2020/05/21 04:45

momon-gaさんの回答と皆さんのコメント群に集約されるような。前提として、参照型とプリミティブ型を誤解したまま、あるいは区別できていないまま理解しようとするから訳が分からなくなっている気がします。
episteme

2020/05/21 05:35

class Date { ... } があったとして、 class Calendar { public static Date today() { return new Date(2020,5,21); } // 本日の日付(Date)を作って返す ... } なんての。どこに疑問があるのかしら? Dateを受け取った側で、月がほしけりゃ Date today = Calender.today(); int m = today.getMonth(); とかやるんだが。
guest

0

参照型の変数が持つ情報がオブジェクトではなく参照であるとかの話は、データをやり取りするための方法論の話であって、あなたの疑問に影響するものではありません。
Dateを返したいときにDateの情報をまるごと移動したりコピーしたりするのは色々問題があるため、ものを作っておいて、それがある場所を指示する形で渡している、というだけの話です。

投稿2020/05/21 03:42

swordone

総合スコア20669

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

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

0

参照型だろうがプリミティブ型だろうが同じで戻り値の型を意味する情報で、それ自体は実体と関係がありません。

java

1int getNum()2 return 10; 3

に近い例で、クラスやインターフェースを使うなら以下のようになります。

java

1Integer getNum() { 2 return Integer.valueOf(10); 3} 4 5String getStr()6 return "10"; 7} 8 9List<String> getList() { 10 return new ArrayList<>(); 11}

これらgetNumとほぼ同じだと思いますが、違いを感じるのでしょうか?

ちなみに、戻り値は実装しだいなので以下のようにしてもコンパイルエ¥ラーにはなりません。
※戻り値の型を意味する情報と戻り値自体の実体は関係ありません。

java

1Integer getNum() { 2 return null; 3} 4 5String getStr()6 return null; 7} 8 9List<String> getList() { 10 return null; 11}

ただ、これだけの話なのですが。

クラスの理解がインスタンスのテンプレートというのがすごい違和感があって
テンプレートという考え方自体は、完全に間違ってるとはいいませんが、
それはクラスとインスタンスとの比較をするさいの例えの話であって
単純に型の話をするときにテンプレートというのがでてくることが、なぜ?という感じです。


追記 ここから

getTimeメソッドの定義にDateオブジェクトを返す、とあるのでDateが戻り値として指定されたのかと思ったのですが、そうすると何故メソッド定義にDateが出てきたのか分からなくなってしまいました。

Dateオブジェクトを返すメソッド定義には、Dateが出るのですが、どこが不思議ですか?
再度、メソッドの定義方法を学習されてみては、どうでしょうか?

java

1Date getHoge() { // Dateオブジェクト(インスタンス)を返すgetHogeというメソッドの定義 2 return new Date(); // Dateのインスタンスを返している 3}

Dateオブジェクトを返すメソッドを定義した意味、意図についての質問は誰も答えられません。
とはいえ、プリミティブ型の配列{5, 21, 2020}みたいに返されても使いにくいでしょ?

投稿2020/05/21 02:35

編集2020/05/21 06:04
momon-ga

総合スコア4826

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

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

退会済みユーザー

退会済みユーザー

2020/05/21 03:42

Stringは基本型と同じ扱いで良いと教わりました。 int は型というより値を整数として使いたい場合宣言しなければならないもの、整数=int というように値の表現方式を指定する部分だと思い他の基本型もそのように覚えてしまっていました。 intは直接値を入れられる型で、整数値しか入らない「ルール」だと思っていたので、参照型のDateを使う理由がわかりませんでした。Dateを戻り値にすることで日付を表示する、などルールがあるのですか、
swordone

2020/05/21 03:47

> Stringは基本型と同じ扱いで良いと教わりました あー、それ最悪。誰、もしくは何に教わっているのですか? > intは直接値を入れられる型で、整数値しか入らない「ルール」だと思っていたので、参照型のDateを使う理由がわかりませんでした。 「ので」の前後が全く繋がっていないのですが?
退会済みユーザー

退会済みユーザー

2020/05/21 03:52

int型にはルールがあるが、クラスである参照型のDateにはルールがないと思っていました ので ルールもないのにDateを使う理由が分かっていなかったという意味です。
maisumakun

2020/05/21 03:55

全力で誤解したまま突き進んでいるように思われます。いちから学びなおしたほうがいいかも知れません。 (「ルールがない」ものは、プログラミング言語上には基本的に存在しません)
momon-ga

2020/05/21 05:22 編集

asacaさん > 質問がぼやけてきてますね。。。”Dateを使う理由”は、当初の質問(戻り値に参照型を指定する)と関係ないように思います。 違う疑問がわいたのであれば、別の質問をたてた方がよいです。 あと、Date型には、Date型のインスタンス(の参照)しか入らないルールがあります。
退会済みユーザー

退会済みユーザー

2020/05/21 05:26

すみません疑問点が増えてきているかもしれませんが、当初のまま、戻り値に参照型であるDateを使う理由について質問しているつもりです。 質問文にもありますが、メソッドの定義がDate型のオブジェクトを返す為に戻り値をDate型にしているのか?と自分なりの考えを書いています。その上で、なぜCalenderクラスのgetDateメソッドでDate型をもどすように定義しているのか(使っているのか)?も合わせて質問させていただいています。 分かりにくくて申し訳ありません。
maisumakun

2020/05/21 05:37 編集

> メソッドの定義がDate型のオブジェクトを返す為に戻り値をDate型にしているのか? そのとおりです。 > なぜCalenderクラスのgetDateメソッドでDate型をもどすように定義しているのか(使っているのか)? 設計者が「それが便利だ」と考えたからです。それ以上に掘り下げたいのですか?
momon-ga

2020/05/21 05:50

asacaさん > 戻り値に参照型であるDateを使う理由 理由や意図については、設計者以外には、わからないです。 ですが、”プリミティブ型だけで、あらゆるやりとりするのは面倒だから”以上の推測はできないかと思います。 これ以上に掘り下げたいですか?
退会済みユーザー

退会済みユーザー

2020/05/21 06:38

そうですね勉強不足なので疑問に思ってしまいました。すみません。 面倒をかけてしまい申し訳ありませんでした。
guest

0

ベストアンサー

自分の勉強不足により疑問に思ってしまいましたが、掘り下げること事態が意味のない話のようでした。
下らない質問ですみません。
ご迷惑をおかけしました。

投稿2020/05/21 06:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kaputaros

2020/05/21 07:24 編集

くだらなくないですよ。 分からないことを質問することはいいことです。 (分からないままウヤムヤにする方のがよくないです。) そして、裏回りを知ろうとすることは悪くないことです。 ただ、まだすこしだけ早いんだと思います。 自分の腑に落とす、落としどころがわからなくなっているように見受けました。 ・インスタンスとは ・参照型とプリミティブ型 の辺りをもう一度調べてみるといいと思いますよ。 がんばってください^^
guest

0

DateクラスとCalenderクラス以外にもこのように他クラスを戻り値とするメソッドがあるのでしょうか...

次のコードを見てください。
Mainクラスのメソッド getHello は Stringクラスを返します。

Java

1class Main { 2 public static void main(String[] args) { 3 String str = "Java"; 4 String hello = getHello(str); 5 System.out.println(hello); 6 } 7 8 static String getHello(String name) { 9 String str = "Hello, " + name + "."; 10 return str; 11 } 12}

getHello の中の "Hello, " + name + "." という式の評価結果である
"Hello, Java." は String型のオブジェクトであり、String str で宣言された
変数 str は String型のオブジェクトを参照する参照型です。
return str; で返すのは参照値であり、オブジェクトの実体をメソッドの呼び出し元に
コピーするのではありません。

投稿2020/05/20 20:13

kazuma-s

総合スコア8224

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

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

退会済みユーザー

退会済みユーザー

2020/05/20 23:43

一行目の時点でstrにはオブジェクト”Java”の参照値があるということですか? getHelloメソッドでオブジェクトがコピーされて、”Hello,Java.”となったということでしょうか?
momon-ga

2020/05/21 02:01 編集

String strがmainとgetHelloの両方にあるので、理解できていない人に説明するには大変だと思いますよ。現に、"Java"の参照値とか本題と関係ないところに疑問がいってるし。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問