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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiewen 中级黑马   /  2013-4-23 22:23  /  2047 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xiewen 于 2013-5-1 10:40 编辑

类在什么时候初始化?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

13 个回复

倒序浏览
静态成员,静态代码块,在类加载的时候就加载了
回复 使用道具 举报
类本身不会被初始化, 可以初始化一个类的对象, 比如String就是一个对象, String s = "abc", 这种方式就是初始化了一个String类型的对象, 其引用是s, 具体初始化类型的对象要参照该类的构造方法, 建议你看一下类的构造方法

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
在类被加载的时候初始化
回复 使用道具 举报
我知道在类被实例化时即调用构造函数其非静态成员会被初始化。
回复 使用道具 举报
曹睿翔 来自手机 金牌黑马 2013-4-26 01:18:21
地板
这个问题会在主推二中收录,敬请期待
回复 使用道具 举报
曹睿翔 来自手机 金牌黑马 2013-4-26 01:18:51
7#
这个问题会在主推二中收录,敬请期待
回复 使用道具 举报
xiewen 中级黑马 2013-4-26 01:28:55
8#
曹睿翔 发表于 2013-4-26 01:18
这个问题会在主推二中收录,敬请期待

好,谢谢!
回复 使用道具 举报
王溢君 来自手机 中级黑马 2013-4-27 00:42:37
9#
类会被静态代码块初始化。加载进内存的时候。
回复 使用道具 举报
  1. public class Office{
  2. public static void main(Stringp[] args)
  3. {
  4. Office office = new Office();
  5. System.out.println("Start to load class"); //开始加载类
  6. Class c = Class.forName(args[0], false, office.getClass().getClassLoader());// 从输入参数中获得要初始化的类
  7. System.out.println("Start to instantiate class"); //开始初始化类
  8. Object word = c.newInstance();
  9. word.start();
  10. }
  11. }


  12. //Word.java
  13. public class Word{
  14. static{
  15. System.out.println("Word initialize in static block");

  16. public void print(){
  17. System.out.println("Word is used");


  18. <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">输出结果应该是:
  19. <SPAN style="LINE-HEIGHT: 25px; FONT-FAMILY: monospace; WHITE-SPACE: pre">Start to load class</SPAN></DIV>
  20. <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>
  21. <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
  22. 从中可以看出,类加载的时候并没有调用Word类的静态初始化块,而是在实例化的时候调用初始化块的。 所以最后关于类静态初始化块被调用时间的更准备的表述应该为: 类的静态初始化块是在类实例化和加载的时候被调用和初始化的.</SPAN>
  23. </SPAN></DIV>
复制代码

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
把同一类对象的所有共同的属性和行为放在一起描述,这种声明对象共有的属性和行为的机制称为类。
类本身不会初始化,只有实例化的时候,才初始化。

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
我看大家已经有正确回答了,为什么这个问题还是被标注为“未解决”呢?.....哦,好吧,赘述一下,初始化本身是指给对象,不是类,当new一个对象的时候,就会在内存中开辟一片空间,对其进行初始化,可以有两种方式,一种是构造函数(即使不写,它也存在,系统默认给一个无参构造函数);另外就是在就是静态代码块,它是放在执行函数最前面部分,形式:{静态代码块内容},最先无条件执行,在里面可以定义初始化及其他需要执行的内容。
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
类在你输入javac命令之后加载进内存
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马