A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 阿旺 于 2014-4-24 11:15 编辑

    我是零基础自学的,有个疑惑要请教大家:静态代码块、构造代码块和构造函数的区别与各自的用途是?有没有哪位朋友总结过, 分享下,非常感谢,百度过了,还是很模糊。

12 个回复

倒序浏览
本帖最后由 ☆枫の云 于 2014-4-24 10:36 编辑

构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
特点:
1:该函数的名称和所在类的名称相同。
2:不需要定义返回值类型。
3:该函数没有具体的返回值。
记住:所有对象创建时,都需要初始化才可以使用。

注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。

一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。

构造函数和一般函数有什么区别呢?
1:两个函数定义格式不同。
2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。
    一般函数,是对象创建后,需要调用才执行,可以被调用多次。
   
什么时候使用构造函数呢?
分析事物时,发现具体事物一出现,就具备了一些特征,那就将这些特征定义到构造函数内。

构造代码块和构造函数有什么区别?
构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。
构造函数:是给与之对应的对象进行初始化。它具有针对性。


静态代码块:就是一个有静态关键字标示的一个代码块区域。定义在类中。
作用:可以完成类的初始化。静态代码块随着类的加载而执行,而且只执行一次(new 多个对象就只执行一次)。如果和主函数在同一类中,优先于主函数执行。

静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 -->构造代码块 --> 构造函数;
回复 使用道具 举报 4 0
构造代码块 :给对象进行初始化,对象一建立就运行而且优于构造函数执行。
构造代码块和构造函数的区别 :构造代码块是给所有对象进行统一初始化,而构造函数是给指定的对象进行初始化。
静态代码块 :随着类的加载而执行,只执行一次。
分析下面程序执行的结果:
  1. class Test7 {
  2.      static {
  3.         System.out.println("aaaaaaaaaaaaaaaaaaa");
  4.      }
  5.      {
  6.          System.out.println("bbbbbbbbbbbbbbbbbbb");
  7.      }
  8.      Test7(){
  9.          System.out.println("构造函数运行");
  10.     }

  11.      void print() {
  12.         System.out.println("ccccccccccccccccccc");
  13.      }
  14.      static {
  15.          System.out.println("eeeeeeeeeeeeeeeeeee");
  16.     }
  17. }
复制代码
  1. public class Test9 {
  2. static {
  3.         System.out.println("dddddddddddddddddddd");
  4.      }
  5.     public static void main(String[] args) {
  6.        Test7 d = new Test7();
  7.          d.print();
  8.         new Test7();
  9.      }
  10.     static {
  11.        System.out.println("fffffffffffffffffff");
  12.     }
  13. }
复制代码


程序运行的结果为:

dddddddddddddddddddd
fffffffffffffffffff
aaaaaaaaaaaaaaaaaaa
eeeeeeeeeeeeeeeeeee
bbbbbbbbbbbbbbbbbbb
构造函数运行
ccccccccccccccccccc                //因为静态代码块随着类的加载而执行且只执行一次
bbbbbbbbbbbbbbbbbbb //这里重新new一个对象时,静态代码块不会执行,而构造代码块和构造函数执行
构造函数运行

结论:优先级顺序为

静态代码块>构造代码块>构造函数

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报 1 0
非常感谢分享
回复 使用道具 举报
构造代码块。
     作用:给所有对象进行初始化。
     对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
     构造代码块是给所有对象进行统一初始化,
     而构造函数是给对应的对象初始化。
        构造代码快中定义的是不同对象共性的初始化内容

静态代码块:
    格式:  static {静态代码块执行的语句}

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

  1. class StaticCode
  2. {
  3. int num = 9;
  4. StaticCode()
  5. {
  6. System.out.println("b");
  7. }

  8. static
  9. {
  10. System.out.println("a");
  11. }
  12. {
  13. System.out.println("c");
  14. }

  15. StaticCode(int x)
  16. {
  17. System.out.println("d");
  18. }
  19. public static void show()
  20. {
  21. System.out.println("show run");
  22. }
  23. }

  24. class StaticCodeDemo
  25. {
  26. static
  27. {
  28. System.out.println("b");
  29. }
  30. public static void main(String[] args)
  31. {
  32. new StaticCode(4);
  33. }
  34. }
复制代码
这段代码运行结果:

b
a
c
d







评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报 1 0
一、普通代码块

  直接在一个方法中出现的{}就称为普通代码块,例子程序如下:

  public class CodeDemo01{

  public static void main(String[] args){

  //普通代码块

  {

  int x = 10;

  System.out.println("x=" + x);

  }

  int x = 100;

  System.out.println("x=" + x);

  }

  }

  二、构造代码块

  直接在类中定义的没有加static关键字的代码块{}称为构造代码块,例子程序如下:

  public class CodeDemo02{

  public CodeDemo02(){

  System.out.println("========这是构造方法=========");

  }

  //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行

  {

  System.out.println("=========这是构造块!=========");

  }

  public static void main(String[] args){

  new CodeDemo02();

  new CodeDemo02();

  }

  }

  三、静态代码块

  使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化,例子程序如下:

  public class CodeDemo03

  {

  static{

  System.out.println("这是主类中的静态代码块!");

  }

  public static void main(String[] args){

  new Demo();

  new Demo();

  new Demo();

  }

  }

  class Demo

  {

  static{

  System.out.println("这是Demo类中的静态代码块!");

  }

  {

  System.out.println("这是Demo类中的构造块!");

  }

  public Demo(){

  System.out.println("这是构造方法!");

  }

  }

  静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
回复 使用道具 举报
都被你们说了
回复 使用道具 举报
静态代码块是给类进行初始化?
回复 使用道具 举报
对类初始化是怎么初始化?
回复 使用道具 举报
igi9009 发表于 2014-4-24 10:49
构造代码块 :给对象进行初始化,对象一建立就运行而且优于构造函数执行。
构造代码块和构造函数的区别 : ...

很清晰,帮了大忙了,3q
回复 使用道具 举报
okmin 中级黑马 2016-4-23 23:17:37
11#
6666666666666666666666666666666666666666
回复 使用道具 举报
加载类时,静态代码块先于主方法,
创建对象时,构造代码块先于构造方法。
回复 使用道具 举报
感谢各位大神的解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马