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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

静态代码块,构造代码块,构造函数的区别?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

4 个回复

倒序浏览
静态代码块
随着类的加载而执行,只执行一次,并优先于主函数,也优先于构造代码块。用于给类进行初始化。

构造函数
构造函数是在对象一建立就运行,给对象进行初始化。

构造代码块
构造代码块是在对象一建立就运行,而且优先于构造函数执行,用来定义不同对象共性的初始化内容。
构造代码块与构造函数区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
总结:“静态代码块”优先于“构造代码块”优先于“构造函数”。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
静态代码块随着类的加载而加载,与你所建立的对象的个数是无关的。运行的时候这个class类文件加载进内存中,给所属的StaticCode类进行初始化,而构造代码块随着对象的建立而加载,给对象进行初始化

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
//下面是我整理的关于构造函数和代码块的笔记,希望可以帮到你
Constructor(构造函数,也称构造方法,构造器)
构造函数是肯定会存在的
1.如果你自己没有写,系统会默认帮你加一个无参数的构造函数,这个构造函数不执行任何操作
2.如果你自己写过,就会自动替换掉默认的空参数构造函数,这时候执行什么操作由你决定
注:由于接口不允许被实例化,所以接口中没有构造方法。

构造函数的存在有什么作用
JVM在创建对象的时候会同时调用与这个对象相对应的构造函数来完成对此对象的初始化工作。
当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。
这就好像我们规定每辆“车”要出厂都必须安车轱辘,我们就可以在“车”的构造方法中加入安装“轮胎”的程序代码,
于是每辆“车”一出厂前就会自动完成“安轮胎”,程序就不必再在每个车要出厂时一个一个地告诉它们要“安轮胎”了。


构造函数如何使用:
1.构造函数必须与类同名(如果一个源文件中有多个类,那么构造函数必须与公共类同名)
2.每个类可以有一个以上的构造函数
3.构造函数分为两种:无参数构造方法和有参数构造方法
4.构造函数可以重载,以参数的个数,类型。但是,不区分参数的排列顺序。
   (当同一个类存在多个构造方法时,编译器会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应,
   完成构造函数的调用。)
   和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,
   编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。
   产生对象的格式是:new 类名(参数列表) ;
   重载构造方法可以完成不同初始化的操作, 如:Person p=new Person (zhangsan, 22); 语句,
   会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象开辟内存空间,
   并调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量p。
5.构造函数没有返回值,也不能定义为void
6.构造函数总是伴随着new 新对象操作一起调用
7.不能被static、final、synchronized、abstract和native修饰。
8.使用"super调用父类构造函数的语句"必须是子类构造函数的"第一条语句"。
9.构造函数不可以被子类重写,因为子类无法定义与基类具有相同型构的构造函数。

构造函数和代码块
代码块就是函数中的"{}"
普通代码块:就是一个普通方法中的"{}",只有在被调用时才会执行
静态代码块:仅使用关键字static声明{},将某一段代码声明为静态的,
          其作用是给类进行初始化(一般针对类的静态属性进行),相对构造函数少用。
           静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面。
静态代码块会在类被加载时自动执行,而无论加载者是JVM还是其他的类。
一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行。
静态代码块里面的变量都是局部变量,只在本块内有效。
静态代码块优先于main方法执行。
静态代码块只能访问类的静态成员,而不允许访问实例成员,
之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,
而静态代码块里的方法体在执行的时候还不一定存在对象。
构造代码块:直接在类中定义的"{}",简称三无人员,其作用是给对象进行初始化的,
而且是对所有对象的共性部分进行初始化,即每个对象创建时都会执行构造代码块。
构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
同一类中的不同构造代码块之间也按照在类中出现的先后顺序执行


执行顺序:静态代码块——构造代码块——构造函数

注:静态代码块与构造代码块的异同点
相同点:都是在JVM加载类时在构造方法之前执行,在类中都可以定义多个,
不同点:静态代码块只会在构造该类的第一个对象时执行,之后再构造该类对象则不再执行。
    构造代码块每new一个新对象就会执行一次。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
静态优先执行,父类优先于子类执行;  静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次静态优先执行,父类优先于子类执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马