`
suko
  • 浏览: 73014 次
  • 性别: 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...

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

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

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

    本文介绍了Android代码块执行顺序分析总结,分享给大家,具体如下: 子类、父类变量,代码块,以及构造方法的加载顺序,是我们在程序开发中时不时遇到的一个问题,也是比较容易混淆的。 基础准备: 变量: 成员变量...

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

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

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

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

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

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

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

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

    java静态代码块与非静态代码块.doc

    这个非静态代码块是在创建对象时自动执行的,它的执行顺序是在构造方法中的某个点。 静态代码块与非静态代码块的区别 静态代码块和非静态代码块的主要区别是它们的执行时机。静态代码块是在类加载时自动执行的,而...

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

    主要介绍了举例说明Java中代码块的执行顺序,包括静态属性和非静态属性以及构造函数等相关的执行先后,需要的朋友可以参考下

    Java面向对象(高级)- 类的成员之四:代码块

    非静态代码块在构造器之前执行,如果类中有多个非静态代码块,也会按源码顺序依次执行。 例如,以下代码展示了不同类型的代码块: ```java class Person { String name; int age; // 静态代码块 static { ...

    Test2.java

    隐式三步,静态构造代码块,main方法之间的执行顺序总结 静态构造代码块 &gt; main方法 &gt; 构造代码块 &gt; 构造方法体 对于没有构造方法的类,系统默认赠送无参构造方法 隐式三步; 1,super( ); 2,给非静态成员变量赋值 ...

    《java基础入门》第三版 第三~第四章作业.doc

    * 在 Java 中,静态代码块的执行顺序优先于构造代码块和构造方法。 六、Object 类 * 在 Java 中,Object 类是所有类的父亲,用户自定义类默认扩展自 Object 类。 * Object 类提供了一些基本方法,如 equals、...

    Java类初始化顺序

    所有构造方法执行顺序如下: 执行父类的构造方法。没有继承默认继承的Object。Object会开辟一块内存,初始化所有数据为0、null、false等默认值 执行本类中的成员代码块。所有代码块是从上往下顺序执行的,所以代码...

    Java 八股文背诵版(113 道)

    7. Java 代码块执行顺序: - 父类静态代码块(只执行一次) - 子类静态代码块(只执行一次) - 父类构造代码块 - 父类构造函数 - 子类构造代码块 - 子类构造函数 - 普通代码块 8. 面向对象的三大特性: - ...

    java二开面试笔试题

    1. 构造函数执行顺序:Java 中的构造函数执行顺序是先执行父类的构造函数,然后执行子类的构造函数。 2. 静态变量初始化:Java 中的静态变量初始化是在类加载时执行的,而不是在实例化对象时执行的。 六、其他知识...

    C#高级编程练习题目(内附答案)

    1. 异常处理:本题目考察了try-catch-finally语句块的使用,了解代码的执行顺序和异常处理机制。 知识点:try-catch-finally语句块、异常处理机制 2. 继承关系:本题目考察了继承关系的使用,了解父类和子类的关系...

    杰普学习corejava总结笔记

    2.构造器执行顺序 1.类加载,同时初始化类中静态的属性(赋默认值) 2.执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示...

    中间代码基本块划分.pdf

    基本块是中间代码序列中的一组顺序执行的语句序列,只有一个入口和一个出口。基本块的划分是指将中间代码序列分割成多个基本块,每个基本块都有明确的入口和出口。 基本块的划分方法包括: 1. 定义入口语句:入口...

Global site tag (gtag.js) - Google Analytics