当我试图从'Boat‘类实例化一个对象时,我得到了错误“非静态变量this non be referenced from a static context”。任何帮助都将不胜感激!
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");
}
}发布于 2015-10-18 13:32:08
有几种解决方案:
Boat 类到不同的类文件中。如果Boat将是一个非静态类,并且您想在静态类中实例化它,它应该在自己的静态Boat run.Boat类设为静态的,你将能够在Main函数中实例化它,程序将会实例化**Boat**类的方式。你可以这样实例化它:Boat simpleboat = new Main().new Boat();
这将解决静态/非静态冲突。
发布于 2015-10-18 14:46:08
您的Boat类不需要来自包含类BoatApp的任何内容。
在这种情况下,可以使用static关键字声明它是一个static成员类,并且能够从静态上下文实例化它。
public static class Boat {当您在另一个类中声明一个类时,默认假设是内部类可以访问外部类中的数据。这意味着它总是需要在作用域中有一个外部类的实例。
如果你想了解更多信息,可以搜索“内部类”。
但是在这种情况下,您显然不希望从成员类Boat (它只是一个main方法的持有者)中访问您的BoatApp,因此您只需要将Boat声明为static,或者将其移动到它自己的文件中。
发布于 2015-10-18 13:32:57
问题是,您将Boat类封装在另一个类SimpleBoatApp中,同时尝试在没有封装它的类的情况下静态实例化一个新的Boat。
相反,请考虑将Boat类移出SimpleBoatApp类,同时将main方法保留在SimpleBoatApp内部
public class SimpleBoatApp {
public static void main(String[] args) {
Boat simpleboat = new Boat();
simpleboat.goFast("Destiny");
}
}https://stackoverflow.com/questions/33194633
复制相似问题