黑马程序员技术交流社区

标题: 静态代码块与main函数哪个先执行? [打印本页]

作者: 林德燚    时间: 2012-4-25 09:44
标题: 静态代码块与main函数哪个先执行?
如果在不同类中,这问题就好解了,;
问题是在同一个类中,静态代码块与main函数中的代码谁先被执行?
public class A{
        static{
                System.out.println("static");
        }
        public static void main(String[] args) {
                System.out.println("main");
               
        }
       
}

作者: 刘永菲    时间: 2012-4-25 09:46
static类在程序装入内存时就要确定数据类型并分配内存,而main函数包括其中的变量是在执行到的时候才分配的。
作者: 张成龙    时间: 2012-4-25 10:04
静态代码块用于给类进行初始化的。随着类的加载而执行,只执行一次,并优先于主函数。
代码已经有了其实可以自己运行一下呀{:soso_e130:}
作者: 周海诚    时间: 2012-4-25 11:09
static类在程序装入内存时就要确定数据类型并分配内存,而main函数包括其中的变量是在执行到的时候才分配的。

作者: 王勃    时间: 2012-4-25 11:19
本帖最后由 王明(1988) 于 2012-4-25 11:56 编辑

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

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

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

代码块是优先于程序执行(main)就已经加载好了的,被放在方法区中静静的呆着和类中的代码,其他方法代码一样都在那里呆着,在程序开始执行后,才会去执行里面的代码。
加载类文件时,除了非静态成员变量(对象的特有属性)不会被加载,其它的都会被加载。
记住:加载,是将类文件中的一行行内容存放到了内存当中,并不会执行任何语句。加载时期,即使有输出语句也不会执行。

作者: 马伟恒    时间: 2012-4-25 12:38
执行的时候都是从main函数开始的
作者: 崔仁军    时间: 2012-4-25 14:54
1 静态模块会先执行   因为静态模块是在java虚拟机加载的时候就运行了       而main方法则是在执行程序是才会被执行
2 静态模块只会在被加载时才会执行一次  以后无论执行几次程序都不会再执行     而main方法则是执行几次程序就会被执行几次
作者: 魏征    时间: 2012-4-25 16:46
王明(1988) 发表于 2012-4-25 12:00
静态代码随着累的加载而执行,且执行一次。---------------------这句话有问题。

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

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

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

明白了 ,一样受益匪浅




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