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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 乔青山 于 2014-2-26 09:44 编辑

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


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

13 个回复

倒序浏览
这有问题?
回复 使用道具 举报

。Person p = new Person();这句在main中,那执行了这句代码,main方法不是都已经执行了么。执行了这句才执行静态代码块,那静态代码块不优先于主函数啊

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
静态代码块是在类加载到java虚拟机上的时候运行的其主要作用是对类中的成员变量在内存中开辟空间并进行赋值,然后才是代码运行,在其期间运行构造方法产生实例对象

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
絮缘小默 发表于 2014-2-25 22:30
静态代码块是在类加载到java虚拟机上的时候运行的其主要作用是对类中的成员变量在内存中开辟空间并进行赋值 ...

答重点:
我问静态代码块和主函数谁先执行
回复 使用道具 举报
静态代码块
回复 使用道具 举报
乔青山 发表于 2014-2-25 22:30
。Person p = new Person();这句在main中,那执行了这句代码,main方法不是都已经执行了么。执行了这 ...

不知道在哪里讲的了 但是肯定是先加载静态代码块然后再执行main函数里面的内容的
回复 使用道具 举报
ixiangfeng 发表于 2014-2-25 22:36
不知道在哪里讲的了 但是肯定是先加载静态代码块然后再执行main函数里面的内容的 ...

唔。。但是不执行主函数的话,没有对类的调用,那就没有类的加载,没加载自然就不执行静态代码块了。这是不是有点矛盾
回复 使用道具 举报
乔青山 发表于 2014-2-25 22:39
唔。。但是不执行主函数的话,没有对类的调用,那就没有类的加载,没加载自然就不执行静态代码块了。这是 ...

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

哦哦,忽然想明白了,多谢
回复 使用道具 举报
乔青山 发表于 2014-2-25 22:44
哦哦,忽然想明白了,多谢

我记得老毕这里讲得很清楚的啊 总共8步还是9步来着 时间长了也有点忘了
回复 使用道具 举报
ixiangfeng 发表于 2014-2-25 22:46
我记得老毕这里讲得很清楚的啊 总共8步还是9步来着 时间长了也有点忘了

嗯,后面的都很清楚,但是静态代码块这个他就一句带过了。不过这个地方我感觉他讲的有点错误,不是在Person p的时候加载Person类,而是在调用主函数的时候就加载了Person类。
回复 使用道具 举报
你可以获取一个时间来看看的

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

1.png
回复 使用道具 举报
来人看看是不是错了呗。。。着急做笔记啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马