Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Static - Fatal编程技术网

Java 如何处理静态对象数组?

Java 如何处理静态对象数组?,java,arrays,static,Java,Arrays,Static,我在编写的解析器中遇到了一个处理静态对象类型的问题 glob = new func("glob"); glob.addChild(new func("wrong")); System.out.println(glob.name); func是一个静态类,我在上面的main代码中引用了它。运行此代码时,打印的文本为“错误”。我假设将func设为静态会导致只允许有一个func,并且由于我无法创建func的实例,它会被覆盖。有办法解决这个问题吗?下面是func声明的部分代码,供参考 static c

我在编写的解析器中遇到了一个处理静态对象类型的问题

glob = new func("glob");
glob.addChild(new func("wrong"));
System.out.println(glob.name);
func是一个静态类,我在上面的main代码中引用了它。运行此代码时,打印的文本为“错误”。我假设将func设为静态会导致只允许有一个func,并且由于我无法创建func的实例,它会被覆盖。有办法解决这个问题吗?下面是func声明的部分代码,供参考

static class func{
  public func (String name){
     //etc
  }
}
这正成为一个问题,因为我希望能够创建这些对象的嵌套,用于确定解析器中的作用域。func会有子节点,其思想是子节点可以查找一个“变量”(这里只是一个字符串),我先在它自身中添加变量,然后在其父节点中添加变量,依此类推。但是,创建子对象只是覆盖了父对象

更新:人们想从func获得更多代码

static class func{
public static func[] children;
public String name;
public static func parent;
private static int child_index, var_index;
private static String[][] vars;
    public func (String name, func parent){
       children = new func[50];
       //etc
    }
 }

你说得对,我确实有一个静态名称。如果我删除它,我担心的是vars/children数组仍然会被覆盖,删除它们会给我很多“非静态变量不能被引用…”消息。

类上的
static
修饰符与其他实体上的
static
修饰符的作用不同。首先,您根本不能将
静态
应用于顶级类。它仅对在另一个类中定义的类有用:

public class Outer {

    public class Inner {
    ...
    }

    static public class Nested {
    ...
    }

}
不同之处在于,无论何时创建类
内部
的对象,从某种意义上说,该对象“属于”外部类的某个对象。
内部
对象包含对某些
外部
对象的引用,其方法可以引用它所属的
外部
对象的字段

然而,
嵌套的
类更像是顶级类;主要区别在于,外部类可以将其称为
Outer.Nested
,当您需要多个不同的嵌套类都命名为
Nested
时,这非常有用。这是一种避免顶级类名“污染名称空间”的方法,并且可以清楚地表明,
嵌套的
在某种程度上与
外部的
密切相关。另外,由于Java关于可见性的规则,
嵌套的
类的方法可以访问
外部
私有
成员,这是外部顶级类无法做到的


但这并不意味着只能创建一个嵌套的
。如果您想要一个只能有一个对象的类,请使用单例模式。(但也要考虑您是否真的想这样做以及为什么要这样做;一些程序员不喜欢单例模式,可能是因为它们看起来太像全局变量,这降低了将来对程序进行某些更改的灵活性。)(另外,在仔细阅读了你的问题后,我不确定你想要的是单身,事实上我也不清楚你的设计应该是什么样子。)之所以如此,是因为静态变量是属于
类的变量,而不是该类的实例,对于内部静态类也是如此

否则,我看不出您是如何使
func
类成为静态的,因为据我所知,Java不允许顶级类是静态的,只有内部类可以是静态的


我看不清楚您的目标是什么,但您应该重新考虑您的设计。也许有人可以通过更好的解释提供一些帮助。

我假设像我这样使func成为静态函数会导致只允许有一个func
-不,
静态
内部类与ir封闭类,仅此而已。类始终是“静态的”(每个类加载器一个类“实例”)而
static
不会阻止您创建实例,这将以不同的方式完成。由于
static
仅允许在内部类上使用,因此似乎存在外部类,这可能会导致问题。您可以发布该问题吗?请包含
func
类的所有代码。您描述的唯一方法是n是如果构造函数中的
name
参数被分配给一个静态字段
name
Btw,那么你在标题中提到的数组在哪里?@NickHolt我已经更新了我的op以包含更多的类。你在静态名称字段上说得对,但是对如何处理其他静态字段有什么见解吗?我正在使用这些对象在jflex中,它要求我能够在静态类中工作。我想我的问题是,我可以从静态位置的子类中访问非静态方法吗?@Skyl3lazer只需将所有字段设置为非静态
,仅仅因为类是静态的,并不意味着它的字段需要是静态的。