Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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 - Fatal编程技术网

Java 访问静态对象而不创建包含它的类的实例

Java 访问静态对象而不创建包含它的类的实例,java,Java,我在理解“static”时遇到问题。我已经创建了类“pizzaMenu”包含包含pizza的ArrayList。所有比萨饼都添加到该类中,以后不应修改。但我想访问有关比萨饼的数据 一切都正常工作,但我必须在“main”中创建“pizzaMenu”的对象以使其正常工作 我如何才能正确地启动这些实例,以便访问它们?但是启动将不会在“main”中显示?我希望保持“main”尽可能干净。您可以在pizzamenu中将Pizza声明为公共静态 public final static List<piz

我在理解“
static
”时遇到问题。我已经创建了类“
pizzaMenu
”包含包含pizza的ArrayList。所有比萨饼都添加到该类中,以后不应修改。但我想访问有关比萨饼的数据

一切都正常工作,但我必须在“
main
”中创建“
pizzaMenu
”的对象以使其正常工作


我如何才能正确地启动这些实例,以便访问它们?但是启动将不会在“
main
”中显示?我希望保持“
main
”尽可能干净。

您可以在pizzamenu中将Pizza声明为公共静态

public final static List<pizza> pizzas;
你还提到

我想尽可能保持“主”的清洁

我认为你关于清洁代码的概念并不完全正确

但我必须在“main”中创建“pizzaMenu”的对象才能使其工作

是的,您需要一个
new PizzaMenu()
的实例才能访问该菜单项

我在理解“静态”方面有问题

pizzamanu
中的任何内容都不应该是静态的(除了
main
,如果您有它的话)。但是,它基本上意味着它属于该类,而不是该类的任何一个实例

换句话说,如果你确实把比萨饼列表做成了静态的,那么所有的菜单都有相同的比萨饼,这不应该是真的,对吗?不同的地方有不同的菜单

这里有一个例子

public class PizzaMenu {

    private List<String> pizzas = new ArrayList<>();

    public void add(String name) {
        pizzas.add(name);
    }

    public List<String> getPizzas() {
        return pizzas;
    }

    // You can also move this to another class
    public static void main() {
        PizzaMenu menu = new PizzaMenu();
        menu.add("Cheese");

        for (String pizza : menu.getPizzas()) {
            System.out.println(pizza);
        }
    }
}
公共类比萨饼菜单{
private List pizzas=new ArrayList();
公共无效添加(字符串名称){
比萨饼。添加(名称);
}
公共列表getPizzas(){
返回比萨饼;
}
//您还可以将其移动到另一个类
公共静态void main(){
PizzaMenu=新建PizzaMenu();
菜单。添加(“奶酪”);
对于(String pizza:menu.getPizzas()){
系统输出打印(比萨饼);
}
}
}
所有比萨饼都添加到该类中,以后不应修改

例如,您可以使用这个

private final List<String> pizzas = Arrays.asList("Cheese", "Pepperoni");
private final List pizzas=Arrays.asList(“奶酪”、“辣味香肠”);

但是,同样,我认为菜单的不同实例应该有不同的比萨饼

一些代码示例可能会很有帮助。您正在寻找吗?保持方法代码干净是一个好主意,但保持方法代码干净到必须添加任何全局变量不是一个好主意。是的,eckes。我错过了这个概念。感谢大家的帮助在您的示例中,
final
pizzas
仍然是可变的。您应该使用Collections.unmodifiableList()使列表不可变(因为以后不应该修改)。嗯,我想我只是在寻找没有问题的地方。我只想删除:PizzaMenu=new PizzaMenu();从“主要”。保持“主”的清晰。谢谢您的时间。@PolyMone您不能从
数组中添加/删除。asList
,但是可以直接更新元素。@karjan您可以将
PizzaMenu=new PizzaMenu()
移动到main之外。然后,它成为外部类的一个成员变量,但是,它必须是
static
,但是,使
PizzaMenu
static几乎肯定是错误的。全球状态很糟糕。你为什么不声明一个实例,确切地说,@karjan?到目前为止,我看不出你所说的任何事情都有一个有效的工程理由。不要让
pizzas
static。
private final List<String> pizzas = Arrays.asList("Cheese", "Pepperoni");