黑马程序员技术交流社区
标题:
类的问题
[打印本页]
作者:
xiewen
时间:
2013-4-23 22:23
标题:
类的问题
本帖最后由 xiewen 于 2013-5-1 10:40 编辑
类在什么时候初始化?
作者:
wangyougu010
时间:
2013-4-23 22:29
静态成员,静态代码块,在类加载的时候就加载了
作者:
breeze
时间:
2013-4-23 22:47
类本身不会被初始化, 可以初始化一个类的对象, 比如String就是一个对象, String s = "abc", 这种方式就是初始化了一个String类型的对象, 其引用是s, 具体初始化类型的对象要参照该类的构造方法, 建议你看一下类的构造方法
作者:
杨武林
时间:
2013-4-24 21:14
在类被加载的时候初始化
作者:
曾德强
时间:
2013-4-25 23:42
我知道在类被实例化时即调用构造函数其非静态成员会被初始化。
作者:
曹睿翔
时间:
2013-4-26 01:18
这个问题会在主推二中收录,敬请期待
作者:
曹睿翔
时间:
2013-4-26 01:18
这个问题会在主推二中收录,敬请期待
作者:
xiewen
时间:
2013-4-26 01:28
曹睿翔 发表于 2013-4-26 01:18
这个问题会在主推二中收录,敬请期待
好,谢谢!
作者:
王溢君
时间:
2013-4-27 00:42
类会被静态代码块初始化。加载进内存的时候。
作者:
黑马-张超
时间:
2013-4-27 00:50
public class Office{
public static void main(Stringp[] args)
{
Office office = new Office();
System.out.println("Start to load class"); //开始加载类
Class c = Class.forName(args[0], false, office.getClass().getClassLoader());// 从输入参数中获得要初始化的类
System.out.println("Start to instantiate class"); //开始初始化类
Object word = c.newInstance();
word.start();
}
}
//Word.java
public class Word{
static{
System.out.println("Word initialize in static block");
}
public void print(){
System.out.println("Word is used");
}
}
<DIV style="TEXT-ALIGN: left; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(204,206,208); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/25px Arial, Helvetica, simsun, u5b8bu4f53; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(51,51,51); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">输出结果应该是:
<SPAN style="LINE-HEIGHT: 25px; FONT-FAMILY: monospace; WHITE-SPACE: pre">Start to load class</SPAN></DIV>
<DIV style="TEXT-ALIGN: left; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(204,206,208); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/25px Arial, Helvetica, simsun, u5b8bu4f53; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(51,51,51); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 25px; FONT-FAMILY: monospace; WHITE-SPACE: pre"><FONT style="LINE-HEIGHT: 23px" size=3>Start to instantiate class</FONT></SPAN></DIV>
<DIV style="TEXT-ALIGN: left; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(204,206,208); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/25px Arial, Helvetica, simsun, u5b8bu4f53; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(51,51,51); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><SPAN style="LINE-HEIGHT: 25px; FONT-FAMILY: monospace; WHITE-SPACE: pre">Word initialize in static block<SPAN style="TEXT-ALIGN: left; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(204,206,208); TEXT-INDENT: 0px; LETTER-SPACING: normal; DISPLAY: inline !important; FONT: 14px/25px monospace; WHITE-SPACE: pre; ORPHANS: 2; FLOAT: none; COLOR: rgb(51,51,51); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">Word is used
从中可以看出,类加载的时候并没有调用Word类的静态初始化块,而是在实例化的时候调用初始化块的。 所以最后关于类静态初始化块被调用时间的更准备的表述应该为: 类的静态初始化块是在类实例化和加载的时候被调用和初始化的.</SPAN>
</SPAN></DIV>
复制代码
作者:
海不扬波
时间:
2013-4-27 17:44
把同一类对象的所有共同的属性和行为放在一起描述,这种声明对象共有的属性和行为的机制称为类。
类本身不会初始化,只有实例化的时候,才初始化。
作者:
liuelxiwd
时间:
2013-4-28 09:19
我看大家已经有正确回答了,为什么这个问题还是被标注为“未解决”呢?.....哦,好吧,赘述一下,初始化本身是指给对象,不是类,当new一个对象的时候,就会在内存中开辟一片空间,对其进行初始化,可以有两种方式,一种是构造函数(即使不写,它也存在,系统默认给一个无参构造函数);另外就是在就是静态代码块,它是放在执行函数最前面部分,形式:{静态代码块内容},最先无条件执行,在里面可以定义初始化及其他需要执行的内容。
作者:
曹睿翔
时间:
2013-5-1 07:44
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者:
江大海
时间:
2013-5-1 17:23
类在你输入javac命令之后加载进内存
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2