我在以下代码中遇到问题...
/**
* This class holds all of the information pertaining to
* a person's name.
*/
public class Name {
private String first, middle, last, maiden, initials, prefix, suffix;
private char middleInitial, firstInitial, lastInitial;
private
/**
* Constructor for a Name given first, middle, and last names.
*/
public Name(String first, String middle, String last) {
this.first = first;
this.middle = middle;
this.last = last;
this.middleInitial = middle.charAt(0);
this.firstInitial = first.charAt(0);
this.lastInitial = last.charAt(0);
this.initials = String.valueOf(firstInitial + middleInitial
+ lastInitial);
this.maiden = null;
this.prefix = null;
this.suffix = null;
}
还有更多,但我的错误出现在我的主要构造函数中。它给了我在标题中输入的错误。如您所见,我的类和构造函数都是公共的。这应该不会导致任何问题,但似乎正在这样做。
在构造函数的注释之前有一个"orphan"private
修饰符:
private // Here!
/**
* Constructor for a Name given first, middle, and last names.
*/
public Name(String first, String middle, String last) {
只需删除它,您应该没事。
类内的第三行有一个杂散private
。由于语句一直持续到遇到大括号或分号,因此编译器认为这是与构造函数声明相同的语句的一部分 - 它看到private public Name(String first, String middle, String last)
。
声明所有变量后,您编写了关键字 private
。
private String first, middle, last, maiden, initials, prefix, suffix;
private char middleInitial, firstInitial, lastInitial;
private // Here.
Java是一种自由类型的语言。行以;
(分号)结尾,而不是换行符。所以
private
public Name(String first, String middle, String last) {
// ...
}
被视为一行,如下所示:
private public Name(String first, String middle, String last) {
// ...
}
如您所见,构造函数有两个修饰符,public
和 private
。这在爪哇是非法的。
溶液
- 如果要保持构造函数
private
并且不希望其他类实例化它,请删除关键字public
。
或
- 如果要允许其他类实例化关键字
private
,请将其删除。