下面给您详细讲解“Java面向对象代码块及不同位置对属性赋值的执行顺序”的攻略。
1. 面向对象代码块
Java中的代码块可以分为普通代码块、构造代码块和静态代码块。其中静态代码块和构造代码块可称作面向对象代码块。下面是两个例子:
1.1 静态代码块
静态代码块在类初始化时执行,仅执行一次,适合于执行一次性的初始化操作。
public class Test {
static {
System.out.println("这是静态代码块!");
}
public static void main(String[] args) {
}
}
在以上代码中,当我们执行main方法时,控制台会输出“这是静态代码块!”,因为在类加载的时候,静态代码块就已经执行了。
1.2 构造代码块
构造代码块在每次创建对象时执行,适合于对对象的属性进行初始化操作。
public class Test {
{
System.out.println("这是构造代码块");
}
public Test() {
System.out.println("这是构造方法");
}
public static void main(String[] args) {
new Test();
new Test();
}
}
在以上代码中,我们创建了两个Test的实例。每个实例初始化时,都会先执行构造代码块,再执行构造方法。输出结果如下:
这是构造代码块
这是构造方法
这是构造代码块
这是构造方法
2. 不同位置对属性赋值的执行顺序
对于一个类的属性,可以在变量定义处赋值,也可以在代码块或构造方法中进行赋值,同样对于静态属性也是这个原理。下面是两个例子:
2.1 属性赋值代码块、构造代码块、构造方法
public class Test {
{
System.out.println("这是构造代码块");
num = 2;
}
int num = 1;
public Test() {
System.out.println("这是构造方法");
System.out.println("num: " + num);
}
public static void main(String[] args) {
new Test();
}
}
在以上代码中,属性num在变量定义处赋值为1,然后在构造代码块中给num赋值为2,最后在构造方法中输出num的值。控制台的输出结果为:
这是构造代码块
这是构造方法
num: 2
可以看出,构造代码块中的赋值操作先于构造方法的执行,而变量定义处的赋值在所有代码块之前执行。
2.2 静态属性赋值代码块、静态代码块、变量定义处赋值
public class Test {
static {
System.out.println("这是静态代码块");
staticNum = 2;
}
static int staticNum = 1;
public static void main(String[] args) {
System.out.println("staticNum: " + staticNum);
}
}
在以上代码中,静态属性staticNum在变量定义处赋值为1,然后在静态代码块中给staticNum赋值为2,最后在main方法中输出staticNum的值。控制台的输出结果为:
这是静态代码块
staticNum: 2
可以看出,静态代码块中的赋值操作先于变量定义处的赋值,而静态代码块和变量定义处的操作都先于main方法的执行。
以上就是“Java面向对象代码块及不同位置对属性赋值的执行顺序”的攻略,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 面向对象代码块及不同位置对属性赋值的执行顺序 - Python技术站