相关疑难解决方法(0)

静态初始化块

据我所知,"静态初始化块"用于设置静态字段的值,如果不能在一行中完成的话.

但我不明白为什么我们需要一个特殊的块.例如,我们将一个字段声明为静态(没有值赋值).然后编写几行代码,生成并为上面声明的静态字段赋值.

为什么我们需要在一个特殊的块这样的行这样的:static {...}

java static initialization static-block initialization-block

252
推荐指数
8
解决办法
19万
查看次数

在使用继承时,静态块和初始化块以什么顺序执行?

我有两个班级父母和孩子

public class Parent {    
    public Parent() {
        System.out.println("Parent Constructor");
    }    
    static {
        System.out.println("Parent static block");    
    }    
    {
        System.out.println("Parent initialisation  block");
    }
}

public class Child extends Parent {    
    {
        System.out.println("Child initialisation block");
    }
    static {
        System.out.println("Child static block");
    }

    public Child() {
        System.out.println("Child Constructor");
    }    
    public static void main(String[] args) {
        new Child();    
    }
}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出将是

Parent static block
Child static block
Parent initialization  block
Parent Constructor
Child initialization block
Child Constructor
Run Code Online (Sandbox Code Playgroud)

为什么Java按该顺序执行代码?确定执行顺序的规则是什么?

java inheritance constructor static-block

81
推荐指数
5
解决办法
6万
查看次数

为什么getX()方法首先执行而不是构造函数

在下面的代码中,为什么该getX()方法首先执行而不是构造函数:

public class ConsructorQuestion {

    int x = getX();  // same this.getX();
    public int getX() {
        System.out.println(x + "  via method  ");
        return 10;
    }

    public ConsructorQuestion() {
        System.out.println(x+"  via constructor");
    }

    public static void main(String[] args) {
        ConsructorQuestion t = new ConsructorQuestion();
    }

}
Run Code Online (Sandbox Code Playgroud)

java

2
推荐指数
2
解决办法
93
查看次数

Java中的2d数组返回null结果

我正在尝试使用Java中的2D数组制作文本游戏的装甲系统.我已经把它全部弄清楚了,但代码似乎不起作用.

public static String[][] armour = new String[2][3];
{
    armour[0][0] = "shirt";
    armour[0][1] = "plate";
    armour[0][2] = "iron";
    armour[1][0] = "1";
    armour[1][1] = "0.75";
    armour[1][2] = "0.5";
}
public static void main(String[] args) {
    System.out.println(armour[0][1]);
}
Run Code Online (Sandbox Code Playgroud)

这应该返回"盘子",但它没有,我一直在查找,修改它和各种各样的现在几个小时,我不能为我的生活搞清楚.这里有人知道吗?

java null multidimensional-array

0
推荐指数
1
解决办法
425
查看次数

为什么即使在类的构造函数之前,空括号中的代码也会先执行?

虽然这是一个很小的问题要问,想要了解这种奇怪的行为!以下是代码和正在讨论的代码的行为(通过控制台输出).

public class EmptyBracesWithinClass {
    public static void main(String[] args) {
        EmptyBraces eb = new EmptyBraces();
        System.out.println("SYSO within main() method");
    }
}

class EmptyBraces {
    {
        System.out.println("SYSO within empty braces");
    }

    public EmptyBraces() {
        System.out.println("SYSO within constructor() method");
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

SYSO within empty braces
SYSO within constructor() method
SYSO within main() method
Run Code Online (Sandbox Code Playgroud)

这里的问题是,为什么在对象实例创建EmptyBraces类期间首先执行空括号内的代码片段(尽管它从未声明为STATIC显式)?

java inner-classes

-2
推荐指数
1
解决办法
167
查看次数