参照型の戻り値について

このQ&Aのポイント
  • 基本型やString型の戻り値はイメージしやすいが、参照型の戻り値は具体的な値がわからず困る。
  • enumeration型やPrintWriter型、Object型など、参照型の変数がさしている具体的な値が理解できない。
  • request.getParameterNames()の戻り値であるEnumeration型は、具体的にどのような値を表現しているのかイメージがつかない。
回答を見る
  • ベストアンサー

基本に戻って、型について考えてみる

すいません。 サーブレットの所で質問なんですけれども、 戻り値の型が基本型やString型の場合だったら、 変数にどんな値が格納されているのかイメージしやすいんですけれども(例えばすぐ下の例の場合ですね)、戻り値の型がString型以外の参照型の場合には、戻り値が具体的にどのような値になっているのかイメージできなくて困っています。 String str1=br.readLine(); int num1=Integer.parseInt(str1); 例えばenumeration型。 一体この型はどんな型?っていう質問もへんなんですけれども、この型の変数がさしている値というのは具体的にいうとどう表現できるのでしょうか? 基本型やString型は本当に分かりやすいのですけれど。 あと他にもPrintWriter型だとか、Object型だとか、 なぜかイメージできないんですよね。 Enumeration paramNames = request.getParameterNames(); もしよろしければ教えてください。 お願いします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

たぶん、もしこれでEnumerationの型をどうにか具体的にイメージできたと しても、次々とさまざまな型が現れ、そのうち限界がくると思います。 ここは、メソッドとデータが合体した塊、それこそ「オブジェクト」 としかいいようの無いもの、であるとして把握していったほうが (…それができれば苦労は…とおっしゃるかもしれませんね…)。 あ、しかもEnumerationはインタフェースですけど。 まあ例えば自分でJavaモドキを他の言語で実装しようと想像して みれば、変数と関数ポインタの寄せ集めにするのかなあ、とかぼんやり 考えることもできるでしょうが。 とにかく、なんらかのデータを抱えているらしいけどそれは漠然とした 塊としてしかわからず、またそれを外から詳しくわかる必要もない、ただ hasMoreElementsとnextElementという窓口があるだけのモノ、 と把握するしかないんじゃないでしょうか。 中身の構造や原理はよくわからないけど電源コードとスイッチが あって操作方法は一応わかる電化製品のように。とにかく、アンプだ、 とかスピーカーだとか、CDプレイヤーだとか。getParameterNamesと やるとイコライザーが取り出せる、と。 そのへんの、「外から想像つかない/知らなくていい」というのが カプセル化というオブジェクト指向における重要な思想なんで、 そこをなんとか乗りきっていただきたいと思うばかりです。

fumi11
質問者

お礼

僕は結構考えてしまうタイプなので、中身がわからないと先に進めないといった状況に陥ることがしばしばあります。でもどうやら、今までの思考回路ではダメみたいですね。 今度からは、 head_Syndicateさんがおっしゃられたように、「なんらかのデータを抱えているらしいけどそれは漠然とした塊」としてイメージするように努力してみます。 ご丁寧なご説明、本当にありがとうございました。 今後の学習に多いに役立たせていただきます。

関連するQ&A

  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • 初心者Javaの件。

    いつも大変お世話になりありがとうございます。 Javaの基本的なプログラムについてです。 コードとエラーメッセージを記述致しました。 どう治せばいいか、教えてください。 ご回答のほど、宜しくお願い申し上げます。 import java.io.BufferedReader; public class Sample3 { { public static void main(String args[]) throws Exception { person p[]; System.out.println("人数を入力してください。"); BufferedReader br = new BufferedReader(new inputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); p = new Person[num]; for(int i=0; i<num; i++) { } System.out.println("年齢を入力してください"); str = br.readLine(); int age = Integer.parseInt(str); P = new Person[num]; for(int i=0; i<num; i++){ System.out.println("年齢を入力してください"); str = br.readLine(); int age = Intger.parseInt(str); System.out.println("体重を入力してください"); str = br.readLine(); double weight = Double.parseDouble(str); System.out.println("身長を入力してください"); str = br.readLine(); double height = Double.parseDouble(str); p[i] = new person(age, weight, height); } for(int i=0; i<num; i++) { p[i].show(); } } Exception in thread "main" java.lang.Error: Unresolved compilation problems: person を型に解決できません inputStreamReader を型に解決できません Person を型に解決できません P を変数に解決できません Person を型に解決できません トークンに構文エラーがあります。これらのトークンを削除してください 重複ローカル変数 age Intger を解決できません トークンに構文エラーがあります。これらのトークンを削除してください person を型に解決できません at Sample3.main(Sample3.java:7)

    • ベストアンサー
    • Java
  • [C#]型変換について教えてください。

    ◆int型のリスト「 List<int>」に変換したいです。 以下、ソースの一部を記述します。 ***********ソースの一部*********** string str; Console.Write("4桁の数値->"); str = Console.ReadLine(); *************************************** ■現状 ・string型の変数"str"に、キーボードからの値入力を許容。 ■質問 2つあります。よろしくお願いいたします。 1. 要素の型「string」からint型のリスト「 List<int>」に変換する方法はありませんか? 2. キーボードからの値入力でint型のリスト「 List<int>」に直接入力することはできませんか? 拙い知識のため要領を得ない質問かもしれませんが、ぜひご教示ください。

  • クラスのフィールドの比較方法

    2つのクラスのフィールドを比較して、その結果を以下のように表示させたいのですが、どのようにプログラミングをすればいいのでしょうか? 例 class Car { String carname; int height; int width; int length; } class Garage { String garagename; int height; int width; int depth; } public class example { public static void main (String[] args) throws IOException { Car car[]; car = new Car[5]; System.out.println("車の情報を入力してください。"); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in); for(int i=0; i<5; i++){ car[i] = new Car(); System.out.println(i+1 + "台目の車の名前を入力してください。"); String str1 = br1.readLine(); System.out.println("車の高さを入力してください。"); String str2 = br1.readLine(); System.out.println("車の幅を入力してください。"); String str3 = br1.readLine(); System.out.println("車の長さを入力してください。"); String str4 = br1.readLine(); int h1 = Integer.parseInt(str2); int w1 = Integer.parseInt(str3); int l1 = Integer.parseInt(str4); car[i].carname = str1; car[i].height = h1; car[i].weith =w1; car[i].length =l1; } for(int i=0; i<5; i++){ garage[i] = new Garage(); System.out.println(i+1 + "つ目の車庫の名前を入力してください。"); String str5 = br2.readLine(); System.out.println("車庫の高さを入力してください。"); String str6 = br2.readLine(); System.out.println("車庫の幅を入力してください。"); String str7 = br2.readLine(); System.out.println("車庫の長さを入力してください。"); String str8 = br2.readLine(); int h2 = Integer.parseInt(str6); int w2 = Integer.parseInt(str7); int d2 = Integer.parseInt(str8); garage[i].garagename = str2; garage[i].height = h2; garage[i].weith =w2; garage[i].depth =d2; } } 出力例 garage1 car3 garage2 car5 garage3 car4 garage4 car2 garage5 car1 よろしくお願いします。

    • ベストアンサー
    • Java
  • String型の変数を使った問題

    すごく簡単なプログラムのはずで、初歩的な質問で申し訳ありませんが、教えていただければと思います。 問題: 以下の場合の処理を行うプログラムを作成せよ。 (1)String型の変数を作成し、苗字を格納する。(値は直接書き込む) (2)String型の変数を作成し、名前を格納する。(値は直接書き込む) (3)(1)で作成した苗字を持つ変数と、(2)で作成した名前を持つ変数を結合して出力。 (4)「苗字は'((1)で作成した変数の値)'です。名前は'((2)で作成した変数の値)'です。」と出力。 出力結果: C:\>java Name いわたてつお 苗字は'いわた'です。名前は'てつお'です。 C:\> 上記のプログラムを作成しようとしたのですが・・・ import java.io.*; class Name { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); String name1 = str1; String str2 = br.readLine(); String name2 = str2; System.out.println(name1 + name2); System.out.println("苗字は\'" + name1 + "\'です。名前は\'" + name2 + "\'です。"); } } ↑これではいくら変数を2つ作成しても、書き込んだ文字が全て 苗字の変数に格納されてしまってちゃんと出力出来ないという事は 分かるのですが、どうやったらちゃんと苗字と名前に分かれて 出力されるのか分からないので、教えてください。 なんとなく文法的にも間違っている気が・・・ ホント初歩的な質問ですみません!

    • ベストアンサー
    • Java
  • stringの値を、Calendarクラスの「.set」で使用するため

    stringの値を、Calendarクラスの「.set」で使用するためには。 どうしらたいいのでしょうか? Calendarクラスの変数に、「.set」を使用して値を設定したいのですが 設定するための値をPOSTでもっていきていて、srting型にしかなりません。 Integer.valueOf(str).intValue(); Integer.parseInt(str); などを使用して設定できないか、試してみたのですがエラーになってしまいました。 APIのページなども見てみたのですが、初心者なのでいまいち分かりません… こういう場合どう設定すればいいのか、どうぞご教授よろしくお願いいたします。

  • Java int sum = 0は必要ですか?

    やさしいJavaという本を買ったのですが、良くわからない箇所がありました。 --------------省略----------------- class Sample6 { public static void main(String[] args) throws IOException { System.out.println("整数を3つ入力してください。") ; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ; String str1 = br.readLine() ; String str2 = br.readLine() ; String str3 = br.readLine() ; int sum = 0 ; sum += Integer.parseInt(str1) ; -------------------略----------------- int sum = 0 ; とありますが、0と設定しておく必要はありますか? 無いとまずいですか? いきなりこのコードが出てきたと思うのですが どこかに書いてましたっけ?

    • ベストアンサー
    • Java
  • C#のStreamReaderでのforeach

    StreamReader sr = new StringReader(filePath); foreach (Strins s in sr.ReadLine()) { } 上記プログラムでは 型'char'を'string'に変換できません。 と出てきて無理でした。 http://stackoverflow.com/questions/286533/filestream-streamreader-problem-in-c-sharp 此方を参考に、下記プログラムを書きました。 private static IEnumerable<string> ReadLine() { string str; while ((str = sr.ReadLine()) != null) { yield return str; } } private static void loop() { foreach (string str in ReadLine()) { } } 1. 下記のものは動くのですが、なぜ最初に書いたものではダメなのでしょうか? 2. もっと綺麗(スリム)に書くことはできないでしょうか? 3. string str; while ((str = sr.ReadLine()) != null) ↓ while((string str = sr.ReadLine()) != null) とするとエラーが出るのはなぜでしょうか? 宜しくお願いします。

  • JAVAでエラーがでる。

    JAVA初心者なのですが、下のプログラムは数値を入力して、それを表示させるという簡単なプログラムなのですが、実行すると、 String str = br.readLine(); のbr.readLine();の部分に赤い波線が出て、 「処理されない例外の型 IOException at B.main(B.java:11)」 というエラーが出てしまってこまっています。 参考書のとうりに入力しているのになぜでしょうか? タブやスペースが使えないので見にくくなってしまってすみません。 どなたかJAVAに詳しい方 教えてください。 import java.io.*; public class B { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); System.out.println(num + "が入力されまた。"); } }

    • ベストアンサー
    • Java
  • クラスのフィールドの値を配列に代入する方法

    フィールドの値を代入したいのですが、 java.lang.ArrayIndexOutOfBoundsException というエラーが出てしまい、どうすればいいのかわかりません。 どのように対処すればいいのでしょうか? class Car { String carname; int height; int width; int length; } class public static void main(String[] args) throw IOException { Car car[]; car = new Car[5]; System.out.println("車の情報を入力してください。"); BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in); for(int i=0; i<5; i++){ car[i] = new Car(); System.out.println(i+1 + "台目の車の名前を入力してください。"); String str1 = br1.readLine(); System.out.println("車の高さを入力してください。"); String str2 = br1.readLine(); System.out.println("車の幅を入力してください。"); String str3 = br1.readLine(); System.out.println("車の長さを入力してください。"); String str4 = br1.readLine(); int h1 = Integer.parseInt(str2); int w1 = Integer.parseInt(str3); int l1 = Integer.parseInt(str4); car[i].carname = str1; car[i].height = h1; car[i].weith =w1; car[i].length =l1; } for(int i=0; i<5; i++){ int c_h[] = new int[5]; c_h[i] = car[i].height; } } よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう