1.编译器会把构造代码块插入到每一个构造函数中,如果构造函数中使用了this关键字调用其他构造函数,则该构造函数中就不会插入构造代码块,以免构造代码块被重复执行。
举例说明
public class Student {
/**
*
*/
private static final long serialVersionUID = 2205426314406978220L;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private int age;
{
// 构造代码块
System.out.println("我是构造代码块");
this.name = "无名氏";
this.age = 100;
}
/**
*
*/
public Student() {
System.out.println("我是无参构造函数:Student()");
}
public Student(String name, int age) {
this();
if (name != null && !name.trim().equals("")) {
this.name = name;
}
if (age > 0) {
this.age = age;
}
System.out.println("我是有参构造函数:Student(String name, 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;
}
@Override
public String toString() {
return "[name:" + this.name + " age:" + this.age + "]";
}
/**
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
public int compareTo(Student o) {
if (this == o) {
return 0;
}
if (o == null) {
return 1;
}
return this.age - o.getAge();
}
public static Pair<Student> minmax(List<Student> list) {
if (list == null || list.size() == 0) {
return null;
}
Student min = list.get(0);
Student max = list.get(0);
for (Student p : list) {
if (min.compareTo(p) > 0) {
min = p;
}
if (max.compareTo(p) < 0) {
max = p;
}
}
return new Pair<Student>(min, max);
}
}
测试类
public class Test {
public static void main(String[] args) throws IOException {
Student student = new Student();
System.out.println("student:" + student.toString());
System.out.println("------分割线------");
Student student2 = new Student("李雷", 20);
System.out.println("student2:" + student2.toString());
}
}
执行结果如下:
我是构造代码块
我是无参构造函数:Student()
student:[name:无名氏 age:100]
------分割线------
我是构造代码块
我是无参构造函数:Student()
我是有参构造函数:Student(String name, int age)
student2:[name:李雷 age:20]
黑体字部分的构造代码块只打印了一次,且在无参构造函数之前,说明有参构造函数没有再次调用构造代码块。
2.子类的构造函数中调用父类的构造函数(调用super方法),并不影响子类构造代码块的执行。编译器会将子类构造代码块插入到super方法之后执行。
举例说明
public class StudentLeader extends Student {
/**
*
*/
private static final long serialVersionUID = -4052233131592706287L;
{
System.out.println("我是学生领袖构造代码块");
}
/**
*
*/
public StudentLeader() {
super();
}
}
测试类代码
public class Test {
public static void main(String[] args) throws IOException {
StudentLeader leader = new StudentLeader();
}
}
执行结果如下:
我是构造代码块
我是无参构造函数:Student()
我是学生领袖构造代码块
可以看出,StudentLeader类的构造代码块在Student无参构造函数执行之后才执行。
分享到:
相关推荐
下面小编就为大家带来一篇Java 普通代码块静态代码块执行顺序(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
描述继承中子类与父类构造函数,静态块的执行顺序
1 静态变量,静态代码块(类加载时执行,类不加载不执行) 2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行) 3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private...
Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题
本文介绍了Android代码块执行顺序分析总结,分享给大家,具体如下: 子类、父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的。 基础准备: 变量: 成员变量...
先静态代码块,然后构造代码块,再是构造方法,然后方法里面的代码块按顺序执行。 子类继承父类的时候,先执行父类的静态代码块,然后子类的静态代码块,然后父类的构造代码块和构造方法,再是子类的构造代码块和...
对静态代码块以及构造函数的执行先后顺序,一直很迷惑,直到最近看到一段代码,发现终于弄懂了,所以这篇文章主要给大家介绍了关于如何判断java中静态代码块与构造方法的执行顺序的相关资料,需要的朋友可以参考下。
在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按代码先后顺序执行 3. 父类的成员变量和普通...
同时,我们还了解到了代码块的执行顺序,包括静态块、构造块和普通块。 Java 是一种面向对象的编程语言,它的基础知识点非常重要。在大数据处理中, Java 语言占据着重要的地位。通过本篇文章,我们可以了解到 ...
这个非静态代码块是在创建对象时自动执行的,它的执行顺序是在构造方法中的某个点。 静态代码块与非静态代码块的区别 静态代码块和非静态代码块的主要区别是它们的执行时机。静态代码块是在类加载时自动执行的,而...
主要介绍了举例说明Java中代码块的执行顺序,包括静态属性和非静态属性以及构造函数等相关的执行先后,需要的朋友可以参考下
非静态代码块在构造器之前执行,如果类中有多个非静态代码块,也会按源码顺序依次执行。 例如,以下代码展示了不同类型的代码块: ```java class Person { String name; int age; // 静态代码块 static { ...
隐式三步,静态构造代码块,main方法之间的执行顺序总结 静态构造代码块 > main方法 > 构造代码块 > 构造方法体 对于没有构造方法的类,系统默认赠送无参构造方法 隐式三步; 1,super( ); 2,给非静态成员变量赋值 ...
* 在 Java 中,静态代码块的执行顺序优先于构造代码块和构造方法。 六、Object 类 * 在 Java 中,Object 类是所有类的父亲,用户自定义类默认扩展自 Object 类。 * Object 类提供了一些基本方法,如 equals、...
所有构造方法执行顺序如下: 执行父类的构造方法。没有继承默认继承的Object。Object会开辟一块内存,初始化所有数据为0、null、false等默认值 执行本类中的成员代码块。所有代码块是从上往下顺序执行的,所以代码...
7. Java 代码块执行顺序: - 父类静态代码块(只执行一次) - 子类静态代码块(只执行一次) - 父类构造代码块 - 父类构造函数 - 子类构造代码块 - 子类构造函数 - 普通代码块 8. 面向对象的三大特性: - ...
1. 构造函数执行顺序:Java 中的构造函数执行顺序是先执行父类的构造函数,然后执行子类的构造函数。 2. 静态变量初始化:Java 中的静态变量初始化是在类加载时执行的,而不是在实例化对象时执行的。 六、其他知识...
1. 异常处理:本题目考察了try-catch-finally语句块的使用,了解代码的执行顺序和异常处理机制。 知识点:try-catch-finally语句块、异常处理机制 2. 继承关系:本题目考察了继承关系的使用,了解父类和子类的关系...
2.构造器执行顺序 1.类加载,同时初始化类中静态的属性(赋默认值) 2.执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示...
基本块是中间代码序列中的一组顺序执行的语句序列,只有一个入口和一个出口。基本块的划分是指将中间代码序列分割成多个基本块,每个基本块都有明确的入口和出口。 基本块的划分方法包括: 1. 定义入口语句:入口...