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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

昨天问过一次,不知道为什么没人回答,急着做笔记,所以再简化的问一下。

这是从毕老师视频上截的图
毕老师讲过,静态代码块的执行优先于主函数。
但是,在图中的步骤中,执行1的时候已经执行了主函数
所以1和2是不是反了?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

11 个回复

倒序浏览
没有错呀
静态static是随着类的加载而加载的 只有先加载了类才能去执行静态代码块的内容

评分

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

查看全部评分

回复 使用道具 举报
类是先加载后执行的,所以首先会加载static函数所在类,加载完毕后再运行new创建对象,ok!
回复 使用道具 举报
没有错的,
你想,static在类里面,先加载类后,才去找static.你看



回复 使用道具 举报
  1. class Demo
  2. {
  3.         {
  4.                 static int i = 3;
  5.        
  6.         }


  7.         public static void main(String[] args)
  8.         {
  9.                 //如果main先执行这个就知道了,如果打印出来是3,说明静态代码块先执行
  10.                 System.out.println(Demo.i);
  11.         }
  12. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报

说明不了,因为打印的时候代码块和main函数都执行了,你怎么能判断是谁先执行的呢
回复 使用道具 举报
zzkang0206 发表于 2014-2-26 11:01
没有错呀
静态static是随着类的加载而加载的 只有先加载了类才能去执行静态代码块的内容 ...

我知道
但是,是静态代码块和主函数谁先的问题。上面的步骤是mian先执行,这没错?
回复 使用道具 举报
zxg08042810 发表于 2014-2-26 11:08
类是先加载后执行的,所以首先会加载static函数所在类,加载完毕后再运行new创建对象,ok!
...

所以说上面的是反了?
回复 使用道具 举报
wdtdcm 发表于 2014-2-26 11:40
没有错的,
你想,static在类里面,先加载类后,才去找static.你看

没有错么,是你的思路被老师代沟里了吧。
我问你,不加载类你怎么能够找到主函数,找不到主函数你怎么能执行Person p = new Person();呢?
你如果等Person p = new Person();执行的时候才加载类,那你的主函数从哪来的?不从类里面来?
回复 使用道具 举报
wdtdcm 发表于 2014-2-26 11:40
没有错的,
你想,static在类里面,先加载类后,才去找static.你看

哦,不对,说的不是一种情况。
我是说静态代码块和main函数在同一类中的时候。
回复 使用道具 举报
wdtdcm 发表于 2014-2-26 11:40
没有错的,
你想,static在类里面,先加载类后,才去找static.你看

明白了,老师的那个程序主函数在另一个类中。
回复 使用道具 举报
乔青山 发表于 2014-2-26 12:13
哦,不对,说的不是一种情况。
我是说静态代码块和main函数在同一类中的时候。 ...

我的理解是,静态成员变量是在它所在的类文件被加载的同时,为它分配了相应的内存空间,而其他非静态成员变量是根据代码从主函数开始执行后,依次加载执行,分配相应内存空间,主函数也是静态的,所以是同时加载的。静态方法只能调用静态成员(静态成员和静态方法)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马