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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wyy666 中级黑马   /  2014-5-25 23:06  /  3514 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wyy666 于 2014-5-26 10:29 编辑

构造代码块和构造函数有什么区别?

14 个回复

倒序浏览
构造代码块对象已建立就运行,其对所有对象初始化,且优先于构造函数。构造函数是给对应的对象初始化。
回复 使用道具 举报 1 0
本帖最后由 寻找人生目标 于 2014-5-25 23:35 编辑

作用不同  格式不同  执行的顺序也不同

作用:  构造函数是给特定的对象进行初始化的
         构造代码块是对所有对象初始化
格式: 构造函数是:  
                      类名{
                      }
        构造代码块:  {
                          
                          }
执行顺序是:   静态代码块------构造代码块--------->构造函数
  1. class Test {
  2.         
  3.                 static {
  4.                         System.out.println("静态代码块执行");
  5.                 }
  6.                 Test (){
  7.                         System.out.println("构造函数执行");
  8.                 }
  9.                 {
  10.                         System.out.println("构造代码块执行");
  11.                 }
  12.                 static {
  13.                         System.out.println("静态代码块2执行");
  14.                 }
  15.         
  16. }
  17. class Demo {
  18.                 public static void main(String[] args){
  19.                         Test t = new Test();
  20.                         System.out.println("--------------------------------");
  21.                         Test t2 = new Test();
  22.                         System.out.println("--------------------------------");
  23.                         Test t3 = new Test();
  24.                 }
  25.                
  26. }
  27. /*
复制代码

静态代码块随类的加载而运行  且只有一次  跟对象无关

输出结果是:

静态代码块执行静态代码块2执行
构造代码块执行
构造函数执行
------------------------------
构造代码块执行
构造函数执行
------------------------------
构造代码块执行
构造函数执行


评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报 3 0
构造函数
回复 使用道具 举报
//构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

public class CodeBlock02{
    {
      System.out.println("第一代码块");   
    }
   
    public CodeBlock02(){
        System.out.println("构造方法");
        }
        
        {
          System.out.println("第二构造块");
        }
      public static void main(String[] args){
          new CodeBlock02();
          new CodeBlock02();
          new CodeBlock02();
           
    }
}   

/*
*
执行结果:
第一代码块
第二构造块
构造方法
第一代码块
第二构造块
构造方法
第一代码块
第二构造块
构造方法
*/
回复 使用道具 举报
总之,构造代码块,只会在创建这个类的实例对象的时候调用一次,不管是创建有参数的,还是无参数的,都会调用这个,代码块,而且,优先于任何一个构造方法执行,但是会晚于静态代码块 ,因为静态代码块是类变量,是随着累的字节码加载进来的,这个没法比
回复 使用道具 举报
/*
* 构造代码块
* 作用:给对象进行初始化
* 对象一建立就运行,而且优先于构造函数执行
*
* 和构造函数的区别:
* 构造代码块是给所有对象进行统一初始化,而构造函数只给对应的对象初始化。
*
* 构造代码块中定义的是不同对象共性的初始化内容。
*/

class PersonTwo
{
        private String name;
        private int age;
       
        //它们的先后执行顺序如下
        //1.构造代码块  
        {
                System.out.print("构造代码块");
        }
       //2.始初化函数
       PersonOne()           
        {
                System.out.println("姓名="+name+",年龄="+age);
        }

}
public class  Rext {
       
        public static void main(String[] args)
        {
                PersonTwo two = new PersonTwo();//创建对象
               
        }

}




回复 使用道具 举报
简单的说,单纯的构造代码块是只要new对象,就会运行一次。属于对象的共性内容!
而构造函数,是每一个具体事例对象的特性内容(有多个构造函数时,没个对象初始化可以调用不同的构造函数)
只是构造代码块优先于构造函数而已
回复 使用道具 举报
wyy666 中级黑马 2014-5-26 10:24:09
9#
寻找人生目标 发表于 2014-5-25 23:14
作用不同  格式不同  执行的顺序也不同

作用:  构造函数是给特定的对象进行初始化的

真心不错,让人看一遍就理解,谢谢。
回复 使用道具 举报
2楼 正解!!!
回复 使用道具 举报
wyy666 发表于 2014-5-26 10:24
真心不错,让人看一遍就理解,谢谢。

嗯嗯 客气   加油
回复 使用道具 举报
GYSWL 中级黑马 2014-8-21 19:21:32
12#
寻找人生目标 发表于 2014-5-25 23:14
作用不同  格式不同  执行的顺序也不同

作用:  构造函数是给特定的对象进行初始化的

太棒了,清晰明了,
回复 使用道具 举报
学习了...
回复 使用道具 举报
构造代码块 (初始化块)                 * 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
回复 使用道具 举报
构造代码块 (初始化块)                 * 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马