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

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

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

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

3回答

4848閲覧

なぜクラスをインスタンス化する際にコンストラクタが必ずないとダメなの?

mr0237

総合スコア164

Java

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

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

1クリップ

投稿2017/04/30 08:05

JAVAのオブジェクト指向を勉強・練習している者です。

説明が下手ですいませんが、「スッキリわかるJava入門 第2版 (スッキリシリーズ) 」の(P357)「暗黙のコンストラクタ」のところを復習を兼ねて読み直しているのですが、

実はJavaでは、すべてのクラスはインスタンス化に際して、必ず何らかのコンストラクタを実行することになっています。ですから、本来すべてのクラスは、「引数のない、何も処理をしないコンストラクタ」でよいので、**最低でも1つ以上のコンストラクタ定義を持っていなければなりません。**コンストラクタが一つも定義されてないクラスは許されないのです。

と書かれていたのですが、

1.なぜインスタンス化する際にコンストラクタが必ずないとダメなのですか?

2.「引数なし、処理内容なし」のコンストラクタ(デフォルトコンストラクタ)に入る初期値はintの場合だと0などの何もない感じの値が入るのでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

なぜインスタンス化する際にコンストラクタが必ずないとダメなのですか?

何らかのデータを格納するためのメモリ領域を確保したら、速やかにその領域に意味ある値を設定するのはよい作法であることが過去の経験上分かっています。

Javaはその言語仕様として、コンストラクタでその「よい作法」を強制するようにしている。ということです。この言語仕様は「縛り」ではなく、より良いコーディングを促すための仕組みです。

「引数なし、処理内容なし」のコンストラクタ(デフォルトコンストラクタ)に入る初期値はintの場合だと0などの何もない感じの値が入るのでしょうか?

そうです。しかし、その挙動に頼ったコーディングをするべきではありません。

投稿2017/04/30 09:26

koko_u

総合スコア936

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

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

0

クラスはあくまで設計書です。設計書を書いただけでは製品は作れませんよね?その作る方法を記したのがコンストラクタであり、製品を作る際にコンストラクタという"マニュアル"にそって製造するわけです。そういう設計から外れた作り方は許されないのです。

投稿2017/04/30 08:18

swordone

総合スコア20649

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

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

0

ベストアンサー

Javaの設計上、すべての Object は始祖として Object クラスを持っている関係で、例え自らは定義していなくても、祖先にさかのぼってデフォルトコンストラクタが呼ばれます。

子孫クラスで定義しているメンバフィールドに関する初期化はどうなるのかというと、Java 仮想マシンの仕様として、次のように初期化されることになっています。

整数型0
char\u0000
実数型0.0
booleanfalse
参照型null

ですが、きちんとコンストラクタを定義して、初期値を(例え0であっても)設定してやるべきですね。

投稿2017/05/01 02:05

tacsheaven

総合スコア13703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問