Notepad ++中的多类

时间:2018-09-04 04:51:35

标签: java

因此,我不熟悉Notepad ++,并且在Blue J中有一个可用的程序。 我尝试将其转移,但继续收到错误:

  

“ Average.java:5:错误:UserInput类是公共的,应在名为UserInput.java的文件中声明public class UserInput ^

     

注意:Average.java使用未经检查或不安全的操作。

     

注意:使用-Xlint:进行重新编译:未选中以获取详细信息。 1个错误”

我认为这与我编写每个类的方式有关,但是我不确定如何修复。

enter image description here

3 个答案:

答案 0 :(得分:2)

文件中仅允许使用一个公共类,并且该公共类应与该文件具有相同的名称。

第一个解决方案在错误中定义得很好。 “ UserInput [...]应该在名为UserInput.java 的文件中声明。”
第二种解决方案是更改类的可见性

A.java

public class A {}
class B{}
protected class C{}
private class D{}

public class E{} //THIS IS NOT ALLOWED, it should be in E.java

请注意,即使在一个文件中只能定义一个公共类,也不一定要有一个公共类。

X.java

protected class X{} //this is valid. 

但是不要在该文件中添加其他类作为公共类,只有XX.java中是公共类

答案 1 :(得分:1)

在Java中,每个Java文件只能声明1个公共类。因此,要快速解决您的问题,您只需将UserInput类拆分到自己的名为UserInput.java的文件中,就这么简单。

尽管有点复杂,但是您可以研究Inner ClassesLocal Classes,这将允许您在一个文件中声明一个或多个其他类。

已阅读

以下是LocalClass(代码取自Local Inner Classes Documentation)的示例

public class LocalClassExample {

    static String regularExpression = "[^0-9]";

    public static void validatePhoneNumber(String phoneNumber1, String phoneNumber2) {
        final int numberLength = 10;

        // Valid in JDK 8 and later:

        // int numberLength = 10;

        class PhoneNumber {

            String formattedPhoneNumber = null;

            PhoneNumber(String phoneNumber) {
                // numberLength = 7;
                String currentNumber = phoneNumber.replaceAll(
                regularExpression, "");
                if (currentNumber.length() == numberLength)
                    formattedPhoneNumber = currentNumber;
                else
                    formattedPhoneNumber = null;
            }

            public String getNumber() {
                return formattedPhoneNumber;
            }

            // Valid in JDK 8 and later:

            // public void printOriginalNumbers() {
                // System.out.println("Original numbers are " + phoneNumber1 +
               // " and " + phoneNumber2);
            // }
        }

    PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1);
    PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2);

    // Valid in JDK 8 and later:

    // myNumber1.printOriginalNumbers();

    if (myNumber1.getNumber() == null) 
        System.out.println("First number is invalid");
    else
        System.out.println("First number is " + myNumber1.getNumber());
    if (myNumber2.getNumber() == null)
        System.out.println("Second number is invalid");
    else
        System.out.println("Second number is " + myNumber2.getNumber());

    }

    public static void main(String... args) {
       validatePhoneNumber("123-456-7890", "456-7890");
    }
}

此代码将打印出来

First number is 1234567890
Second number is invalid

正如@AxelH所说,这对于一个没有太多知识的人来说可能有点复杂,但这是一个有趣的小练习。有关更简单的信息,请参考@AxelH答案。

答案 2 :(得分:0)

UserInput类是公共的,应该在名为UserInput.java的文件中声明

我想这个例外是不言自明的。只需将File name重命名为UserInput.java即可!