`
suko
  • 浏览: 74672 次
  • 性别: Icon_minigender_1
  • 来自: 富安
社区版块
存档分类
最新评论

构造代码块的执行顺序

阅读更多
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中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    Java 普通代码块静态代码块执行顺序(实例讲解)

    在Java编程语言中,了解代码块的执行顺序对于编写高效且无错的代码至关重要。这里我们将深入探讨Java中的普通代码块(实例初始化块)和静态代码块...希望这个实例和解释能帮助你更好地理解和应用Java的代码块执行顺序。

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    本文将深度剖析几个常见的Java面试题目,包括方法重写、静态代码块和构造方法的执行顺序。 首先,我们来讨论**方法重写(Override)**。在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对...

    Java:静态代码块和构造函数执行顺序

     1 静态变量,静态代码块(类加载时执行,类不加载不执行)  2 实例变量,实例代码块(创建对象时才执行,不创建对象不执行)  3 构造函数,(创建对象时执行完2后再执行构造函数,不管构造函数是public还是private...

    Android代码块执行顺序分析总结

    Android代码块执行顺序分析总结 Android代码块执行顺序是指在Java中,代码块、变量、方法的加载顺序是一个重要的知识点,对于Android开发者来说尤其重要。本文将详细介绍Android代码块执行顺序的分析总结。 一、...

    Java 中普通代码块,构造代码块,静态代码块区别及代码示例

    Java编程语言中有三种类型的代码块,它们分别是普通代码块、构造代码块和静态代码块,每种都有其特定的用途和执行顺序。 1. **普通代码块**: 普通代码块(也称为局部代码块)是在方法或者类的成员变量声明之间...

    java中静态代码块与构造方法的执行顺序判断

    5. 执行构造代码块(如果有的话)。 关于方法重写(Override)和重载(Overload): - 重载发生在同一类中,方法名相同,但参数列表不同(参数类型、个数或顺序不同)。 - 重写发生在父类和子类之间,方法名、返回...

    Java构造代码块,静态代码块原理与用法实例分析

    构造代码块的执行顺序是在构造函数之前,且每个对象都要执行一次构造代码块。构造代码块的作用是将类的所有对象初始化成一样的值,以防止构造函数中初始化的变量被修改。 例如: ``` class Person{ String gender;...

    类加载顺序的代码执行结果

    先静态代码块,然后构造代码块,再是构造方法,然后方法里面的代码块按顺序执行。 子类继承父类的时候,先执行父类的静态代码块,然后子类的静态代码块,然后父类的构造代码块和构造方法,再是子类的构造代码块和...

    类执行顺序小结.doc

    2. 接着,`Parent`类的静态变量`d2`被初始化,这触发了`Delegate`类的加载和初始化,输出:“Delegete类的静态代码块”,“Delegete类的构造代码块”,“Delegete类的构造方法Parent静态变量d2”。 3. 然后,`Parent...

    java 代码块与静态代码块加载顺序

    }`,打印出 "调用userSay静态方法" 和 "进入静态构造代码块"。 2. 其次执行实例代码块 `{ System.out.println("进入代码块"); }`,打印出 "进入代码块"。 3. 最后执行 `main` 方法,创建 `User` 对象实例,并执行其...

    java面试准备要点记录

    - **构造代码块执行顺序**: - 类的构造代码块在每次创建新实例时都会被执行。 - 如果子类继承了父类,则先执行父类构造代码块,再执行子类构造代码块。 - **构造器执行顺序**: - 在构造一个子类的对象时,...

    Java静态代码块作用及执行顺序解析

    在继承关系中,静态代码块的执行顺序是:父类静态代码块 -&gt; 子类静态代码块 -&gt; 父类非静态代码块 -&gt; 父类构造方法 -&gt; 子类非静态代码块 -&gt; 子类构造方法。 静态代码块和静态方法的区别在于:静态代码块是自动执行的...

    静态代码块

    2. **执行顺序**:静态代码块的执行优先于构造代码块和构造函数。这是因为类的加载发生在对象创建之前。 3. **适用场景**:静态代码块主要用于初始化类级别的资源或者数据,比如数据库连接、日志配置等,这些通常是...

    深入浅析Java中普通代码块、构造代码块与静态代码块

    每当创建类的新实例时,构造代码块就会执行,且它的执行顺序优先于类的构造函数。这意味着,如果在构造代码块中有初始化操作,这些操作会在构造函数执行之前完成。如果类中有多条构造代码块,它们也会按照在类中定义...

    java中的静态代码块、构造代码块、构造方法详解

    在Java编程语言中,类的初始化过程涉及到几个关键的概念,包括静态代码块、构造代码块和构造方法。这些概念在创建对象和管理类的状态时起着至关重要的作用。以下是关于这三个概念的详细解释: 1. **静态代码块**: ...

    Java类的完整构造执行顺序

    而类初始化则是指在类首次被使用时,JVM执行的一系列初始化操作,包括静态变量赋值、静态代码块执行等。 根据题目提供的内容,我们可以总结出Java类构造执行的详细步骤,这些步骤确保了类的正确初始化以及对象的...

    Java代码块与代码加载顺序原理详解

    Java代码块的加载顺序是按照静态代码块、构造代码块、局部代码块的顺序加载的。 (一)静态代码块的加载 静态代码块是在类加载时执行的,只加载一次,用于对类进行一些初始化。 (二)构造代码块的加载 构造代码...

    Java基础之代码块.docx

    Java基础之代码块 Java 中的代码块是指用一对花括号 {} 包围的代码区域,这些代码块可以...Java 中的代码块有三种:普通语句块、构造块和静态块,每种代码块的执行时机不同,需要根据实际情况选择合适的代码块类型。

Global site tag (gtag.js) - Google Analytics