Java读书笔记十二(Java中的代码块)

Java学习 专栏收录该内容
128 篇文章 1 订阅

 

 前言

 我们知道在java中通过构造器来为对象进行初始化操作,但是在java中与构造器类似的还有初始化块的操作,下面小编来为大家分享一下。

 初始化块使用

 在Java中初始化块是java中出现的第4中成员,前三种分别是成员变量、方法和构造器。一个类中可以有多个初始化块,并且相同类型的初始化块是按照顺序依次执行的。初始化块的修饰符只能是static,初始化块可以包含任何可执行语句,包括定义局部变量、调用其他对象方法,以及使用分支、循环语句等

 

/**     
 * @FileName: test.java   
 * @Package:com.number   
 * @Description: TODO  
 * @author: LUCKY    
 * @date:2015年11月29日 下午12:55:00   
 * @version V1.0     
 */
package com.number;

/**
 * @ClassName: test
 * @Description: TODO
 * @author: LUCKY
 * @date:2015年11月29日 下午12:55:00
 */
public class test {

	int cd;
	int d=9;
	 {
		// 下面定义一个初始化块
		int a = 6;
		System.out.println(a > 4 ? "局部变量a大于4" : "局部变量a小于4");
	}

	 int c=0;

    public  test(){
    	cd=10;
    	System.out.println("初始化构造器");
    }
	public static void main(String[] args) {
		test test = new test();
		System.out.println(Integer.compare(2, 3));
	}
}

 初始化块和构造器

 可以从某种程度上来看,初始化块是构造器的补充,初始化块总是在构造器之前执行,可以使用初始化器来进行对象的初始化操作。

 但是初始化块与构造器又有区别,它只是一段固定的执行的代码,不能接受任何的参数。因此初始化器的应用场景我们可以理解为,当两个或者多个构造器中有相同的初始化代码,并且这些初始化代码无须接受参数的时候,就可以把他们放在初始化块中定义。通过把多个构造器中相同的代码提取到初始化中定义,能更好的提高初始化代码的复用,提高整个应用的可维护性。

 静态初始化块

 如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块(普通初始化块负责对对象进行初始化操作,类初始化块负责对类进行初始化)。静态初始化块是与类相关的,系统将在类初始化块阶段进行静态初始化块,而不是在创建对象的时候才执行。因此静态初始化块总是比普通初始化块先执行。

 废话不多说了,来看一下下面的Demo,解解闷吧!一定要认真的跑一遍。

package com.test;
class Root
{
	static{
		System.out.println("Root的静态初始化块");
	}
	{
		System.out.println("Root的普通初始化块");
	}
	public Root()
	{
		System.out.println("Root的无参数的构造器");
	}
}
class Mid extends Root
{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid()
	{
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg)
	{
		// 通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid
{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	{
		System.out.println("Leaf的普通初始化块");
	}
	public Leaf()
	{
		// 通过super调用父类中有一个字符串参数的构造器
		super("疯狂Java讲义");
		System.out.println("执行Leaf的构造器");
	}
}
public class Test
{
	public static void main(String[] args)
	{
		new Leaf();

	}
}


  • 1
    点赞
  • 6
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值