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(…);