コンストラクトについての質問

このQ&Aのポイント
  • Javaのコンストラクトについてエラーが発生し、正しいプログラムの作成方法を知りたい
  • Javaのインスタンスを使用せずに文字列を表示する方法について知りたい
  • 質問者はJavaのクラス、インスタンス、コンストラクトの区別が分からず、それについても教えてほしい
回答を見る
  • ベストアンサー

文字入力について(コンストラクトについての質問)

import java.io.*; public class ED4L2{ public static void main(String args[]){ BufferedReader myReader ; myReader = InputStreamReader(System.in); /*BufferedReader myReader = new BufferedReader(new InputStreamReader(System.in));*/ ■質問 上のようなプログラムをコンパイルするとエラーが でます。/**/で囲うものが正しいプログラムになり ますが、コンストラクトにしないでできる方法は ないのでしょうか?インスタンスで行なえないので しょうか? 文字列の場合なら public class SampleD3L1{ public static void main(String args[]){ String strMesseage ; strMesseage = "Stringクラスを使ってメッセージを表示します"; と、インスタンスで文字列を表示することができます。 Javaを初めてまもないので、質問自体がゴチャゴチャに なっていると思われますが、宜しくお願いします。 「追記」 自分にはクラス、インスタンス、コンストラクトの 区別がついていなような気がします。これらについて も、教えていただければと思っております。

  • KGM
  • お礼率44% (66/148)
  • Java
  • 回答数3
  • ありがとう数1

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

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

No2です。 そうですね。クラスからインスタンスを作るときにはメモリ上の領域にそのインスタンス用の領域が確保されることになっています。 ですからその領域を指す名前みたいなものなので、その理解で問題はないように思えます。 C言語をやっておられたということですがJavaのクラスはC言語の構造体と似ているので同じ感覚で扱えば問題ないと思います。 (実際にはクラスフィールドとインスタンスフィールド、publicやprivateなどいろいろ違いはありますが) String mystr = new String(""); ------ ++++++++++++++ インスタンス  コンストラクタ この図ですが String mystr = new String(""); ------ ^^^^^ +++++++++++ クラス名 インスタンス名  コンストラクタ という感じですかね。(たぶんですが) Stringは引数に与えられた文字列のインスタンスを作りますので。(日本語がおかしいかも。) 余談ですがJavaでは String mystr = "Moji"; String mystr = new String("Moji"); の両方とも使えることになっています。 上の式でも下の式でも"Moji"というデータがメモリ上のどっかに用意されて、それをmystrと呼ぶ!!というイメージです。 ちなみにこれも余談ですが・・・。 JavaではStringクラス意外にもStringBufferクラスというのがあって 両方使えると何かと便利ですよ。

KGM
質問者

お礼

非常にわかりやすいです!! 何とか理解できそうです。 ありがとうございました。

その他の回答 (2)

回答No.2

クラスというのは、ものすごい簡単にいってしまえば設計図みたいなものです。(家とか乗り物とか) クラスは値を代入するフィールド(家の設計図なら高さとか面積とか)と フィールドをどのように扱うかというメソッドをもっています。 このクラスは抽象化(汎化)されたものなので その設計図を元にして一般的なもの(特化されたもの)を作ります。 例えば「車」っていう大まかな設計図からTOYOTA車を作ったりNISSAN車を作ったりするのは クラスからインスタンスを作ったということになるでしょう。(変なたとえですが) そこで、クラスからインスタンスを作るための演算子が「new」です。 で、例えば車クラスには最高速度と重さのフィールドがあったとしますね。 普通インスタンスを作ったときには、これらのところには何も代入されてない。ただ宣言されただけの状態になってます。 コンストラクタは、このフィールドをあらかじめ何らかの数値で初期化しておきたいときに使うのです。 class car{ int MaxSpeed; int Weight; public car(int m,int w){ this.MaxSpeed = m; this.Weight = w } } 例えばこのクラスからnewを使って car TOYOTA = new car(); として作ってもインスタンスTOYOTAのフィールドにはなにも入っていませんが car NISSAN = new NISSAN(150,1200); とすると、インスタンスNISSANのフィールドMaxSpeedには150が、Weightには1200があらかじめ入ることになります。 (フィールドにはクラスフィールドとインスタンスフィールドがあるのですが、その説明は省かせてもらいますm(__)m) 話は変わりますが、すでに回答が出ているとおり””はStringのインスタンスとして扱われますので 代入しても問題ないんです。 InputStreamReaderとBufferedReaderは継承的にサブクラスとスーパークラスの関係ではないので代入することはできないということになります。 両方ともJava.io.Readerからを継承したクラスなんですけども親子ではないので。 そのことはもう少し詳しい人に聞いてくださいm(__)m

KGM
質問者

補足

熱のある解答で感謝感激です^^ クラスにはフィールドとメドッソがあって、 それぞれ、性質と動作を表していることがわかりました。 インスタンスはクラスの名前みたいなものなのかなと 思いますが、どうでしょうか?? C言語をやっていたので、クラス型の変数名のことを インスタンスだと思うのですが。 自分の中では String mystr = new String(""); ------ ++++++++++++++ インスタンス  コンストラクタ となっていると認識しております。

  • nimua
  • ベストアンサー率21% (8/38)
回答No.1

「型」の概念ですね。 「myReader」はBufferdReader型、 そこにInputStreamReader型を代入しようとしてエラーになっています。 親子関係があれば、必ずしも同じクラスである必要はありませんが。。 Stringに関してはすこし特殊で、 ""で囲まれたものは、String型で扱われます。

KGM
質問者

補足

C言語のように、 scanf関数で入力文字を変数に格納して、 その変数をprintf関数で読む。 といった、流れがJavaではつかみにくいです。 同じクラスである必要がないとなると、 但しいプログラミングでは /*BufferedReader myReader = new BufferedReader(new InputStreamReader(System.in));*/ となって、同じクラスに属している気がします。 的外れな質問になっていると思われますが、 宜しくお願いします。

関連するQ&A

  • 入出力について

    下記のソースコードで、2点不明な点がありますので ご教授お願い致します。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class ab3{ public static void main(String args[]){ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in)); try{ System.out.println("名前を入力してください"); String myString = myReader.readLine(); System.out.println(myString + "さん、こんにちわ!"); }catch(IOException e) { } } } 1. BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in)); ここのソースコードについてですが、 new BufferedReader(new InputStreamReader ^^^ ^^^ (System.in)); 「new」が二つもついていますが、何故二つも つける必要があるのでしょうか。 一つであっても問題はないと思われ、 2番目の「new」を取り除くと、エラーが表示されて しまいます。 また、上記ソースコードを BufferedReader myReader ; myReader = InputStreamReader(System.in)); と分割して書こうとしてもエラーが表示されてしまいます。 2. String myString = myReader.readLine(); ここの部分ですが、これはString型のインスタンス(コンストラクタ?)を 作っていると思われますが、この部分を String myString ; myString = myReader.readLine(); または、 String myString = new myReader.readLine(); としてたら、エラーが表示されてしまいます。 JAVAを初めて間もなく、質問の内容がわかりづらいと 思われます。入出力について理解するのに苦労して おりますが、何卒ご教授の程お願い致します。

    • ベストアンサー
    • Java
  • キーボードから文字列を入力する際の質問です。

    キーボードから文字列を入力する際の質問です。 どうしてもカタカナでしか日本語の入力が出来ません。 ローマ字入力です。 import java.io.*; class Sample4 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str + "が入力されました。"); } }

    • ベストアンサー
    • Java
  • JavaでString型をChar型に変換するプログラムが分かりません

    JavaでString型をChar型に変換するプログラムが分かりません;; どなかた助けて下さい。 下のプログラムの何がいけないんでしょうか?? いろいろ間違ってるところはあると思うんですが、教えて下さい! import java.io.*; class { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); StringBuffer moji = new StringBuffer(str1); char nyuu=moji;

  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • BufferedReader.readline()で読み込んだ文字列の

    BufferedReader.readline()で読み込んだ文字列の長さがおかしい。 質問させてください。 BufferedReader.readline()を使用して入力した文字列の長さを表示させると、値が正しく表示されません。 例えば、「東京都千代田区」と入力した場合、長さは9と表示されます。 (東京都と入力すると長さは3と表示されます) どなたか原因をご存知ありませんでしょうか。 コードを以下に記載します。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Question_1_1 { /* * メイン関数 * @param args 起動引数 */ static public void main(String[] args) throws IOException{ InputStreamReader input = new InputStreamReader(System.in); BufferedReader buff = new BufferedReader(input); String str = ""; System.out.println("文字列入力>"); str = buff.readLine(); System.out.println("文字列長さ : " + str.length()); // ストリームを閉じる input.close(); buff.close(); } }

    • ベストアンサー
    • Java
  • 今勉強中のjavaで。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • Java
  • 下記のようなjavaのプログラムで、* や / を入力しても,

    下記のようなjavaのプログラムで、* や / を入力しても, 必ず判定がfalseのほうになるんですけど、どうすれば良いですか? あまりjavaには詳しくないので、分かりやすく教えていただければ幸いです。お願いします。 import java.io.*; public class test{ public static void main(String[] args) throws IOException{ BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String a; a = input.readLine(); if((a == "*") ^ (a == "/")){ System.out.println("OK"); }else{ System.out.println("エラー"); } } }

    • ベストアンサー
    • Java
  • javaについて質問させてください

    入力していった数を足していく式を作りたいんですが、どのような式にしたらいいのでしょうか? ググってみたのですが、どうも難しく、説明の理解もできませんでした。。 import java.io.*;public class Input6{ public static void main(String args[]) throws IOException{ int i; String s1,s2; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); while( ↑ここまではできたのですが、ここから先が全くできません><(合ってるかどうかもわかりません><) 実行結果として >java ry 合計 100 現在の合計100 900 現在の合計1000 みたいな感じのを作りたのですが、どなたか式を教えてもらえませんか>< ヒントでもいいのでよろしくお願いします><

  • javaで大きなファイルを解析できますか?

    100MBくらいのアクセスログをjavaを使って解析しようと思うのですが、どうしても、エラーが出ます。 読み込み方が間違っているのでしょうか? まったくわかりません。 教えていただけないでしょうか? また、これを知ったきっかけも教えていただけましたら幸いです。 宜しくお願い致します。 読み込みの部分↓↓↓ class kaiseki { public static void main(String[] args) throws Exception { InputStream is = new FileInputStream("log.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(is));

    • ベストアンサー
    • Java
  • BufferedReaderなどについて

    今JAVAを勉強しているのですが。 少しつまづいてしまいました。 ---------------------------------------------- import java.io.*; class Cat { public static void main(String args[]) throws IOException { File inputFile = new File(args[0]); FileReader in = new FileReader(inputFile); BufferedReader br = new BufferedReader(in); //・・・続く ---------------------------------------------- 上のプログラム全て、といいますか import java.io.*; や BufferedReader のことが特によく分かりません。いろいろサイトや本などを見てみたのですが、それでもいまいち理解できませんでした。どなたか、教えてください、お願い致します

    • ベストアンサー
    • Java