黑马程序员技术交流社区
标题:
关于静态代码块、构造代码块和构造函数的疑惑
[打印本页]
作者:
阿旺
时间:
2014-4-24 10:30
标题:
关于静态代码块、构造代码块和构造函数的疑惑
本帖最后由 阿旺 于 2014-4-24 11:15 编辑
我是零基础自学的,有个疑惑要请教大家:静态代码块、构造代码块和构造函数的区别与各自的用途是?有没有哪位朋友总结过, 分享下,非常感谢,百度过了,还是很模糊。
作者:
☆枫の云
时间:
2014-4-24 10:35
本帖最后由 ☆枫の云 于 2014-4-24 10:36 编辑
构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
特点:
1:该函数的名称和所在类的名称相同。
2:不需要定义返回值类型。
3:该函数没有具体的返回值。
记住:所有对象创建时,都需要初始化才可以使用。
注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。
一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。
构造函数和一般函数有什么区别呢?
1:两个函数定义格式不同。
2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。
一般函数,是对象创建后,需要调用才执行,可以被调用多次。
什么时候使用构造函数呢?
分析事物时,发现具体事物一出现,就具备了一些特征,那就将这些特征定义到构造函数内。
构造代码块和构造函数有什么区别?
构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。
构造函数:是给与之对应的对象进行初始化。它具有针对性。
静态代码块:就是一个有静态关键字标示的一个代码块区域。定义在类中。
作用:可以完成类的初始化。静态代码块随着类的加载而执行,而且只执行一次(new 多个对象就只执行一次)。如果和主函数在同一类中,优先于主函数执行。
静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 -->构造代码块 --> 构造函数;
作者:
igi9009
时间:
2014-4-24 10:49
构造代码块 :给对象进行初始化,对象一建立就运行而且优于构造函数执行。
构造代码块和构造函数的区别 :构造代码块是给所有对象进行统一初始化,而构造函数是给指定的对象进行初始化。
静态代码块 :随着类的加载而执行,只执行一次。
分析下面程序执行的结果:
class Test7 {
static {
System.out.println("aaaaaaaaaaaaaaaaaaa");
}
{
System.out.println("bbbbbbbbbbbbbbbbbbb");
}
Test7(){
System.out.println("构造函数运行");
}
void print() {
System.out.println("ccccccccccccccccccc");
}
static {
System.out.println("eeeeeeeeeeeeeeeeeee");
}
}
复制代码
public class Test9 {
static {
System.out.println("dddddddddddddddddddd");
}
public static void main(String[] args) {
Test7 d = new Test7();
d.print();
new Test7();
}
static {
System.out.println("fffffffffffffffffff");
}
}
复制代码
程序运行的结果为:
dddddddddddddddddddd
fffffffffffffffffff
aaaaaaaaaaaaaaaaaaa
eeeeeeeeeeeeeeeeeee
bbbbbbbbbbbbbbbbbbb
构造函数运行
ccccccccccccccccccc //因为静态代码块随着类的加载而执行且只执行一次
bbbbbbbbbbbbbbbbbbb //这里重新new一个对象时,静态代码块不会执行,而构造代码块和构造函数执行
构造函数运行
结论:优先级顺序为
静态代码块>构造代码块>构造函数
作者:
阿旺
时间:
2014-4-24 11:15
非常感谢分享
作者:
秦久启
时间:
2014-4-24 12:16
构造代码块。
作用:给所有对象进行初始化。
对象一建立就运行,而且
优先于
构造函数执行。
和构造函数的区别:
构造代码块是给
所有对象
进行统一初始化,
而构造函数是给
对应的对象
初始化。
构造代码快中定义的是
不同对象共性的初始化内容
。
静态代码块:
格式: static {静态代码块执行的语句}
特点:随着类的加载而执行,只执行一次,并优先于主函数执行,是对类初始化的。
class StaticCode
{
int num = 9;
StaticCode()
{
System.out.println("b");
}
static
{
System.out.println("a");
}
{
System.out.println("c");
}
StaticCode(int x)
{
System.out.println("d");
}
public static void show()
{
System.out.println("show run");
}
}
class StaticCodeDemo
{
static
{
System.out.println("b");
}
public static void main(String[] args)
{
new StaticCode(4);
}
}
复制代码
这段代码运行结果:
b
a
c
d
作者:
hsx500
时间:
2015-5-6 09:22
一、普通代码块
直接在一个方法中出现的{}就称为普通代码块,例子程序如下:
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("这是构造方法!");
}
}
静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
作者:
知识改变人生
时间:
2015-5-8 21:32
都被你们说了
作者:
醉演星松
时间:
2015-7-13 00:25
静态代码块是给类进行初始化?
作者:
FirstBlood
时间:
2015-7-20 21:51
对类初始化是怎么初始化?
作者:
dg216888
时间:
2015-12-2 23:03
igi9009 发表于 2014-4-24 10:49
构造代码块 :给对象进行初始化,对象一建立就运行而且优于构造函数执行。
构造代码块和构造函数的区别 : ...
很清晰,帮了大忙了,3q
作者:
okmin
时间:
2016-4-23 23:17
6666666666666666666666666666666666666666
作者:
kevin00012
时间:
2016-9-18 19:55
加载类时,静态代码块先于主方法,
创建对象时,构造代码块先于构造方法。
作者:
yellowredroc
时间:
2016-11-6 18:14
感谢各位大神的解答
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2