黑马程序员技术交流社区
标题:
构造代码块、构造函数
[打印本页]
作者:
杨华威
时间:
2012-3-16 21:59
标题:
构造代码块、构造函数
构造函数和构造代码块分别是什么作用?他们有什么区别呢?执行顺序是啥?
作者:
马胜平
时间:
2012-3-16 22:06
构造代码块和构造函数都是个用来初始化用的,构造代码块有非静态的和静态,静态的构造代码块在
类初始化时候就开始初始化分配内存空间,非静态的构造代码块和构造函数是对实例变量进行初始化,并且非静态代码块总是在构造函数调用之前先执行。
作者:
叶绍亮
时间:
2012-3-16 22:07
构造函数的作用:可以用于给对象进行初始化。
构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。
当在类中自定义了构造函数后,默认的构造函数就没有了。
构造代码块。
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象初始化。
构造代码快中定义的是不同对象共性的初始化内容。
作者:
秦超
时间:
2012-3-16 22:11
构造函数是给指定对象初始化用的,谁创建了这个类的对象,构造函数初始化的就是谁
构造代码快是给所有对象初始化用的,无论是谁创建了这个类的对象,他们都被构造代码快初始化了
执行顺序是: 先执行构造代码快,再执行构造函数
作者:
丁佼
时间:
2012-3-16 23:05
构造代码块:即类中一段由大括号包含,但没有包含在函数内,且没有任何名称标识的语句块。
(1)作用:给对象进行初始化。 每次建立对象就会运行,而且优先与构造函数运行。
(2)与构造函数区别:构造代码块给所有对象进行统一属性的初始化;而构造函数是按照new语句传递的参数,对对象特有的数据进行初始化。
(3)使用时机:定义不同对象间共性的初始化内容。
作者:
黑马肖凯骏
时间:
2012-3-17 00:33
总共有三种吧
构造代码块 构造函数 静态构造代码块 三者的初始化顺序是 静态构造代码块-----构造代码块-----构造函数
类初始化时候就开始初始化分配内存空间,静态构造代码块,一直存在于内存中
构造代码块和构造函数是对实例变量进行初始化
作者:
戴振良
时间:
2012-3-17 01:06
不知道你有没有看黑马网站提供的视频,不过我觉得你的学习方法不对,或者是提问方法不对,我觉得你有疑问首先要自己敲代码试验,然后找出哪里不明白,当然别人指出的时候,因为是自己敲的代码所以也更容易明白。
你的这个问题我曾经在黑马问过,这里给你Copy过来,希望对你有帮助。
实例一、class aaa
{
public aaa()
{
System.out.println("构造方法");
}
static
{
System.out.println("静态代码块");
}
}
class bbb
{
public static void main(String args[])
{
new aaa();
}
}
//输出结果为: 静态代码块
构造方法
下面的代码执行结果是我不明白的
______________________________________________________________________________________________________________
实例二、class ccc
{
static ccc obj=new ccc();
static
{
System.out.println("静态代码块");
}
/*************************/
private ccc()
{
System.out.println("构造函数");
}
}
class ddd
{
public static void main(String args[])
{
ccc obj2=ccc.obj;
}
}
//输出结果为: 构造函数
静态代码块
这里先执行了构造函数,这是怎么个原理呢?而当我把语句:“ static ccc obj=new ccc(); ”放到/*****************/的地方,结果就是先输入静态代码块,这又是为什么呢?
如果我把代码改成这样:
实例三、class ccc
{
static ccc obj=new ccc();
static
{
System.out.println("静态代码块");
}
/*************************/
public ccc() //有修改的地方
{
System.out.println("构造函数");
}
}
class ddd
{
public static void main(String args[])
{
new ccc(); //有修改的地方
}
}
//输出结果为: 构造函数
静态代码块
构造函数
2012年1月31日
经过大家的帮助回答,我思考分析后似乎已经明白了,这里补上来,希望对大家也有点收益,我也不知道事实是不是这样,也希望大家指点批评
实例二中的代码:
static ccc obj=new ccc(); //语句1
static //语句2
{
System.out.println("静态代码块");
}
在这两个静态语句:
1、语句1和语句2在类加载的时候都加载到了内存
2、因为都是静态,所以按顺序执行
3、静态代码只能执行一次,而又得按顺序,所以new ccc()的时候,就不会再重复执行语句1和语句2,所以只剩下构造函数可以执行了,接着把整个静态语句1执行完
4、执行静态代码2
作者:
a504079589
时间:
2012-3-17 02:06
构造函数的命名必须和类名完全相同, 构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰;
构造代码块同样是用来初始化的, 但静态构造代码块是在类加载的时候就在内存分配空间, 而静态的代码块是给变量进行初始化的, 在构造函数之前执行;
作者:
张润政
时间:
2012-3-17 09:56
构造函数和构造代码块都是在给对象初始化用的。他们的区别是加载顺序不同,当一个类加载进内存,jvm会先从构造代码块执行,然后是构造函数,如果你的类中出现了静态代码块,jvm就会先去加载这个静态的代码块,因为它是给类初始化的。这个顺序应该很清楚了吧。
还有一点就是,我们通常会遇到子父类继承的问题。jvm会先加载父类,再加载子类。他们的执行顺序也是有一定规则的。
如果你写的类中出现了字符类继承关系,并且有代码块的组成,那么执行的顺序应该是 1父类静态代码块 2子类静态代码块 3父类构造代码块 ,4父类方法 5子类构造代码块 6子类方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2