web-dev-qa-db-ja.com

Javaコンストラクタ

Javaでクラスコンストラクターを指定する方法を学習しようとしています。それらがそのクラスから作られたオブジェクトのインスタンス変数の型を指定していることを理解し始めています。また、インスタンス変数の初期値を設定するためにも使用できます。次の例は、SunのWebサイトのJavaチュートリアルからのものです。

public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
}

クラスのどこにソースコードを作成する必要がありますか?

これらの引数は変数の名前ですか?:(int startCadence、int startSpeed、int startGear)、またはギア、ケイデンス、速度の変数の名前ですか?

(int startCadence、int startSpeed、int startGear)とギア、ケイデンス、速度の違いは何ですか?

私のインストラクターやソルトレイクコミュニティカレッジの管理者がこの質問に遭遇したというまれな出来事で、私の意図を明確にさせてください。この質問は、学問的誠実さの最大の精神で投稿されています。私はこの質問をして、一般的なアドバイスを求め、Javaプログラミング言語を使用する適切な方法を理解するのに役立ちます。私は決して他人の作品を使用せず、それを自分の作品として表現します。私は私が理解する上での一般的な助けとしてここに提供された回答私は自分ですべての作業を行い、私の質問に答えた人々によって提供された作業をコピーしません。

28
Patrick Cassell

コンストラクタは、クラスのコードのどこにでも置くことができます。ただし、慣例により、ほとんどの人はコンストラクターではない他の関数の前にそれらを置きます。

変数名については、6つすべてが実際には変数名ですが、スコープは異なります。コンストラクターへのパラメーターとして指定されたもの(startCadence、startSpeed、startGear)は、コンストラクター内でのみ使用できます。他の3つ(ギア、ケイデンス、スピード)はおそらくクラス全体の変数であり、すべてのメソッドで使用できます。ただし、定義はコードスニペットには表示されません。完全なクラスは次のようになります。

class Bicycle
{
    // class-level variables
    private int gear;
    private int cadence;
    private int speed;

    // constructor
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    // another method (not a constructor)
    public void ShiftUp() {
        gear = gear + 1; // notice the 'gear' variable is available here too.
    }
}

お役に立てば幸いです。

35
CodingWithSpike

gear、cadence、およびspeedはクラスのメンバー変数(他の場所で宣言)であり、startCadence、startSpeed、およびstartGearは関数パラメーターです。

class Bicycle
{
    private int gear, cadence, speed;

    public Bicycle(int startCadence, int startSpeed, int startGear)
    {
        // set the value of member variables from passed parameters
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;

    }
}
6
basszero

クラスのソースコードのどこにコンストラクタを配置する必要がありますか?

私は以下を使用します:

package statement ....
import statements....


public class MyClass { 
     // instance attributes
     private int i;

     // class attribute 
     private static int MAX;

     // static methods 
     public static int getClassCount() { 
     }

     // Constructor!! 
     public MyClass() {  // constructor.
     }

     // public methods 
     // protected methods
     // private methods 

     // public static void main
 }

しかし、彼らはどこにでも行くことができます。視認性の高いものから並べた方がいいと思います。たとえば、私はむしろプライベートメソッドの前にパブリックメソッドを持っています(つまり、特定のパブリックメソッドを探している場合、それがファイルの一番上にあることがわかります)同じ理由で、通常はコンストラクタを一番上に置きます。

これらの引数は変数の名前ですか?:

必要はありませんが、好きなように名前を付けることができます。通常は同じ名前を使用します。

...またはギア、ケイデンス、スピードの変数の名前ですか?...

それらはinstance変数名です

(int startCadence、int startSpeed、int startGear)とギア、ケイデンス、速度の違いは何ですか?

最初はコンストラクタのパラメータ名で、前者はコンストラクタ自体のオブジェクトの属性の名前です。

この他のサンプルを取る:

 public class Person { 
     private String name; // a person has a name.

     public Person( String nameParameter ) {  
        this.name = nameParameter;
     }
     public String toString() { 
         return "My name is : " + this.name;
     }

     public static void main( String [] args )  { 

          // creates a new "instance" and assign "Patrick" as its name.
         Person one = new Person("Patrick");
         System.out.println( one ); // prints "My name is: Patrick"

         // each person have its own name. 
         Person two = new Person("Oscar");
         System.out.println( two ); // prints "My name is: Oscar"         


     } 
 }

ご覧のとおり、コンストラクターに値を渡すときは引数を使用しています。コンストラクターコードを見ると、パラメーター名(その引数を受け取る)が表示され、インスタンス属性に割り当てられています。

5
OscarRyz
  1. それは完全にあなた次第です。私は通常、すべての変数、次にコンストラクター、そしてメソッドから始めますが、それは単なる個人的な好みです。
  2. 引数と同じ名前を付けない限り、引数の名前は完全に無関係です。この例では、gearcadence、およびspeedが変数です。
  3. あなたは(または誰かが)3つのintsをコンストラクタに渡します。名前(startCadencestartSpeed、およびstartGearは、仮パラメーター)と呼ばれ、引数を特定する方法です http://en.wikipedia.org/wiki/Parameter_(computer_science) を参照してください。
    gearcadence、およびspeedは、クラスの他の場所で定義されています。クラス内のどのメソッドもそれらを参照できます。

心配しないでください。あなたがそれで働いているなら、この種のものはすぐに第二の性質になるでしょう。

ああ、私はあなたが良いIDEを手に入れることを提案できますか? BlueJ は初心者に適していると思われ、 NetBeansEclipse は経験豊富なプログラマーに適しています。ソースコードの強調表示は非常に貴重です。

3
Michael Myers

私は通常、パッケージ、インポート、Javadoc、静的/インスタンス変数宣言セクションの後で、コンストラクターをファイルの先頭近くに配置します。

gear、cadence、speedはクラス変数であり、おそらくコンストラクタの外部のどこかで定義されています。 startCadence、startSpeed、およびstartGearも変数ですが、これらはコンストラクターに渡されるパラメーターです。

次のようなものも表示される場合があります。

public Bicycle(int cadence, int speed, int gear) {
    this.gear = gear;
    this.cadence = cadence;
    this.speed = speed;
}

同じ名前のパラメーターからクラス変数を設定します。

3
Powerlord

Head First Java のコピーが本当に必要です

1
Fortyrunner

1)コンストラクタの場所はほとんど問題ではありません。ただし、慣例として、次のように個人的に配置します。

public class Bicycle {

    public int gear, cadence speed;

    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    public void otherFunction1() {}
    public void otherFunction2() {}
    public void otherFunction3() {}

}

2)ギア、ケイデンス、スピードはクラスのメンバー変数です。それらは各自転車に属し、自転車ごとに異なる変数です。ただし、startCadence、startSpeed、およびstartGearはローカル変数であり、その関数にのみ属します。私が呼び出すとき

new Bicycle(10, 15, 5);

startCadenceを10に、startSpeedを15に、startGearを5に設定します。次に、コンストラクターは、メンバー変数を「開始」対応する変数に初期化します。

0
Allan S

実際、コンストラクターへの引数は、オブジェクトのメンバー変数として格納する必要はありません。次に例を示します。

class NumberAsString {

   private String numAsStr;

   public NumberAsString(double number) {
      this.numAsStr = Double.toString(number);
   }

}

この例では、コンストラクター引数は実際にはどこにも格納されていませんが、その値は1つ以上のメンバー変数値の計算に必要です。

すべての引数がメンバー変数として直接格納されるという、これまでに見た動作はかなり一般的です。特に、メンバー変数に「getter」および「setter」メソッドを単に提供する特定の種類のクラス(計算または変換関数を提供せずに)。 Javaの世界では、これらの種類のクラスは一般に「beans」と呼ばれます(これは非常に愚かな名前です)。

0
benjismith

Int startCadenceとcadenceの基本的な違いは変数ではなく、スコープ内です。変数がコンストラクターのようにメソッドの内部で定義されている場合、その変数はこのメソッドの内部にのみ存在し、外部には存在しません。変数がクラスで定義されている場合、その変数はそのクラスのどこにでも存在し、そのような変数にはグローバルスコープがあります。変数startCadenceはコンストラクター内にのみ存在するため、その値を他の場所で使用したい場合は、グローバルスコープを持つ別の変数に渡すことができます。これはここで何が起こるかです:cadence = startCadence;

0
Berend Vervelde

(int startCadence, int startSpeed, int startGear)パラメータはコンストラクタの引数であり、自転車フィールドcadencespeed、およびgearを設定します。これらはコンストラクタ内でのみ使用できます。 gearcadence、およびspeedは、各Bicycleインスタンスに固有のインスタンス変数であり、他のメソッドから参照可能です。コンストラクター引数を使用すると、オブジェクトの初期化用のパラメーターを提供できます。この例では、ギアが1、ケイデンスが0、速度が0の自転車オブジェクトを次のように作成できます。

Bicycle bike = new Bicycle(0, 0, 1);

または、ケイデンスが60 rpm、速度が10 mphの3速ギアで、次のように動く自転車を作成できます。

Bicycle bike = new Bicycle(60, 10, 3);

コンストラクターの配置は関係ありませんが、通常、コンストラクターはクラス定義の最初に配置されます。

0