首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实例化对象时出现错误"non-static variable this non be referenced from a static context“

实例化对象时出现错误"non-static variable this non be referenced from a static context“
EN

Stack Overflow用户
提问于 2015-10-18 13:26:48
回答 4查看 104关注 0票数 1

当我试图从'Boat‘类实例化一个对象时,我得到了错误“非静态变量this non be referenced from a static context”。任何帮助都将不胜感激!

代码语言:javascript
复制
package simpleboatapp;

/**
 *
 * @author ragarwala
 */
public class SimpleBoatApp {

    public class Boat {

        private float speed;
        final private float topSpeed = 90;
        private boolean sailPosition;

        public Boat()
        {
            speed = 0;
            sailPosition = false;
        }
        public void goFast (String boatName)
        {

            if (speed < topSpeed)
            {
                speed = speed + 10;
                sailPosition = true;
                System.out.println (boatName + "is raising the sail at speed of" + speed + "mph");
            }
            else
            {
                sailPosition = true; 
                System.out.println (boatName + "is raising the sail at maximum speed of" + speed + "mph");
            }
        }

    }

  /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        Boat simpleboat = new Boat(); <--- Error occurs for this line
        simpleboat.goFast("Destiny"); 
    }

}
EN

回答 4

Stack Overflow用户

发布于 2015-10-18 13:32:08

有几种解决方案:

  • Put Boat 类到不同的类文件中。如果Boat将是一个非静态类,并且您想在静态类中实例化它,它应该在自己的静态Boat run.
  • Change类中。如果你将Boat类设为静态的,你将能够在Main函数中实例化它,程序将会实例化**Boat**类的方式。你可以这样实例化它:

Boat simpleboat = new Main().new Boat();

这将解决静态/非静态冲突。

票数 1
EN

Stack Overflow用户

发布于 2015-10-18 14:46:08

您的Boat类不需要来自包含类BoatApp的任何内容。

在这种情况下,可以使用static关键字声明它是一个static成员类,并且能够从静态上下文实例化它。

代码语言:javascript
复制
public static class Boat {

当您在另一个类中声明一个类时,默认假设是内部类可以访问外部类中的数据。这意味着它总是需要在作用域中有一个外部类的实例。

如果你想了解更多信息,可以搜索“内部类”。

但是在这种情况下,您显然不希望从成员类Boat (它只是一个main方法的持有者)中访问您的BoatApp,因此您只需要将Boat声明为static,或者将其移动到它自己的文件中。

票数 1
EN

Stack Overflow用户

发布于 2015-10-18 13:32:57

问题是,您将Boat类封装在另一个类SimpleBoatApp中,同时尝试在没有封装它的类的情况下静态实例化一个新的Boat

相反,请考虑将Boat类移出SimpleBoatApp类,同时将main方法保留在SimpleBoatApp内部

代码语言:javascript
复制
public class SimpleBoatApp {
    public static void main(String[] args) {
        Boat simpleboat = new Boat();
        simpleboat.goFast("Destiny"); 
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33194633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档