当我尝试从'Boat'类实例化一个对象时,我得到错误“非静态变量,这不能从静态上下文引用”。任何帮助将不胜感激!
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");
}
}
答案 0 :(得分:1)
有一些解决方案:
Boat
类放入另一个类文件中。如果Boat
将是一个非静态类,并且您想在静态类中实例化它,它应该在自己的文件中。Boat
类保持静态。如果使Boat
类保持静态,您将能够在Main
函数内实例化它并且该程序将运行。 更改实例化Boat
类的方式。您可以按如下方式对其进行实例化:
Boat simpleboat = new Main().new Boat();
这将解决静态/非静态冲突。
答案 1 :(得分:1)
您Boat
类不需要包含类BoatApp
中的任何内容。
在这种情况下,您可以使用static
关键字声明它是static
成员类,并且您将能够从静态上下文中实例化它。
public static class Boat {
当您在另一个类中声明一个类时,默认的假设是内部类可以访问外部类中的数据。这意味着它总是需要在范围内拥有外部类的实例。
如果您想了解更多信息,可以搜索“内部课程”。
但是在这种情况下,您的BoatApp
显然不是您想要在您的成员类Boat
中访问的内容(它只是main
方法的持有者)所以您只是需要将Boat
声明为static
,或者将其移动到自己的文件中。
答案 2 :(得分:0)
问题是你将Boat
类包含在另一个类SimpleBoatApp
中,同时尝试静态实例化一个新的Boat
而没有包含它的类。
相反,请考虑将Boat
课程移到SimpleBoatApp
课程之外,同时将main
方法留在SimpleBoatApp
内:
public class SimpleBoatApp {
public static void main(String[] args) {
Boat simpleboat = new Boat();
simpleboat.goFast("Destiny");
}
}
答案 3 :(得分:0)
它可以启动非静态(内部)类,如下所示
Boat simpleboat = new SimpleBoatApp().new Boat();
如果它有静态类,你可以启动如下
Boat simpleboat = new SimpleBoatApp().Boat();