`
suko
  • 浏览: 73120 次
  • 性别: 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:静态代码块和构造函数执行顺序

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

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

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

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

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

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

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

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

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

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

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

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

    对静态代码块以及构造函数的执行先后顺序,一直很迷惑,直到最近看到一段代码,发现终于弄懂了,所以这篇文章主要给大家介绍了关于如何判断java中静态代码块与构造方法的执行顺序的相关资料,需要的朋友可以参考下。

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

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

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

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

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

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

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

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

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

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

    Java基础之代码块.docx

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

    由浅入深详解Java 类的实例化顺序

    在子类对象被实例化的过程中,变量、构造方法以及代码块三者的先后顺序为: 1. 父类的静态变量和静态代码块,按代码先后顺序执行 2. 子类的静态变量和静态代码块,按代码先后顺序执行 3. 父类的成员变量和普通...

    举例说明Java中代码块的执行顺序

    下面我们将详细探讨Java中代码块的执行顺序,包括静态属性、非静态属性、静态代码块、非静态代码块以及构造函数。 首先,让我们回顾一下结论: 1. 当创建一个类的实例时,首先会执行类中的静态属性和静态代码块,...

    简单了解java中静态初始化块的执行顺序

    下面是一个简单的示例代码,用于演示Java中静态初始化块的执行顺序: ```java public class Test1 { static { System.out.println("执行静态初始化块test1..."); } { System.out.println("执行初始化块test1");...

    大数据必学Java基础(三十七):代码块讲解

    同时,我们还了解到了代码块的执行顺序,包括静态块、构造块和普通块。 Java 是一种面向对象的编程语言,它的基础知识点非常重要。在大数据处理中, Java 语言占据着重要的地位。通过本篇文章,我们可以了解到 ...

Global site tag (gtag.js) - Google Analytics