黑马程序员技术交流社区

标题: 静态代码块的执行和主函数的执行,哪个在前? [打印本页]

作者: 乔青山    时间: 2014-2-25 22:25
标题: 静态代码块的执行和主函数的执行,哪个在前?
本帖最后由 乔青山 于 2014-2-26 09:44 编辑

毕老师刚讲到静态代码块的时候说了一句:静态代码块的执行优先于主函数
但是在讲对象的初始化的时候:怎么Person p = new Person();是先加载Person.class(毕老师这个地方讲的应该是有点错误,不是Person p的时候加载Person类,而应该是调用主函数的时候就加载Person类,所以这个地方Person类已经加载完了),再开辟空间。然后再执行静态代码块?
//这怎么搞的。。。前后讲的不一样啊
最后的执行步骤,这里面的1和2是不是反了?
执行1的时候都已经执行主函数了,执行主函数的时候不加载类?



作者: ixiangfeng    时间: 2014-2-25 22:28
这有问题?
作者: 乔青山    时间: 2014-2-25 22:30
ixiangfeng 发表于 2014-2-25 22:28
这有问题?

。Person p = new Person();这句在main中,那执行了这句代码,main方法不是都已经执行了么。执行了这句才执行静态代码块,那静态代码块不优先于主函数啊
作者: 絮缘小默    时间: 2014-2-25 22:30
静态代码块是在类加载到java虚拟机上的时候运行的其主要作用是对类中的成员变量在内存中开辟空间并进行赋值,然后才是代码运行,在其期间运行构造方法产生实例对象
作者: 乔青山    时间: 2014-2-25 22:33
絮缘小默 发表于 2014-2-25 22:30
静态代码块是在类加载到java虚拟机上的时候运行的其主要作用是对类中的成员变量在内存中开辟空间并进行赋值 ...

答重点:
我问静态代码块和主函数谁先执行
作者: 絮缘小默    时间: 2014-2-25 22:36
静态代码块
作者: ixiangfeng    时间: 2014-2-25 22:36
乔青山 发表于 2014-2-25 22:30
。Person p = new Person();这句在main中,那执行了这句代码,main方法不是都已经执行了么。执行了这 ...

不知道在哪里讲的了 但是肯定是先加载静态代码块然后再执行main函数里面的内容的
作者: 乔青山    时间: 2014-2-25 22:39
ixiangfeng 发表于 2014-2-25 22:36
不知道在哪里讲的了 但是肯定是先加载静态代码块然后再执行main函数里面的内容的 ...

唔。。但是不执行主函数的话,没有对类的调用,那就没有类的加载,没加载自然就不执行静态代码块了。这是不是有点矛盾
作者: ixiangfeng    时间: 2014-2-25 22:42
乔青山 发表于 2014-2-25 22:39
唔。。但是不执行主函数的话,没有对类的调用,那就没有类的加载,没加载自然就不执行静态代码块了。这是 ...

你执行java命令是先把这个类加载进内存的 加载完静态代码块之后才会去找主函数
作者: 乔青山    时间: 2014-2-25 22:44
ixiangfeng 发表于 2014-2-25 22:36
不知道在哪里讲的了 但是肯定是先加载静态代码块然后再执行main函数里面的内容的 ...

哦哦,忽然想明白了,多谢
作者: ixiangfeng    时间: 2014-2-25 22:46
乔青山 发表于 2014-2-25 22:44
哦哦,忽然想明白了,多谢

我记得老毕这里讲得很清楚的啊 总共8步还是9步来着 时间长了也有点忘了
作者: 乔青山    时间: 2014-2-25 22:48
ixiangfeng 发表于 2014-2-25 22:46
我记得老毕这里讲得很清楚的啊 总共8步还是9步来着 时间长了也有点忘了

嗯,后面的都很清楚,但是静态代码块这个他就一句带过了。不过这个地方我感觉他讲的有点错误,不是在Person p的时候加载Person类,而是在调用主函数的时候就加载了Person类。
作者: 安辉林    时间: 2014-2-25 22:48
你可以获取一个时间来看看的

1.png (1.52 KB, 下载次数: 27)

1.png

作者: 乔青山    时间: 2014-2-26 08:00
来人看看是不是错了呗。。。着急做笔记啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2