我不确定我做错了什么,但是当我构建时,我得到了错误:
找不到符号
这两个陈述。这是构造函数。
public Course
{
public Course(String cName,String cNum,ArrayList<Module> mod)
{
this.cName = cName;
courseNum = cNum;
this.mod = mod;
}
}
这是我必须做的吗?如果是这样,为什么不放弃“this”关键字而只使用cName = cName? “这个”的目的是什么?
public course
{
String cName;
public Course(String cName)
{
this.cName = cName;
}
}
答案 0 :(得分:2)
您的第一个示例无效,因为您尝试分配的字段cName
,courseNum
和mod
未在类中声明。您需要声明字段以使分配起作用。将变量设为私有以确保它们封装良好:
public Course {
private String cName;
public Course(String cName) {
this.cName = cName;
}
}
您需要使用this
的原因是在cName
- 参数和cName
- the-instance-variable之间消除歧义。您可以通过其他方式消除歧义 - 例如,通过重命名其中一个变量:
public Course {
private String cName;
public Course(String name) {
cName = name; // Using "this" is no longer required,
// because names are different.
}
}
答案 1 :(得分:0)
在同一范围内有两个同名变量的问题。最本地的一个阴影/隐藏另一个,并且需要this.
来接触隐藏的变量。
为什么不放弃&#34;这个&#34;关键字,只需使用
cName = cName
?
那不会做任何事情。只需将cName
分配给自己。有用的编译器可能会给你一个警告。
而您真正想要的是将局部变量(方法参数)分配给实例变量(字段)。由于这两者具有相同的名称(在构造函数之外被认为是样式问题),因此如果要实例变量,则必须通过说this.cName
来消除歧义。
请注意,对于第二个变量,它的工作没有this
,其中参数和字段具有不同的名称:
courseNum = cNum; // no this
答案 2 :(得分:-1)
以this.
为前缀的变量将引用该类的实例变量。 this.cName = cName
会将构造函数参数列表中声明的cName
变量的值赋给cName
类成员变量。
如果您只是写cName = cName
,它就不会做任何事情,因为您将构造函数中声明的变量的值分配给它自己。
答案 3 :(得分:-1)
您的第二个代码示例是格式化代码的正确方法。要回答您的问题,this
关键字有助于澄清范围(仅访问对象的实例字段)。
使用
public course
{
String cName;
public Course(String cName)
{
cName = cName;
}
}
仅在使用
时将参数值分配回自身public course
{
String cName;
public Course(String cName)
{
this.cName = cName;
}
}
将构造函数参数中的值cName
指定为声明为类级别字段的cName
。
答案 4 :(得分:-2)
这应该有效,
public clcass Course
{
String cName,courseNum; // instance variables
ArrayList<Module> mod; //// instance variable
public Course(String cName,String cNum,ArrayList<Module> mod)
{
this.cName = cName;
courseNum = cNum;
this.mod = mod;
}
}
每当实例变量名称与构造函数中的参数名称相同时,您需要一种方法来区分这两者。在这种情况下,this
关键字会有所帮助。例如 - 当您在构造函数中说this.cName
时,它引用实例变量cName
,当您在构造函数中说cName
时,它引用构造函数的参数名称。