コンストラクタについて:簡単に説明すると
コンストラクタとは、クラスからインスタンスを生成する際に呼び出される部分です。
インスタンス生成時には必ず呼び出されます。
コンストラクタについて:もっと詳しく
コンストラクタの書式は以下の通りです。
アクセス修飾子 クラス名( 引数リスト ){ /* 必要なコード */ }
必要であれば
throws
節を付けることもできます。
ちなみにコンストラクタの名前は必ずクラス名と一致させなければなりません。
実際のコードで見てみましょう。
class Test{
public static void main( String args[] ){
Fatman john = new Fatman();
System.out.println( "太めのjohnの体重は" + john.weight + "kg!" );
}
}
class Fatman{
public int weight;
Fatman(){
weight = 300;
}
}
このコードの赤字で表示されている部分がコンストラクタです。
new Fatman( ) が実行されるときに Fatman クラスのコンストラクタ Fatman( ) が呼び出されて実行されます。
>javac Test.java
>java Test
太めのjohnの体重は300kg!
オブジェクト生成の際に代入が行われているので、weight は初期値の0ではなくなっています。
さらにコンストラクタは引数を取ることもできます。
class Test{
public static void main( String args[] ){
Fatman john = new Fatman( 350 );
System.out.println( "太めのjohnの体重は" + john.weight + "kg!" );
Fatman mike = new Fatman( 500 );
System.out.println( "太めのmikeの体重は" + mike.weight + "kg!" );
}
}
class Fatman{
public int weight;
Fatman( int w ){
weight = w;
}
}
>javac Test.java
>java Test.java
太めのjohnの体重は350kg!
太めのmikeの体重は500kg!
このように引数をとるようにすると、生成時に異なる初期値を持ったオブジェクト
を生成できるので便利です。
ところで、全てのクラスはコンストラクタを備えている必要があります。
しかし、以下のようなコードをコンパイルしてもエラーにはなりません。
class Test{
public static void main( String args[] ){
Fatman john = new Fatman( );
System.out.println( "太めのjohnの体重は" + john.weight + "kg!" );
}
}
class Fatman{
//コンストラクタを記述しない。
public int weight = 400;
}
>javac Test.java
>java Test
太めのjohnの体重は400kg!
コンストラクタを記述していないのに、new Fatman( ) とコンストラクタを呼び出してもコンパイルエラーに
なっていませんね。
これは、コンストラクタの記述が一つも無い場合、何もしないコンストラクタがコンパイラによって自動的に
生成されるからなのです。
この点については別項で詳しく説明する予定です。
ところで、アクセス修飾子は何の役に立つのでしょうか。
これはオブジェクトの生成を禁止して
クラスメソッド
を通じて利用させたいクラスを作る場合などに役に立ちます。
代表的なものでは、
Mathクラス
がこれに該当します。
このクラスのようにオブジェクトを生成させたくない時は、コンストラクタを
private
で宣言してしまえば
インスタンス
を生成することができません。
実際のコードで確認してみましょう。
class Test{
public static void main( String args[] ){
MyMath mm = new MyMath();
}
}
class MyMath{
private MyMath(){}
}
>javac Test.java
Test.java:3: MyMath() は MyMath で private アクセスされます。
コンパイラがコンストラクタにアクセスできないと怒っていますね。
ちなみに
java.langパッケージ
の
Mathクラス
のコンストラクタも
private
で宣言されているので、
インスタンス
を生成することはできません。
試してみましょう。
class Test{
public static void main( String args[] ){
Math m = new Math();
}
}
>javac Test.java
Test.java:3: Math() は java.lang.Math で private アクセスされます。
またしてもコンパイルエラーとなりました。
このようなクラスはオブジェクトを生成しないで、
クラスメソッド
を通じて使用しましょう。
|
SJC-P対策問題集
Java認定試験( SJC-P/310-035 )対策のメルマガ問題集も好評発刊中!
もちろん無料です。
またバックナンバーも見やすくしてオンライン問題集として随時アップしていきます。
受験しない人でも Java の基礎知識を学習するのに最適です。
SJC-P対策参考書
現在、Java認定試験(SJC-P/310-035)対策の参考書は本当にたくさん出版されてます。
ここでは、その中から厳選した本当に役立つ参考書を紹介します。
無駄な出費を抑えるためにも、ぜひ参考にして下さい。
SJC-P対策Java用語集
Java認定試験( SJC-P/310-035 )合格のために必要な Java の用語を集めました。
試験対策にはもちろん、試験以外で Java を学習する際にもご活用下さい。
更新履歴
このサイトの最新情報はここで確認できます。
また、今までこのサイトがどのような軌跡を辿ってきたのかも知ることができます。
Javaを始める人へ
これからJavaを始めようとしているあなたへ。
Javaの勉強を始めるにはどうしたら良いのかを説明しています。
また、初心者に役立つ情報を提供していきます。
Java認定資格の概要
Java認定資格にはどのようなものがあるのか。
資格取得のためにはどのような知識が必要なのか。
その他、資格を取得することのメリットなど、Java認定資格の概要を説明します。
LINK
Javaの勉強に役立つリンク。
その他のプログラミングに関するリンク。
ソフトウェアに関するリンクなど、管理人の主観で集めたリンク集です。
相互リンクも常時募集中!
詳細は以下のページで確認して下さい。
このサイトについて
このサイト「1発合格★Java認定試験!」についての説明です。
サイトで掲載しているソースコードや問題や免責事項などについて説明しています。
初めての人は一度のぞいてみて下さい。
ちょっとひと息
仕事や試験勉強に疲れたら、ここでちょっと一息つきませんか。
一生懸命に打ち込むのも良いけど、たまには何も考えずにゆっくり休むのも良いものです。
たまにはのんびり脳みそをリフレッシュしましょう。
|