![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
javaの勉強を始めたばかりの初心者です。
クラスのオブジェクトの生成方法は(1)の方法だけだと思っていたのですが,
本を読んでいると以下の(1)~(3)の3種類の生成の方法がでてきます。
オブジェクトの生成方法について以下の質問にお答えいただきたいです。
【質問1】
(2)のオブジェクトの生成方法は以下のような考え方でしょうか?
BufferedReader br = new BufferedReader();
InputStreamRader k = InputStream();
BufferedRader br = new BufferdRader(k);
これを省略して・・・
BufferedReader br = new BufferedReader(new InputStreamReader ());
【質問2】
(3)のオブジェクト生成方法は以下の考え方でしょうか
Container ct = new Container();
ct = frame.getContentPane();
これを省略して・・・・
Container ct = frame.getContentPane();
【質問3】
オブジェクト生成方法はこの3種類の他にもあるのでしょうか
【質問4】
(1)~(3)の方法には使い分け(ルール)があるのでしょうか?
例えば「このクラスの場合この方法」というような
--------------------------------------------------------------------
(1)MyClass br = new MyClass();
クラス名 オブジェクト = new コンストラクタ;
--------------------------------------------------------------------
(2)BufferedReader br = new BufferedReader(new InputStreamReader ());
--------------------------------------------------------------------
(3)Container ct = frame.getContentPane();
--------------------------------------------------------------------
No.2ベストアンサー
- 回答日時:
BufferedReader br = new BufferedReader(new InputStreamReader ()); をよく見てみましょう。
あなたが(1)で書いている
クラス名 オブジェクト = new コンストラクタ;
の形になっていますね?
BufferedReaderのコンストラクタが引数を取っている形になっているだけです。(そしてそのコンストラクタの引数としてnewしているオブジェクトを入れているだけ)
つまり、
InputStreamRader k = new InputStream();
BufferedRader br = new BufferdRader(k);
を略しているだけですね。
これは、両方とも
クラス名 オブジェクト = new コンストラクタ;
の形になっていますね?
オブジェクトの生成方法は基本的に
クラス名 オブジェクト = new コンストラクタ;
の1通りです。(コンストラクタには引数あり、なしがあります)
ただし、いろいろな理由(抽象クラスだからnewできない、シングルトンにしたい等)で<簡単には>new コンストラクタとかけない場合があります。その場合に、そのクラスにオブジェクトをとってくるメソッドがある場合があります。例えば、
java.util.Calendar.getInstance()
などです。(注:シングルトンではありません)
ただし、これらは実は<そのメソッドの中身で>newしているのです。だから、基本は
クラス名 オブジェクト = new コンストラクタ;
であると言う理屈は変わりません。どうしてこのように中身でnewしたりしているのかは勉強を続けていけばわかるようになるでしょう。
最後に、No.1さんが書いている通り
ct = frame.getContentPane();
はオブジェクトを生成しているわけではありません。これはJFrameクラスがすでに持っているオブジェクトを返しているだけです。「カプセル化」や「セッター、ゲッター」を学べば考え方がわかるのではないかと思います。
最後に【質問4】の答えですが、これはクラスにより異なりますので、参考URLのページで見てもらうしかありません。コンストラクタのところにprotectedなどの文字が書かれていない場合、そのコンストラクタを普通に「new コンストラクタ」と書くことにより呼び出すことができます。(もちろん、引数は指定されているものに合わせてください)
しかし、protectedなどの修飾子がある場合はあなたが利用するときに「new コンストラクタ」と書くことはできません。その場合、自身のクラスのオブジェクトを返すメソッドが用意されていたりします。今までに自分が使ったことのあるクラスをチェックしてみて下さい。
参考URL:http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/in …
No.1
- 回答日時:
【質問1】
BufferedReader br = new BufferedReader(new InputStreamReader ());
は、始めにInputStreamReaderを生成し、そのオブジェクトを引数にBufferedReaderを生成するということで、
InputStreamRader k = InputStream();
BufferedRader br = new BufferdRader(k);
を1行にしたものです。
BufferedReader br = new BufferedReader();
InputStreamRader k = InputStream();
BufferedRader br = new BufferdRader(k);
を省略して・・・
とありましたが、一番上の行は必要ありません。
引数なしのBufferedReaderのコンストラクタは(確か)ありませんし、1行目で生成されたbrオブジェクトは3行目に生成されたオブジェクトに置き換わってどこからも参照されなくなりますので、意味がありません。
【質問2】
こちらも質問1と同じで、1行目の
Container ct = new Container();
は必要ありません。
Container ct = frame.getContentPane();
はこの行でオブジェクトが生成されるのではなく、frameが"元々"持っているオブジェクトを取得しているに過ぎませんので、生成の種類には入らないと思います。
【質問3】
基本的には
(1)XXClass obj = new XXClass();
(2)XXClass obj = new XXClass(arg1, arg2,・・);
の2種類で
引数なしのコンストラクタ
(これをデフォルトコンストラクタといいます)
と
引数ありのコンストラクタ
ということになると思います。
あと
(3)XXClass obj = new factoryMethod();
(4)XXClass obj = XXClass.getInstance();
なるもの等もあり、
(3)をファクトリメソッド
(Container ct = frame.getContentPane();はこれに似てます)
(4)をシングルトンといいますが、
kaito1980さんには、まだ難しいのかもしれません。。
がんばって勉強されているのだと思いますが、
ただ、アドバイスとして、あまり生成の"種類"を考えなくてもいいように思えます。
基本は上の(1)、(2)だということで。
(↑【質問4】の回答)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Illustrator(イラストレーター) 【シェイプ形成ツール】でうまく分割できない 1 2022/05/26 10:57
- Ruby No route matches [GET] "/posts/5/destroy" 1 2022/03/24 13:00
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- C言語・C++・C# C#のSystem.Windows.Media.Colorに関する質問です。 3 2022/05/18 11:51
- HTML・CSS HTMLソースの質問 3 2022/07/28 13:29
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0 == False はいいけど
-
Webアプリケーションのエラーメ...
-
パワーポイントのVBAでテキスト...
-
COMコンポーネントって何?
-
オブジェクトレベルとメタレベル
-
Vbで通常使用するプリンターを...
-
JavaのSocketを使い、チャット...
-
VBSでのステートメントの末尾が...
-
bmp画像をjpegやpng画像に圧縮...
-
Object型からDouble型へのキャスト
-
VBAのWindowオブジェクトとWork...
-
オブジェクトに値を保持させる...
-
[Javascript]テキストボックス...
-
エクセルVBAのオブジェクト...
-
VBでExcelオブジェクトを引数を...
-
VBAからノーツを起動
-
ビジュアルC++でボタンの有...
-
MATLABプロットの線にアルファ...
-
VBA 同じ名前のオブジェクトを...
-
Flash 動画ファイルの扱い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
JAVAからHTMLへ値を返す方法
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBA 同じ名前のオブジェクトを...
-
Object型からDouble型へのキャスト
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
LISTBOXの内容が更新されま...
-
Vbで通常使用するプリンターを...
-
多人数のじゃんけんプログラム
-
オブジェクト名をforループ内で...
-
ASP.net 教えてください!!(...
-
JSPのout.printについて
-
時間帯判定をする。
-
error C2712: オブジェクト ア...
-
Accessの連結・非連結オブジェ...
おすすめ情報