public class College{
int year;
String name;
College(int year,String name){
year=year;
name=name;
}
public static void main(String[] args) {
College first=new College(1998,"BITS");
System.out.println("The year is:"+first.year);
System.out.println("The name is:"+first.name);
}
}
我的输出是:
这一年是0
名称为null
答案 0 :(得分:6)
这是因为您在构造函数中隐藏了year
和name
字段。
使用:
College(int year,String name){
this.year=year;
this.name=name;
}
或:
College(int y,String n){
year=y;
name=n;
}
我更喜欢第一种选择。
顺便说一句,字段不是私有,因为您没有将它们声明为一个,默认为package
。
即使您将它们设置为私有,属于类的静态方法也可以看到私有成员变量。
答案 1 :(得分:5)
宣布:
year=year;
name=name;
...你阴影你的变量。
您的变量与范围相关联,目前,year
和name
的范围都在构造函数中。你基本上是在自己的基础上分配它。
您有几个选择:
this
运算符 - this.year = year;
重命名传入的变量名称,前缀为:
College (int theYear, String theName) {
year = theYear;
name = theName;
}
此外,此课程中没有任何私人字段。它们都被设置为包私有,根本没有可见性修饰符。
如果您使用year
修饰符指定了字段name
和private
,那么您就是对的;你必须使用getter来检索变量值。
答案 2 :(得分:1)
您必须使用
this.year = year
this.name = name
在构造函数中 这样可以解决问题:)
答案 3 :(得分:1)
在您提到的问题中,对于以下变量,他们是私人数据成员但声明不正确。
int year; // default access specifier (for variable) is package not private
String name; /// default access specifier (for variable) is package not private
默认可见性称为“包”(尽管您不能使用此关键字),这意味着可以从该类所属的同一个包内访问该字段。 See more information here.
您在代码中隐藏变量,因此您可以使用下面的代码修复它们
College(int year,String name){
this.year=year;
this.name=name;
}