2011-08-16 7 views
0

私はプログラミングの初心者です(そしてJava)、基本的な概念についていくつかの助けをすることができます。 これは私のコンストラクタ、setとget文に関する読者のサンプルです。Javaクラスはどのように入力を取得しますか?

1 // Fig. 3.10: GradeBook.java 
2 // GradeBook class with a constructor to initialize the course name. 
3 
4  public class GradeBook 
5  { 
6   private String courseName; // course name for this GradeBook 
7 
8   // constructor initializes courseName with String supplied as argument 
9   public GradeBook(String name) 
10  { 
11    courseName = name; // initializes courseName 
12  } 
13 
14  // method to set the course name 
15  public void setCourseName(String name) 
16  { 
17    courseName = name; // store the course name 
18  } // end method setCourseName 
19 
20  // method to retrieve the course name 
21  public String getCourseName() 
22  { 
23    return courseName; 
24  } // end method getCourseName 
25 
26  // display a welcome message to the GradeBook user 
27  public void displayMessage() 
28  { 
29   // this statement calls getCourseName to get the 
30   // name of the course this GradeBook represents 
31   System.out.printf("Welcome to the grade book for\n%s!\n", 
32    getCourseName()); 
33  } // end method displayMessage 
34 
35 } // end class GradeBook 

私は、セットとゲットの間のステップを理解するのが少し難しいです。私の本は何も説明していませんでしたが、ユーザーがデータを入力するように促す方法はありますか?これらのいずれかのプロンプトはデフォルトで入力されていますか?私が理解できるのは、メソッドsetCourseName(String name)はコース名が文字列でなければならないということです。しかし、私はcourseName = nameのインスタンス変数を理解していません。またはgetCourseNameメソッドの機能この例を理解できるように助けてくれますか?

答えて

0

これらは、クラスのメンバ変数のgetterおよびsetterであり、変数の値を取得および設定するメソッドを定義していることを意味します。これらのメソッドを呼び出すまで、実際には何も取得または設定しません。コンストラクタには、courseNameの引数があります。つまり、Gradebook( "Math")を呼び出すと、courseName変数は "Math"に設定されます。

1

この例ではユーザー入力はありません。これは、displayMessage()メソッドに出力を書き込むだけです。たとえば、次のようにそのクラスを使用できます。

public class GradeBookMain { 
    public static void main(String[] args) { 
     GradeBook gradeBook = new GradeBook("my course"); 
     gradeBook.displayMessage(); 
     gradeBook.setCourseName("some other course"); 
     gradeBook.displayMessage(); 
    } 
} 

入力のプロンプトが表示されます。このクラスは、いくつかのデータを保持する方法を提供するだけです:コース名、具体的には。コンストラクタでは、名前を指定する必要があります。名前はprivate String courseName;フィールドに格納されています。 getter(getCourseName())およびsetter(setCourseName())は、それぞれそのフィールドの内容を返し、変更します。 displayMessage()メソッドは、フィールドの現在の内容を示すメッセージをコンソールに出力するだけです。

0

courseNameは誰も変更できないようにプライベートです。 getterメソッドとsetterメソッドは、このプライベートプロパティへのアクセスを許可し、制御するためのメソッドです。

courseName = name は、setterメソッドが内部プライベートメソッドに渡すvarを割り当てます。

1

GradeBookはクラスであり、特定の等級表がインスタンスになります。各インスタンスはそれぞれの人が自分の名前を持つように独自の名前を必要とするため、courseNameはその名前にアクセスする変数です。したがって、はnameパラメータの値にcourseNameを設定します。

getCourseName()メソッドは、それを呼び出すすべての人に名前を与えます。 courseNameはプライベートなので、直接アクセスすることはできません。カプセル化を維持するためにプライベートになっています。

入力の取得は、そのクラスとは関係ありません。基本的には(他のクラスを使用して)オペレーティングシステムを呼び出し、必要なときに読み取り文字列を渡します。 setCourceName(...)メソッドGradeBookインスタンスです。

編集:私は例を挙げてみます。

3つのボックスと3つのテキストのある用紙があるとします。ボックスはグレードブックを表し、テキストは3つのコース名の名前です。

どの書籍がどのコースに属しているかわからないので(ボックスは空です)、テキストからその行に線を引いて割り当てる必要があります。それはsetCourseName(...)のことです。

ここで、どの書籍/ボックスがどのコースに属しているかを知りたいとします。ボックスからテキストまでの行に沿ってコース名を取得します。それはgetCourseName(...)のことです。

この例の行は、インスタンス変数courseNameになります。 :)

1

成績表のクラスは、ユーザの入力機能のいずれかをカプセル化していないのに役立ちます

希望。このクラスをいくつかの異なるアプリケーションで使用したいと思うかもしれません。Webアプリケーション(コース名がHTML形式で入力される)、アプレット(Webページに埋め込まれたJavaアプリケーション)、またはコンソールベースのJavaアプリケーションを指しています。彼らはすべて異なる方法でユーザーからの入力を得るでしょう。コンソールベースのアプリケーションを想定すると、メインアプリケーションのコードのスニペットは次のようになります。

System.out.print("Enter the course name: "); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String courseName = br.readLine(); 
    GradeBook gb = new GradeBook(courseName); 
    gb.displayMessage(); 

注意を評定表クラスの唯一のコンストラクタはcourseNameを必要とするので、あなたは一般的にsetCourseName/getCourseNameを変更するために使用すること既存のGradeBookオブジェクトのcourseNameデータストアからロードされます。

1

グレードブックは、物理グレードブックのようにオブジェクトとして考えてください。ほとんどのオブジェクトと同様、アクション自体は実行されません。

グレードブックスでは、ユーザーに入力を求めたり、出力を表示することはできません。これらのことは、外部の力がそれに作用するときに起こります。この場合

、プログラムは次のように評定表にデータを挿入することができます:あなたのプログラムがこのステートメントを実行すると

gradebook->setCourseName("History"); 

、コース名(「履歴」)はプロパティで、評定表に保存されています'courseName'という名前です

同様に、私たちはグレードブックを使って情報を取得することができます。あなたのプログラムがこの文を実行すると

gradebook->getCourseName(); 

は、評定表は、我々が以前にcourseName(「歴史」)に設定された値を返します。

一部のオブジェクトは複雑な操作を実行できますが、このオブジェクトは単純です。そのため、ユーザー入力はオブジェクト自体によって処理されません。

0

また、これを試すことができます。

public static void main(String[] args) { 
    // This will initialize your class with value "java course" as your course 
    // name whenever the constructor is called. It acts like the default value 
    GradeBook GBobject1 = new GradeBook("java course"); 

    // System.in accepts the values from keyboard 
    java.util.Scanner input = new java.util.Scanner(System.in); 

    System.out.println("Enter CourseName..!"); 

    // next() method returns a String. 
    // For other types, use nextInt(), nextDouble(), etc... 
    String course= input.next(); 

    // Pass the course name as a parameter to your setCourseName(String) 
    // method in order to set the course name as you like. 
    // This line sets the course name that you entered. 
    GBobject1.setCourseName(course); 

    // In order to display the name you have to call 
    // displayMessage() which in-turn calls setCourseName() 
    // This will display the course name! 
    GBobject1.displayMessage(); 
} 

は、あなたの成績表のクラスで、このmainメソッドを書くか、あなたには、いくつかの他のクラスに書くことができます。

関連する問題