平成30年秋期午後問11 Javaのインスタンス

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
まつきさん  
(No.1)
https://www.fe-siken.com/kakomon/30_aki/pm11.html
普段Javaでインスタンス化するときには『クラス名 インスタンス名= new クラス名();』といった書き方をすると思うのですが、30年秋のプログラム4ではbuf = new StringBuilder();としていて型を指定していません。このようなインスタンス化は型を指定した時とどのような違いがあるのか教えていただきたいです。また、fragmentList.add(new PassThrough(buf));では、new クラス名()のみでさらに省いた形になっているのですがこの意味も教えていただきたいです。
2021.01.31 02:10
関数従属さん 
FE ゴールドマイスター
(No.2)
parse関数にて出てくる
buf = new StringBuilder();
ですが、同じparse関数の先頭に
StringBuilder buf = new StringBuilder();
があります。

これは変数の宣言、初期値、代入に相当するもので
StringBuilder buf;  が変数の宣言(この時bufはnull)
new StringBuilder();  が初期値
buf = new StringBuilder();  が変数への代入(初期値設定)
となり
StringBuilder buf = new StringBuilder();
はbufの変数を宣言しつつ、初期値設定しているイメージとなります。

StringBuilder buf = new StringBuilder();
がない状態で
buf = new StringBuilder();
だけがあるとbufが宣言されていおらず
コンパイルエラーになるかと思います。


fragmentList.add(new PassThrough(buf));
はfragmentListがFragmentのインタフェースのリストとなっており
そこにnew PassThrough(buf)の初期値を追加する形になるかと思います。
2021.01.31 10:19
まつきさん  
(No.3)
解説ありがとうございます。
おそらく理解できたと思うのですが、
一度インスタンスを入れる変数を宣言すれば、次からはそこにインスタンスを入れていくことができるという解釈でよろしいでしょうか。
2021.01.31 16:09
関数従属さん 
FE ゴールドマイスター
(No.4)
>インスタンスを入れる変数を宣言すれば、次からはそこにインスタンスを
>入れていくことができるという解釈でよろしいでしょうか。 

上記の解釈で問題ございません。
2021.01.31 17:52

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop