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

Java 未加载静态类

Java 未加载静态类,java,class,constructor,static,static-constructor,Java,Class,Constructor,Static,Static Constructor,我熟悉C#,现在在Java中学习静态类。 在下面的代码中,我假设staticClass构造函数在启动时已经初始化。但事实并非如此。当调试游标到达main方法中第一个for循环的断点时。我得到一个错误“staticClass未加载” 问:在执行主方法之前,有没有一种方法可以执行静态类构造函数?或者为什么它没有加载?类似的静态类在启动时加载到C#中。但是在爪哇?请考虑这是一个不工作的代码。作为java专家,您如何重写此代码?应该纠正的 public class Main { public

我熟悉C#,现在在Java中学习静态类。 在下面的代码中,我假设staticClass构造函数在启动时已经初始化。但事实并非如此。当调试游标到达main方法中第一个for循环的断点时。我得到一个错误“staticClass未加载”

问:在执行主方法之前,有没有一种方法可以执行静态类构造函数?或者为什么它没有加载?类似的静态类在启动时加载到C#中。但是在爪哇?请考虑这是一个不工作的代码。作为java专家,您如何重写此代码?应该纠正的

public class Main {

    public static class staticClass
    {
        public static int myArray[];

        public staticClass()
        {
            myArray=new int[10];
        }

        public static int NextUnique()
        {
            int r=(int)(Math.random()*10);
            return r;
        }
    }
    //=new int[10];
    public static void main(String[] args) throws ClassNotFoundException {

        for (int i=0;i<staticClass.myArray.length;i++)
            staticClass.myArray[i]=  staticClass.NextUnique();

        for(int i=0;i<staticClass.myArray.length;i++) {
            String msg= MessageFormat.format("{0}. value= {1}",i,staticClass.myArray[i]);
            System.out.println(msg);
        }
    }
}
公共类主{
公共静态类staticClass
{
公共静态int-myArray[];
公共类()
{
myArray=新整数[10];
}
公共静态int NextUnique()
{
int r=(int)(Math.random()*10);
返回r;
}
}
//=新整数[10];
公共静态void main(字符串[]args)引发ClassNotFoundException{

对于(int i=0;i,您可以像这样初始化数组:

    public static int myArray[] = new int[10];

为此,您需要使用静态初始化块(构造函数)

 public staticClass()
    {
        myArray=new int[10];
    }
使用


您的构造函数现在是实例构造函数。每当您使用新运算符时,它都会工作。请参见和

嵌套类与tp级别的类类似,只是它嵌套在另一个类中,并且可以访问其封闭类的私有成员。它的行为与任何其他类一样。因此,如果您从不调用它,它的构造函数将不会被神奇地调用它无处不在。我不喜欢将一个类嵌入另一个类中,但我认为这是java中唯一的方法。静态类可以单独/不需要吗?当然,除非在这种情况下,你不需要static关键字。它只是成为一个顶级类,就像你的主类一样。我不确定你说的“这是唯一的方法”是什么意思。唯一的方法是什么?声明一个静态类。一个静态类必须嵌套在另一个类中。正如我阅读的文档。这是唯一的方法。是的:
public class程序{public static void main(String[]args){System.out.println(Other.var1);}}class其他{public static int var1=15;}
。但Other只是一个类。与任何其他类一样,它不是单例。Java中没有这类东西(除了使用单例模式)。将其设为嵌套类不会改变这一点。在Java中,静态不会将类转换为单例(正如您在C中所暗示的那样)没关系。谢谢。但这不是问题的答案。问题是。为什么构造函数在启动时不执行?为什么静态类没有加载。好的,JB Nizet在他的评论中给出了简短的答案:除非创建对象,否则不会调用构造函数。这不是静态构造函数。这是静态初始化块。这不是这样的事情作为Java中的静态构造函数。@JBNizet C#初学者都知道它是静态构造函数。它的工作方式相同。我已经添加了链接。提问者说“我熟悉C#”。也许这是C#中的术语。但在Java中不是。术语很重要。构造函数构造实例。这是duck test。“如果它看起来像鸭子,游泳像鸭子,嘎嘎叫像鸭子,那么它可能就是鸭子”静态初始化块和静态构造函数的工作方式相同。它们是相同的东西,但名称不同。
 static
    {
        myArray=new int[10];
    }