JAVA中的代码块

代码块介绍:

  1. 代码块的作用:用来初始化类、对象

  2. 代码块如果有修饰的话,只能使用static

  3. 分类:静态代码块VS非静态代码块

  4. 静态代码块

    • 内部可以有输出语句
    • 随着类的加载而执行(类只加载一次,静态代码块只执行一次)
    • 作用:初始化类的信息
    • 如果一个类中有多个静态代码块,则按照上下顺序执行
    • 静态代码块只能调用静态的结构,不能调用非静态的结构
  5. 非静态代码块

    • 内部可以有输出语句
    • 随着对象的创建而执行(每造一个对象就执行一次)
    • 作用:可以在创建对象时,对对象的属性等进行初始化
    • 如果一个类中定义了多个非静态代码块,则按照上下顺序执行
    • 非静态代码块可以调用静态的结构也能调用非静态的结构

对属性可以赋值的位置:从上到下为先后顺序

  • 默认初始化

  • 显示初始化/代码块中对属性进行初始化

  • 构造器中初始化

  • 对象.属性/对象.方法 对属性进行初始化

在这里插入图片描述

关于子父类,代码块和构造器的执行顺序:

package com.myobjectoriented3.nonworking;

class Root{
	static {
		System.out.println("1  Root的静态初始化块");
	}
	{
		System.out.println("4  Root的动态代码块");
	}
	
	public Root() {
		super();
		System.out.println("5  Root的无参构造器");
	}
	
}

class Mid extends Root{
	static {
		System.out.println("2  Mid的静态初始化块");
	}
	public Mid(String msg) {
		this();
		System.out.println("8  Mid的带形参构造器,形参:"+msg);
	}
	{
		System.out.println("6  Mid的动态代码块");
	}
	
	public Mid() {
		super();
		System.out.println("7  Mid的无参构造器");
	}
	
}

class Leaf extends Mid{
	static {
		System.out.println("3  Leaf的静态初始化代码块");
	}
	public Leaf() {
		super("hello,block");
		System.out.println("10  Leaf的构造器");
	}
	
	{
		System.out.println("9  Leaf的动态代码块");
	}
	
}





public class BlockTest {
	public static void main(String[] args) {
		new Leaf();
	}
	

}


由父及子,静态先行

当程序运行时:

  1. 先加载静态结构,静态加载完毕以后,在执行按顺序执行main方法里面的内容,碰到造对象了,再加载动态的结构和构造器;

  2. 加载的顺序是这样的:先加载最上层的父类的代码块和构造器,然后再加载次父类的代码块和构造器;父类全部加载完毕以后再加载子类的代码块和构造器;

package com.myobjectoriented3.nonworking;





class Father{
	
	static {
		System.out.println("1111111111111");
	}
	{
		System.out.println("222222222");
	}
	public Father() {
		System.out.println("8888888888888");
	}
	
}

public class SonTest extends Father{
	static {
		System.out.println("77777777");
	}
	{
		System.out.println("666666666666666");
	}
	
	public SonTest(){
		System.out.println("55555");
	}
	
	public static void main(String[] args) {
		System.out.println("999999999999");
		System.out.println("****====****");
		new SonTest();
		
	}
	
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值