zoukankan      html  css  js  c++  java
  • [javase学习笔记]-8.8 构造代码块

    这一节我们再看一个特殊的代码块。那就是构造代码块。


    这里我们简单的通过样例来说明一下:

    class Person
    {
    	private String name;
    	{
    		System.out.println("Person类的第一个代码块被运行");
    	}
    
    	Person()
    	{
    		System.out.println("无參数构造函数被运行");
    		this.name = "小宝宝";
    	}
    	Person(String name)
    	{
    		System.out.println("有name參数构造函数被运行");
    		this.name = name;
    	}
    	public void speak()
    	{
    		System.out.println("名字:"+name);
    	}
    }
    
    class ConBlockTest
    {
    	public static void main(String[] args) 
    	{
    		Person p1 = new Person();
    		p1.speak();
    		Person p2 = new Person("小科比");
    		p2.speak();
    	}
    }
    我们在这个样例中看到了Person类中有一个代码块,它没有被statickeyword修饰,这就是我们这一节所说的构造代码块,为什么这么说呢,我们看运行结果:


    我们非常显然就看到了在我们创建两个对象时,该代码块都被运行了。而构造函数仅仅是当创建相应对象时被调用。

    所以构造代码块的作用就是:给全部对象进行同样部分的初始化。

    而我们的构造方法是对相应的对象进行有针对性的独特的初始化。


    那么构造代码块的构造函数哪个先运行呢?我们看代码:

    class Person
    {
    	private String name;
    
    	{//第一个构造代码块
    		System.out.println("Person类的第1个代码块被运行");
    	}
    
    	Person()
    	{
    		System.out.println("无參数构造函数被运行");
    		this.name = "小宝宝";
    	}
    	Person(String name)
    	{
    		System.out.println("有name參数构造函数被运行");
    		this.name = name;
    	}
    	public void speak()
    	{
    		System.out.println("名字:"+name);
    	}
    
    	{//第二个构造代码块
    		System.out.println("Person类的第2个代码块被运行");
    	}
    }
    我们看结果:

    我们看到两个不同位置的构造代码块都在构造函数被运行之前就已经运行了。所以说构造代码块优先于构造函数运行。


    所以,当我们须要把全部对象都有同样的初始化时,我们能够使用构造代码块来实现。比方上面的样例中,人一出生都会哭,那么我们就能够用构造代码块来初始哭这个功能:

    class Person
    {
    	private String name;
    
    	{
    		cry();
    	}
    
    	Person()
    	{
    		this.name = "小宝宝";
    	}
    	Person(String name)
    	{
    		this.name = name;
    	}
    	public void cry()
    	{
    		System.out.println("哇哇");
    	}
    	public void speak()
    	{
    		System.out.println("名字:"+name);
    	}
    }
    这样我们就把全部对象哭的功能封装到了一个构造代码块中。在创新对象是会优先运行,非常好的实现了我们想要的功能。


  • 相关阅读:
    Python全栈开发之路 【第十八篇】:Ajax技术
    Python全栈开发之路 【第十七篇】:jQuery的位置属性、事件及案例
    Python全栈开发之路 【第十六篇】:jQuey的动画效果、属性操作、文档操作、input的value
    Burp Suite安装&环境配置&启动&浏览器设置代理
    git个人使用总结
    Windows下创建.gitgnore文件
    git个人使用总结(界面版)
    测试左移之代码评审
    Java自动内存管理机制
    【海盗派测试分析MFQ&PPDCS】读书笔记
  • 原文地址:https://www.cnblogs.com/llguanli/p/8428328.html
Copyright © 2011-2022 走看看