3

我对以下代码有疑问...

/**
 * 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;

    }

还有更多,但我的错误出现在我的主要构造函数中。它给了我在标题中输入的错误。如您所见,我的类和构造函数都是公共的。这不应该引起任何问题,但似乎正在这样做。

4

3 回答 3

14

private在构造函数的注释之前有一个“孤儿”修饰符:

private // Here!

/**
 * Constructor for a Name given first, middle, and last names.
 */
public Name(String first, String middle, String last) {

只需将其删除,您应该会没事的。

于 2015-06-19T18:04:54.860 回答
6

private班级内第三行有一个流浪者。由于语句一直持续到遇到大括号或分号,编译器认为这是与构造函数声明相同的语句的一部分 - 它看到private public Name(String first, String middle, String last).

于 2015-06-19T18:03:41.940 回答
2

声明完所有变量后,就编写了关键字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. 这在 Java 中是非法的。

解决方案

  1. public如果您想保留构造函数private并且希望其他类实例化它 ,请删除该关键字。

或者

  1. private如果您想允许其他类实例化它,请删除该关键字。
于 2015-06-19T18:21:51.283 回答