Java——初始化块,初始化块与构造方法,静态初始化块
2017-09-25 22:58
232 查看
初始化块
一个类里面可以定义多个初始化块,相同类型的初始化有顺序,前面定义的先执行,后定义的后执行,有static的先执行。
语法格式如下:
[修饰符]{
//初始化可执行的代码
}
注意:修饰符只能使用static。
public class Person {
// 两个成员变量name age
private String name;
private int age;
执行后的结果是:
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
如果我们添加上修饰符呢
package com.shenjian.base;
import com.shenjian.Student;
public class Person {
// 两个成员变量name age
private String name;
private int age;
}
结果是:
第三个初始化块(static)–Person的姓名:
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
去掉注释(mian方法中),结果是:
第三个初始化块(static)–Person的姓名:
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
从结果中我们可以看到有初始化块要比构造方法先执行,带static修饰符的初始化块比普通初始化块先执行,但是每次只创建一次。如果让子类继承呢,先建Student类继承Person,在创建一个LiuTao类继承Student类,里面分别写一个带static的初始化块和一个不带static的初始化块,一个构造方法。
public class Student extends Person {
{
System.out.println(“Student的第1个块”);
}
Student(){
System.out.println(“Student的构造方法”);
}
static {
System.out.println(“Student的第2个块(static)”);
}
}
public class LiuTao extends Student {
{
System.out.println(“LiuTao的第1个块”);
}
LiuTao(){
System.out.println(“LiuTao的构造方法”);
}
static {
System.out.println(“LiuTao的第2个块(static)”);
}
public static void main(String[] args) {
new LiuTao();
new LiuTao();
}
}
运行效果如下:
第三个初始化块(static)–Person的姓名:
Student的第2个块(static)
LiuTao的第2个块(static)
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
Student的第1个块
Student的构造方法
LiuTao的第1个块
LiuTao的构造方法
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
Student的第1个块
Student的构造方法
LiuTao的第1个块
LiuTao的构造方法
结果发现,只要是以static修饰的初始化块先执行一边,执行顺序是从最开始的父类到最后的子类,再执行最开始的父类初始化块和构造方法,之后是直接父类的初始化块和构造方法,最后是自己的初始化块和构造方法。Stati修饰的块只创建一次。
一个类里面可以定义多个初始化块,相同类型的初始化有顺序,前面定义的先执行,后定义的后执行,有static的先执行。
语法格式如下:
[修饰符]{
//初始化可执行的代码
}
注意:修饰符只能使用static。
public class Person {
// 两个成员变量name age
private String name;
private int age;
public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } /*** * 无参构造方法 */ public Person() { System.out.println("这是父类的构造方法"); } public static void main(String[] args) { new Person(); } { setName("李四"); setAge(12); System.out.println("第一个初始化块--Person的姓名:" + getName() + ",Person的年龄:" + getAge()); } { setName("王五"); setAge(13); System.out.println("第二个初始化块--Person的姓名:" + getName() + ",Person的年龄:" + getAge()); } }
执行后的结果是:
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
如果我们添加上修饰符呢
package com.shenjian.base;
import com.shenjian.Student;
public class Person {
// 两个成员变量name age
private String name;
private int age;
public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } /*** * 无参构造方法 */ public Person() { System.out.println("这是父类的构造方法"); } public static void main(String[] args) { new Person(); //去掉注释进行对比 //new Person(); } { setName("李四"); setAge(12); System.out.println("第一个初始化块--Person的姓名:" + getName() + ",Person的年龄:" + getAge()); } { setName("王五"); setAge(13); System.out.println("第二个初始化块--Person的姓名:" + getName() + ",Person的年龄:" + getAge()); } static { System.out.println("第三个初始化块(static)--Person的姓名:"); }
}
结果是:
第三个初始化块(static)–Person的姓名:
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
去掉注释(mian方法中),结果是:
第三个初始化块(static)–Person的姓名:
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
从结果中我们可以看到有初始化块要比构造方法先执行,带static修饰符的初始化块比普通初始化块先执行,但是每次只创建一次。如果让子类继承呢,先建Student类继承Person,在创建一个LiuTao类继承Student类,里面分别写一个带static的初始化块和一个不带static的初始化块,一个构造方法。
public class Student extends Person {
{
System.out.println(“Student的第1个块”);
}
Student(){
System.out.println(“Student的构造方法”);
}
static {
System.out.println(“Student的第2个块(static)”);
}
}
public class LiuTao extends Student {
{
System.out.println(“LiuTao的第1个块”);
}
LiuTao(){
System.out.println(“LiuTao的构造方法”);
}
static {
System.out.println(“LiuTao的第2个块(static)”);
}
public static void main(String[] args) {
new LiuTao();
new LiuTao();
}
}
运行效果如下:
第三个初始化块(static)–Person的姓名:
Student的第2个块(static)
LiuTao的第2个块(static)
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
Student的第1个块
Student的构造方法
LiuTao的第1个块
LiuTao的构造方法
第一个初始化块–Person的姓名:李四,Person的年龄:12
第二个初始化块–Person的姓名:王五,Person的年龄:13
这是父类的构造方法
Student的第1个块
Student的构造方法
LiuTao的第1个块
LiuTao的构造方法
结果发现,只要是以static修饰的初始化块先执行一边,执行顺序是从最开始的父类到最后的子类,再执行最开始的父类初始化块和构造方法,之后是直接父类的初始化块和构造方法,最后是自己的初始化块和构造方法。Stati修饰的块只创建一次。
相关文章推荐
- java中静态初始化块、初始化块和构造方法的理解
- java中初始化块、静态初始化块和构造方法
- Java 构造方法,初始化块,静态初始化块
- java静态代码块、初始化块和构造方法的执行顺序解析
- jAVA中静态初始化块、初始化块和构造方法的理解
- java中静态初始化块、初始化块和构造方法的理解 (转载)
- jAVA中静态初始化块、初始化块和构造方法的理解
- Java中静态初始化块、初始化块和构造方法的执行过程
- java静态代码块、初始化块和构造方法的执行顺序
- java中初始化块、静态初始化块和构造方法
- java静态代码块、初始化块和构造方法的执行顺序
- java静态代码块、初始化块和构造方法的执行顺序
- java中静态初始化块、初始化块和构造方法的理解
- java静态代码块、初始化块和构造方法的执行顺序【转】
- java中静态初始化块、初始化块和构造方法的理解 (转载)
- java静态代码块、初始化块和构造方法的执行顺序
- java中静态初始化块、初始化块和构造方法的理解 (转载)
- Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)
- java静态代码块、初始化块和构造方法的执行顺序
- java静态代码块、初始化块和构造方法的执行顺序