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

------- <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代码快是没有任何意义的。

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

 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值