Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态-非静态相互作用_Java_Oop_Static - Fatal编程技术网

Java 静态-非静态相互作用

Java 静态-非静态相互作用,java,oop,static,Java,Oop,Static,我有两个班互相交流。第一个是中心的,如下所示: public class Datenbank { double winkelPanel = 0; double groessePanel = 0; double effizienzPanel = 0; double maxProduktion = 0; 这里我初始化变量并给它们赋值。在同一个类的后面,还有函数addPanel: 据我所知,这本身是好的。现在有另一个类,来自与之交互的GUI if(menuItem == mPanelHinzufue

我有两个班互相交流。第一个是中心的,如下所示:

public class Datenbank {
double winkelPanel = 0;
double groessePanel = 0;
double effizienzPanel = 0;
double maxProduktion = 0;
这里我初始化变量并给它们赋值。在同一个类的后面,还有函数addPanel:

据我所知,这本身是好的。现在有另一个类,来自与之交互的GUI

if(menuItem == mPanelHinzufuegen) {
        double Flaeche = Double.parseDouble(showInput("Fläche des Panels in m^2:"));
        double Richtung = Double.parseDouble(showInput("Richtung des Panels(S = 0, W = 90, 0 = -90):"));
        double winkel = Double.parseDouble(showInput("Winkel des Panels in Grad, z.B. 23.5:"));
        double effizienz = Double.parseDouble(showInput("Effizienz des Panels, z.B. 23.5:"));
        double maxProd = Double.parseDouble(showInput("Max. Produktion des Panels in Watt:"));

        Datenbank.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);

    }

当我调用Datenbank.addPanel时,我得到一个编译器错误,因为GUI是静态的,而Datenbank不是。简单地在addPanel方法中添加“static”是不起作用的,因为变量(winkelPanel等)开始抛出一个错误,即这些变量是非静态的,因此不能像那样使用。

根据您的设置,我假设
Datenbank
(英语数据库)是单例,因此在应用程序中只应实例化一次

因此,您可以将该类重写为单例:

public enum Datenbank {
  INSTANCE;
  double winkelPanel = 0;
  double groessePanel = 0;
  double effizienzPanel = 0;
  double maxProduktion = 0;
  public void addPanel(double richtung, double winkel, double groesse, 
                                double effizienz, double maxProd) {
  ...
}
本例假设类
Datenbank
具有默认构造函数,否则必须为
实例提供适当的参数

然后,您可以在GUI中访问该实例:

Datenbank.INSTANCE.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);

根据您的设置,我假设
Datenbank
(英语数据库)是一个单例,因此在应用程序中只应实例化一次

因此,您可以将该类重写为单例:

public enum Datenbank {
  INSTANCE;
  double winkelPanel = 0;
  double groessePanel = 0;
  double effizienzPanel = 0;
  double maxProduktion = 0;
  public void addPanel(double richtung, double winkel, double groesse, 
                                double effizienz, double maxProd) {
  ...
}
本例假设类
Datenbank
具有默认构造函数,否则必须为
实例提供适当的参数

然后,您可以在GUI中访问该实例:

Datenbank.INSTANCE.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);

为什么要让它静止呢

Datenbank db = new Datenbank();
db.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);

为什么要让它静止呢

Datenbank db = new Datenbank();
db.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);

将“static”关键字添加到addPanel是不够的。您需要将“Datenbank”类的所有实例变量设置为静态

public class Datenbank {
static double winkelPanel = 0;
static double groessePanel = 0;
static double effizienzPanel = 0;
static double maxProduktion = 0;

将“static”关键字添加到addPanel是不够的。您需要将“Datenbank”类的所有实例变量设置为静态

public class Datenbank {
static double winkelPanel = 0;
static double groessePanel = 0;
static double effizienzPanel = 0;
static double maxProduktion = 0;

Datenbank中的变量在静态上下文中没有意义,除非它们是静态的,这意味着类中只有一个变量。如果在静态方法中使用它们,则它们应该是静态的。 是否创建Datenbank类型的对象来调用addPanel,是否将类变量声明为静态(在本文中对我来说意义不大)。
也将变量声明为私有:)

Datenbank中的变量在静态上下文中没有意义,除非它们是静态的,这意味着类中只有一个变量。如果在静态方法中使用它们,则它们应该是静态的。 是否创建Datenbank类型的对象来调用addPanel,是否将类变量声明为静态(在本文中对我来说意义不大)。
将变量也声明为私有:)

您试图调用Datenbank的“静态”方法,该方法不存在

如果要将面板添加到Datenbank的特定实例,则表示通过“new”实例化的Datenbank对象

因此,您的GUI类必须有一个成员或一个提供数据库对象的方法,然后您可以调用addPanel


这里的主要问题是:静态用于类,非静态部分用于实例。

您试图调用Datenbank的“静态”方法,但该方法不存在

如果要将面板添加到Datenbank的特定实例,则表示通过“new”实例化的Datenbank对象

因此,您的GUI类必须有一个成员或一个提供数据库对象的方法,然后您可以调用addPanel


这里的主要问题是:静态用于类,非静态部分就是例子。

将addPanel设置为satic时,您的相位设置到底是什么错误?数据库中的变量也需要是静态的。
数据库中的变量也需要是静态的。您不能从静态方法访问非静态成员。基于您的代码,您需要设置
addPanel
和数据库中的字段(不推荐)。或者您只需创建一个数据库实例:
DataBank db=new DataBank();
然后像这样使用:
db.addPanel(…)
将addPanel设置为satic时,您的阶段化错误到底是什么?数据库中的变量也需要是静态的。
数据库中的变量也需要是静态的。您不能从静态方法访问非静态成员。基于您的代码,您需要设置
addPanel
和数据库中的字段(不推荐使用)。或者您只需创建一个数据库实例:
DataBank db=new DataBank();
然后像这样使用:
db.addPanel(…);