我是新来的,所以放轻松。我尝试了搜索功能但找不到太多(最接近的响应是在python和C ++中)。我对从类到类传递“变量”(或者它是参数?)有一个脆弱的理解,并想在这里发帖,看看是否有人可以帮助阐明这一点。我在网上课,我在下面发布了我的代码。我们被要求输入课程名称和教师姓名的输入并输出它,另外还有一个静态的课程和教师名称(不接受任何输入)。我无法理解courseName,name(在GradeBook和GradeBookTest中)和setCourseName之间的关系。我已经尝试重新阅读我的书中的部分(这不是最好的),观看youtube视频等,但我只是不在这里。我觉得我也非常接近理解它!
首先, GradeBookTest中的“String name”与GradeBook的构造函数中的“String name”有任何关系吗?它们是相同的“对象”吗?
另外,为什么“String name”必须在setCourseName方法的括号中?它已经在构造函数中初始化了,所以方法setCourseName应该能够在没有它的情况下引入String名称,对吗?
所以操作顺序似乎是:
我只是不确定构造函数通过下一个方法(setCourseName)发生了什么,就传递的String名称而言。有人能解释一下这里发生了什么吗?
public class GradeBook
{
private String courseName; // course name for this GradeBook
private String instructorName; // STEP A - Name of the instructor for the course
// constructor initializes courseName with String argument
public GradeBook( String name, String teacher ) { // constructor name is class name
setCourseName(name); // initializes courseName
setInstructorName(teacher); // STEP C - initializes instructorName
} // end constructor
// method to set the course name
public void setCourseName( String name ) {
courseName = name; // store the course name
} // end method setCourseName
// method to retrieve the course name
public String getCourseName() {
return courseName;
} // end method getCourseName
// display a welcome message to the GradeBook user
public void displayMessage() {
// this statement calls getCourseName to get the
// name of the course this GradeBook represents
System.out.printf( "Welcome to the grade book for\n%s!\n",
getCourseName() );
System.out.printf( "This course is presented by:\n%s!\n",
getInstructorName() );
} // end method displayMessage
// method to set instructor name
public void setInstructorName( String teacher) {
//prompt for and read instructor name
instructorName = teacher; //stores the instructor name
} //end method setInstructorName
//method to retreive instructor name
public String getInstructorName() {
return instructorName;
} // end method getCourseName
} // end class GradeBook
现在为GRADEBOOKTEST
import java.util.Scanner;
public class GradeBookTest
{
// main method begins program execution
public static void main( String[] args )
{
String teacher;
String name;
Scanner input = new Scanner(System.in); // initialize scanner for input from user
System.out.printf("Please enter the course name: ");
name = input.nextLine();
System.out.printf("Please enter the instructor's name: "); // prompt for input
teacher = input.nextLine(); // obtain user input of the instructor name
// create GradeBook object
GradeBook gradeBook1 = new GradeBook(name, teacher);
GradeBook gradeBook2 = new GradeBook(
"CIS 254 - Intro to object-oriented programming", "Professor Green" );
gradeBook1.displayMessage();
System.out.println() ;
gradeBook2.displayMessage();
System.out.println();
System.out.printf("Programmed by Grant Ognibene!\n");
} // end main
} // end class GradeBookTest
谢谢!
答案 0 :(得分:0)
在您的main
课程中执行的第一件事是GradeBookTest
方法。
你写过
String name;
name = input.nextLine();
因此名称将获得价值,并将其存储在常量池中。
在创建对象时,您将值传递给name
到行
GradeBook gradeBook1 = new GradeBook(name, teacher);
name&#39>的值将分配给name
的构造函数的局部变量(GradeBook
)。
在构造函数中,您再次调用setter方法setCourseName
。
字符串name
是setter method中的局部变量。所以将值分配给name
变量,然后将其分配给instance variable
courseName
。
最终我们只会在常量池GradeBook
类中创建单个条目。
变量将被多次创建,因为它们是局部变量,但字符串文字只会在常量池中插入一次。