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

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

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

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

Q&A

解決済

3回答

426閲覧

【初心者】newの中にnew

satoshiiiiii

総合スコア10

Java

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

0グッド

0クリップ

投稿2019/11/20 11:52

javaに関する基本的な質問です。

以下のコードについてです。
自分なりに色々と調べましたが思うような答えが出ていないため質問させていただきます。

package info.searchman; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Pra2_1 { public static void main( String[] args ) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) ); String s = br.readLine(); System.out.println( s ); } }

newが連続して出てきている部分が何をしているかさっぱり分かりません。

インスタンス化をするときのルールとして
「クラス名 インスタンス名= new クラス名();」と本に書いてありました。

使用しているクラスや変数については大雑把に意味は分かっているつもりです。
特にこの部分でどういった処理が行われているのか詳しく教えていただけないでしょうか。

BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );

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

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

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

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

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

m.ts10806

2019/11/20 23:46

質問は編集可能であることと 質問に「初心者アイコン」がつけられること は覚えておいてください
guest

回答3

0

ベストアンサー

次のように書いているのと同じです。

Java

1InputStreamReader inputStreamReader = new InputStreamReader(System.in); 2BufferedReader br = new BufferedReader(inputStreamReader);

追記

クラス名 インスタンス名= new クラス名();

実際には、型名 変数名[ = 任意の式]; ですかね。[]は省略可能という意味で使っています。
ですから int a = 1 + 2; みたいなコードも書けるのです。

もちろん int a = "hoge"; みたいのは駄目ですが。

投稿2019/11/20 11:54

編集2019/11/20 12:27
LouiS0616

総合スコア35660

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

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

satoshiiiiii

2019/11/20 12:11

回答ありがとうございます。 「クラス名 インスタンス名= new クラス名();」のクラス名は省略可能ということでしょうか? それとも連続する場合のみ可能ということですか? また、こういった書き方に呼び方はあるのでしょうか?(詳しく調べてみたい) ちなみに以下の解釈で間違いないでしょうか? ①標準出力がSystem.inに代入される。 ②InputStreamReaderによってSystem.inのバイト・ストリームの文字が文字ストリームに変換される。 ③BufferedReaderによって文字型入力ストリームからテキストに変換される?? 五月雨式ですみませんがよろしければ回答のほどお願いします。
LouiS0616

2019/11/20 12:21 編集

System.out.println("Hello" + "World"); みたいなコードを書いたことはありませんか? これも、String m = "Hello" + "World"; System.out.println(m); と二行に分けて書いているのと全く同じように動作します。同じ理屈です。 > また、こういった書き方に呼び方はあるのでしょうか?(詳しく調べてみたい) 特殊な文法でも何でも無いので、特に名前は無いように思います。 --- > ①標準入力がSystem.inに代入される。 いいえ。標準入力ストリームがSystem.inに保持されています。 > ②InputStreamReaderによってSystem.inのバイト・ストリームの文字が文字ストリームに変換される。 これは概ね正しいですが、後述のとおりちょっと誤解があると思います。 > ③BufferedReaderによって文字型入力ストリームからテキストに変換される?? バッファリングして効率化しています。標準入出力は非常に処理が遅いのです。 ==ちょっとした誤解== InputStreamReader, BufferedReader のインスタンスを作ったときに入力が読み取られているわけではありません。入力が読み取られるのは例えばreadLineメソッドなどを呼び出したときで ※、InputStreamReader, BufferedReader で読み取り方を指定しているだけです。 ※ 実際にはバッファリングされるので、完全に同時とは言い切れないです。
satoshiiiiii

2019/11/20 12:42

非常に分かりやすい説明で疑問が解消されました。 知識がまったくなくバッファリングについての部分は 理解が追いついていませんが今後のヒントとさせていただきます。 ご回答ありがとうございました。スッキリしました。
guest

0

インスタンス化をするときのルールとして

「クラス名 インスタンス名= new クラス名();」と本に書いてありました。

そんなルールは無いです。

クラス名 インスタンス名 (というより変数名)
で("クラス名"型の)変数の宣言

new クラス名();
で"クラス名"のインスタンスを作っている

=
で代入

という3つのことをしています。

ルールとして1つのものとして覚えるから変なことになってます

投稿2019/11/20 12:20

ozwk

総合スコア13521

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

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

satoshiiiiii

2019/11/20 13:27

「new InputStreamReader( System.in )」の型と変数名はどこにあたるのですか?
ozwk

2019/11/20 13:38

無いです
ozwk

2019/11/20 14:39

だから、そんなルールは無いんです。 System.out.println("hoge");を見て 「文字列はstring 変数名 = "文字列"というルールだからこの書き方はおかしい!」って騒いでるようなもんです。
guest

0

クラスのコンストラクタの引数にこれまたクラスを生成してるだけで、分けて考えればいいです

投稿2019/11/20 11:55

y_waiwai

総合スコア87774

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

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

satoshiiiiii

2019/11/20 12:58

難しく考えすぎていたかもしれません。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問