【问题标题】:Error - Illegal static declaration in inner class错误 - 内部类中的非法静态声明
【发布时间】:2013-10-29 04:29:36
【问题描述】:

这是什么意思?

Illegal static declaration in inner class Mobile.mymobile
  modifier 'static' is only allowed in constant variable declarations
Line 75,  public static void main(String[] args) {  

我的代码:

/**
 * to write a simple java class Mobile that models a mobile phone.
 * 
 * @author (jamal) 
 * @version (14/10/13)
 */
public class Mobile
{
    // type of phone
    private String phonetype;
    // size of screen in inches
    private int screensize;
    // menory card capacity
    private int  memorycardcapacity;
    // name of present service provider
    private String serviceprovider;
    // type of contract with service provider
    private int typeofcontract;
    // camera resolution in megapixels
    private int cameraresolution;
    // the percentage of charge left on the phone
    private int checkcharge;
    // wether the phone has GPS or not
    private String GPS;
    // instance variables - replace the example below with your own
    private int x;

    // The constructor method

    public Mobile(String mobilephonetype, int mobilescreensize,
        int mobilememorycardcapacity,int mobilecameraresolution,
        String mobileGPS, String newserviceprovider) {
        this.phonetype =  mobilephonetype;
        this.screensize = mobilescreensize;
        this.memorycardcapacity = mobilememorycardcapacity;
        this.cameraresolution = mobilecameraresolution;
        this.GPS = mobileGPS;

        // you do not use this ones during instantiation,you can remove them if you do not need or assign them some  default values 
        //this.serviceprovider = newserviceprovider;
        //this.typeofcontract = 12;
        //this.checkcharge = checkcharge;

        Mobile samsungPhone = new Mobile(
            "Samsung" // String mobilephonetype
        ,   1024      // int mobilescreensize 
        ,   2         // int mobilememorycardcapacity 
        ,   8         // int mobilecameraresolution 
        ,   "GPS"     // String mobileGPS
        ,   "verizon" // String newserviceprovider 
        );

        //typeofcontract = 12;
        //checkcharge = checkcharge;
    }

    // A method to display the state of the object to the screen
    public void displayMobileDetails() {
        System.out.println("phonetype: " + phonetype);
        System.out.println("screensize: " + screensize);
        System.out.println("memorycardcapacity: " + memorycardcapacity);
        System.out.println("cameraresolution: " + cameraresolution);
        System.out.println("GPS: " + GPS);
        System.out.println("serviceprovider: " + serviceprovider);
        System.out.println("typeofcontract: " + typeofcontract);
    }

    /**
     * The mymobile class implements an application that
     * simply displays "new Mobile!" to the standard output.
     */
    public class mymobile {
        public static void main(String[] args) {
            System.out.println("new Mobile!"); //Display the string.
        }
    }

    public static void buildPhones(){
        Mobile Samsung = new Mobile("Samsung", 3, 4, 8, "verizon", "GPS");
        Mobile Blackberry = new Mobile("Blackberry", 3, 4, 8, "verizon", "GPS");   
    }

    public static void main(String[] args) {
        buildPhones();
    }  
}

【问题讨论】:

  • 我也有类似的错误。令人惊讶的是,Java 编译器可以像 missing ; 一样出色,有时又像 cannot be dereferenced

标签: java


【解决方案1】:

出现此错误是因为您在一个程序中有两个主要方法。

【讨论】:

  • 在Java中拥有多个main方法是完全有效的。
【解决方案2】:

在 Java 中,无法在一个文件中添加两个公共类。您需要更改mymobile 类修饰符默认值,例如 class mymobile,或者您可以将 Mobile 类修饰符更改为默认值,例如 class Mobile。

【讨论】:

    【解决方案3】:

    这在这里得到了很好的回答: Modifier static is only allowed in constant variable declarations

    简而言之:因为 mymobile 是 Mobile 的子类,所以它不能有静态成员(主函数)。

    如果您可以将 mymobile 类移出 Mobile,则错误应该会清除。

    【讨论】:

      【解决方案4】:

      在静态内部类中不能有公共和静态字段

      见Inner Class Documentation here

      【讨论】:

        猜你喜欢
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-16
        相关资源
        最近更新 更多