不理解 类 之间变量之间的关系
Not understanding relationship between variables between classes
我是新来的所以放轻松。我尝试了搜索功能,但找不到太多(最接近的响应是 python 和 C++)。我对从 class 到 class 传递 "variables"(或者它是参数?)有一个脆弱的理解,想在这里 post 看看是否有人可以帮助阐明这一点.我正在在线 class 并且我已经 post 在下面编辑了我的代码。我们被要求输入课程名称和讲师姓名并将其输出,此外还有另一个静态的课程和讲师姓名(不接受任何输入)。我无法理解 courseName、名称(在 GradeBook 和 GradeBookTest 中)和 setCourseName 之间的关系。我已经尝试重新阅读我书中的部分(这不是最好的),观看 youtube 视频等,但我只是不关注这里。我觉得我也快理解了!
首先,
GradeBookTest中的"String name"和GradeBook的构造函数中的"String name"有关系吗?他们是一样的吗"objects"?
还有,为什么setCourseName方法中的"String name"一定要放在括号里?它已经在构造函数中初始化,因此方法 setCourseName 应该能够在没有它的情况下引入字符串名称,对吧?
看来操作顺序是:
- Class GradeBookTest 运行并初始化 "String name"。
- 它将用户从第一个问题输入的内容分配给名称。名称现在是用户输入内容的占位符。
- GradeBook 中和构造函数括号中的名称现在发生了什么变化?
- 似乎 "object" setCourseName 被设置为 GradeBookTest class(用户输入)
中的任何名称
我只是不确定构造函数通过下一个方法 (setCourseName) 发生了什么,就传递的字符串名称而言。有人可以解释一下这里发生了什么吗?
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
现在开始成绩册测试
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
谢谢!
首先执行的是 GradeBookTest
class 中的 main
方法。
你写了
String name;
name = input.nextLine();
因此 name 将获得值并将其存储在常量池中。
在创建对象时,您将 name
的值传递给行
中的构造函数
GradeBook gradeBook1 = new GradeBook(name, teacher);
name 的值将分配给 GradeBook
的构造函数的局部变量 (name
)。
在构造函数中你再次调用 setter 方法 setCourseName
.
字符串 name
是 setter 中的局部变量 method.so 值将分配给 name
变量,然后您将其分配给 instance variable
courseName
。
我们最终只会在常量池中创建单个条目 GradeBook
class。
变量将被创建多次,因为它们是局部变量,但字符串文字只会被插入常量池一次。
我是新来的所以放轻松。我尝试了搜索功能,但找不到太多(最接近的响应是 python 和 C++)。我对从 class 到 class 传递 "variables"(或者它是参数?)有一个脆弱的理解,想在这里 post 看看是否有人可以帮助阐明这一点.我正在在线 class 并且我已经 post 在下面编辑了我的代码。我们被要求输入课程名称和讲师姓名并将其输出,此外还有另一个静态的课程和讲师姓名(不接受任何输入)。我无法理解 courseName、名称(在 GradeBook 和 GradeBookTest 中)和 setCourseName 之间的关系。我已经尝试重新阅读我书中的部分(这不是最好的),观看 youtube 视频等,但我只是不关注这里。我觉得我也快理解了!
首先, GradeBookTest中的"String name"和GradeBook的构造函数中的"String name"有关系吗?他们是一样的吗"objects"?
还有,为什么setCourseName方法中的"String name"一定要放在括号里?它已经在构造函数中初始化,因此方法 setCourseName 应该能够在没有它的情况下引入字符串名称,对吧?
看来操作顺序是:
- Class GradeBookTest 运行并初始化 "String name"。
- 它将用户从第一个问题输入的内容分配给名称。名称现在是用户输入内容的占位符。
- GradeBook 中和构造函数括号中的名称现在发生了什么变化?
- 似乎 "object" setCourseName 被设置为 GradeBookTest class(用户输入) 中的任何名称
我只是不确定构造函数通过下一个方法 (setCourseName) 发生了什么,就传递的字符串名称而言。有人可以解释一下这里发生了什么吗?
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
现在开始成绩册测试
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
谢谢!
首先执行的是 GradeBookTest
class 中的 main
方法。
你写了
String name;
name = input.nextLine();
因此 name 将获得值并将其存储在常量池中。
在创建对象时,您将 name
的值传递给行
GradeBook gradeBook1 = new GradeBook(name, teacher);
name 的值将分配给 GradeBook
的构造函数的局部变量 (name
)。
在构造函数中你再次调用 setter 方法 setCourseName
.
字符串 name
是 setter 中的局部变量 method.so 值将分配给 name
变量,然后您将其分配给 instance variable
courseName
。
我们最终只会在常量池中创建单个条目 GradeBook
class。
变量将被创建多次,因为它们是局部变量,但字符串文字只会被插入常量池一次。