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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林德燚 中级黑马   /  2012-4-25 09:44  /  5175 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果在不同类中,这问题就好解了,;
问题是在同一个类中,静态代码块与main函数中的代码谁先被执行?
public class A{
        static{
                System.out.println("static");
        }
        public static void main(String[] args) {
                System.out.println("main");
               
        }
       
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

13 个回复

倒序浏览
static类在程序装入内存时就要确定数据类型并分配内存,而main函数包括其中的变量是在执行到的时候才分配的。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
静态代码块用于给类进行初始化的。随着类的加载而执行,只执行一次,并优先于主函数。
代码已经有了其实可以自己运行一下呀{:soso_e130:}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
static类在程序装入内存时就要确定数据类型并分配内存,而main函数包括其中的变量是在执行到的时候才分配的。
回复 使用道具 举报
本帖最后由 王明(1988) 于 2012-4-25 11:56 编辑

哥,表示刘亦菲同学,说的没错。
类和类里面的代码块,静态的也好,非静态的也好,在程序编译完了之后,在你准备执行程序时(还未进入main方法)就被放在了,毕老师说的方法区(我习惯说成code segment代码区),
你的代码静静在那里不离不弃,而这时,你的程序还没有执行,执行时自然是从main函数开始啊,毋庸置疑。而后才执行静态代码块里面的东东。
回复 使用道具 举报
静态代码块随着累的加载而执行,并且只执行一次,用于给类初始化,优先于主函数和方法。
回复 使用道具 举报
魏征 中级黑马 2012-4-25 11:34:05
7#
静态代码快在类初始化时便已加载,在对类进行初始化完毕后,主函数才会执行。
回复 使用道具 举报
静态代码块
回复 使用道具 举报
王勃 中级黑马 2012-4-25 12:00:40
9#
本帖最后由 王明(1988) 于 2012-4-25 12:02 编辑
魏征 发表于 2012-4-25 11:28
静态代码块随着累的加载而执行,并且只执行一次,用于给类初始化,优先于主函数和方法。 ...

静态代码块随着累的加载而执行,并且只执行一次,用于给类初始化,优先于主函数和方法。

静态代码随着累的加载而执行,且执行一次。---------------------这句话有问题。

代码块是优先于程序执行(main)就已经加载好了的,被放在方法区中静静的呆着和类中的代码,其他方法代码一样都在那里呆着,在程序开始执行后,才会去执行里面的代码。
加载类文件时,除了非静态成员变量(对象的特有属性)不会被加载,其它的都会被加载。
记住:加载,是将类文件中的一行行内容存放到了内存当中,并不会执行任何语句。加载时期,即使有输出语句也不会执行。
回复 使用道具 举报
执行的时候都是从main函数开始的
回复 使用道具 举报
1 静态模块会先执行   因为静态模块是在java虚拟机加载的时候就运行了       而main方法则是在执行程序是才会被执行
2 静态模块只会在被加载时才会执行一次  以后无论执行几次程序都不会再执行     而main方法则是执行几次程序就会被执行几次
回复 使用道具 举报
王明(1988) 发表于 2012-4-25 12:00
静态代码随着累的加载而执行,且执行一次。---------------------这句话有问题。

代码块是优先于程序执 ...

这是老毕视频里讲的知识,我说的静态代码块中的语句只执行一次,如果我理解的有问题请举例说明帮我纠正错误
回复 使用道具 举报
魏征 发表于 2012-4-25 16:46
这是老毕视频里讲的知识,我说的静态代码块中的语句只执行一次,如果我理解的有问题请举例说明帮我纠正错 ...
静态代码随着累的加载而执行,且执行一次

Yes,你的意思我懂,是对的,不过应该这么说:
JVM对每一个java类只初始化一次,因此java程序每运行一次,系统只为类变量(静态成员变量)、静态初始化块
分配一次内存空间,执行一次初始化。
我说你不对,是因为我认为你说的是执行静态块的的语句,而我说的是加载不是执行。
加载是load到内存的方法区中,而执行就要用到堆栈了(如果用了局部变量)。。。
回复 使用道具 举报
王明(1988) 发表于 2012-4-25 17:34
Yes,你的意思我懂,是对的,不过应该这么说:
JVM对每一个java类只初始化一次,因此java程序每运行一次 ...

明白了 ,一样受益匪浅
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马