您的位置:首页 > 职场人生

黑马程序员_java基础学习笔记之(构造函数&构造代码块&静态代码块)的区别

2013-12-10 12:54 399 查看
------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ---------- 

在基础学习中,我常常会概念模糊,特作此学习笔记,进行一下对比,思路自然就清晰了。

构造函数

构造函数定义:构造函数是与类名相同,但没有返回值的函数。

例子:

class Person {
    //构造函数
    public Person() {}
}

作用:给对象初始化的。

构造函数的使用方法

构造函数的作用是对对象进行初始化,当一个类中没有定义构造函数时,系统默认为该类提供默认构造函数(参数为空)。

在创建对象时,调用对应的构造函数。当用户自定义构造函数时,系统的就不提供默认构造函数。

创建一个对象时,只调用一次构造函数。

特点:1.函数名与类名相同

           2.不用定义返回值类型

           3.不可以写return语句

注意:1.默认的构造函数的特点(当一个类中没有定义构造函数时,系统默认该类提供的构造函数,参数为空)。

当自定义构造函数时,系统的就不提供默认构造函数。创建一个对象时,只调用一次构造函数。

            2.多个构造函数是以重载的形式存在的。

构造代码块

作用

1.      构造代码快的作用是对对象进行初始化。

2.      先于构造函数,即在调用构造函数之前执行构造代码快。

 构造代码块和构造函数的区别

(1)构造代码快是给所有的对象进行统一初始化。

(2)构造函数是给对应的一个对象进行初始化。

例:

class Person {
   
    //构造代码块
       {

              System.out.println(“personrun”);

}
      //构造函数
public Person()

{

       System.out.println(“Constructor”);

}

}
public class Test

{
public static voidmain(String[] args)

{

              person p1 = new person();

              person p2 = new person();

}

}

 //运行的结果:

person run

Constructor

person run

Constructor

   
 
静态代码块

静态代码块的格式:

//静态代码块格式

static{

//静态代码块中的语句

}

特点:随着类的加载而执行,只执行一次,并优先于主函数执行。

作用:给类进行初始化。

静态代码快和构造代码快的区别

1.static 代码块优先于构造代码块执行,构造代码块优先于构造函数执行。

 2.static 代码块是给类加载而执行的,而构造代码块是随着对象的创建而执行的

 3.static 代码块只执行一次,而构造代码块是创建几个对象就执行几次。

4.static 代码块中不能访问非static的成员变量,而构造代码块可以访问。

class staticDemo
{
    //构造代码块
    {
       System.out.println(“Constructor”);
    }
 
//静态代码块
Static {

System.out.println("StaticDemo");

}

}
public class StaticCode

{
//静态代码块
static {

              System.out.println(“StaticCode1”);

}
public static void main(String[] args)

{

       new StaticDemo();

       new StaticDemo();//虽然创建了两个StaticDemo,但只输出一次“StaticDemo”,因为静态代码块只能加再一次。

}
//静态代码块
static{

       System.out.println(“StaticCode2”);

}

}

运行结果:

StaticCode1

StaticCode2

StaticDemo

Constructor

Constructor

过程解析:1.StaticCode类进入内存:这时最先执行的是是StaticCode类中的静态代码块。因为它随着类的加载而执行,只执行一次,并优先于主函数执行。

所以输出为: StaticCode1
                                     StaticCode2

                  2.执行main函数,对创建的StaticDemo的对象加载,并同时执行该类的静态代码块。静态代码块只执行一次。

输出为:StaticDemo

               Constructor
             Constructor

注意:当静态代码块所在类的的对象为空时,不执行该类的任何操作,所有执行static代码快是没有任何意义的。

            静态代码块优先于构造代码块执行。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐