Java类如何获得输入?

时间:2011-08-16 15:12:41

标签: java

我是编程(和Java)的初学者,可以使用一些基本概念的帮助。 这是我阅读有关构造函数,set和get语句的示例。

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方法的功能。你能帮助我理解这个例子吗?

7 个答案:

答案 0 :(得分: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()方法只是向控制台打印一条消息,显示该字段的当前内容。

答案 1 :(得分:1)

GradeBook是一个类,特定的成绩簿将是一个实例。由于每个实例都需要自己的名称(每个人都有自己的名字),courseName是访问该名称的变量。因此setCourseName( String name )courseName设置为name参数的值。

getCourseName()方法为任何调用它的人提供名称。由于courseName是私有的,因此您无法直接访问它 - 并且它是私有的以便维护封装(您将了解这一点)。

获取输入与该类无关。您基本上调用操作系统(使用其他类)并将读取字符串传递给您想要的任何内容,例如setCourceName(...)实例的GradeBook方法。

编辑:我会试着举个例子。

想象一下,你有一张纸有3个盒子和3个文本。方框表示成绩簿,而文本是3个课程名称的名称。

由于您不知道哪个书属于哪个课程(方框是空的),您必须通过从文本中绘制一条线到相应的框来分配它们。这就是setCourseName(...)会做的事情。

现在你想知道哪个书/盒属于哪个课程。您可以按照从框到文本的行来获取课程名称。这就是getCourseName(...)会做的事情。

该示例中的行将是实例变量courseName

希望有所帮助:)

答案 2 :(得分:1)

GradeBook类不封装任何用户输入功能。想象一下,您可能希望在几个不同的应用程序中使用此类 - 可能是Web应用程序(其中课程名称以HTML格式输入),Applet(嵌入在网页中的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();

请注意,由于GradeBook类的唯一构造函数需要一个courseName,因此通常使用setCourseName / getCourseName来修改现有GradeBook对象上的courseName,例如:从数据存储加载。

答案 3 :(得分:1)

将Gradebook视为一个对象,就像物理成绩册一样。像大多数物体一样,它本身不执行任何动作:其他力量作用于它。

成绩簿无法提示用户输入或显示输出。那些事情发生在外部势力作用于它的时候。

在这种情况下,程序可以将数据插入成绩簿,如下所示:

gradebook->setCourseName( "History" );

当您的程序运行此语句时,课程名称(“历史记录”)将保存在成绩簿中,名为“courseName”的属性中。

同样,我们可以根据成绩册来检索信息。

gradebook->getCourseName();

当您的程序执行此语句时,成绩簿将返回我们之前为courseName设置的值(“历史记录”)。

某些对象可以执行复杂的操作,但此对象很简单。因此,用户输入不由对象本身处理。

答案 4 :(得分:0)

这些只是类的成员变量的getter和setter,这意味着它们定义了获取和设置变量值的方法。在调用这些方法之前,您实际上不会获取或设置任何内容。在构造函数中,有一个为courseName的参数,这意味着当您调用Gradebook(“Math”)时,courseName变量将设置为“Math”。

答案 5 :(得分:0)

courseName是私有的,所以没有人可以更改它。 getter和setter方法用于允许和控制对此私有属性的访问。

courseName = name 将setter方法得到的var分配给内部私有。

答案 6 :(得分: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();
} 

在GradeBook课程中编写此主要方法,或者您可以在其他课程中编写。