黑马程序员技术交流社区
标题:
关于主程序加载时运行顺序的问题
[打印本页]
作者:
张洁
时间:
2012-6-6 19:28
标题:
关于主程序加载时运行顺序的问题
代码如下:
public class MainDemo {
/**
* @param args
*/
static {
System.out.println("hehe");
}
public static void main(int x) {
System.out.println("hehe0");
}
public static void main(String[] args) {
System.out.println("hehe1");
}
{
System.out.println("hehe2");
}
static {
System.out.println("hehe3");
}
}
最后输出结果是:
hehe
hehe3
hehe1
为什么是这个顺序?还有我的hehe0 hehe2为什么不输出呢?
作者:
黑马张扬
时间:
2012-6-6 19:59
本帖最后由 黑马张扬 于 2012-6-6 20:03 编辑
静态代码块是用来初始化类 的 类一加载就执行了 是最先执行的 按你的代码顺序 所以打印了 hehe hehe3
然后执行主函数里的代码语句 打印了hehe1 然后你的构造代码里是打印hehe2
构造代码块是在创建对象是初始化对象的 优先于构造函数 你并没有创建对象 所以就没执行!
public static void main(int x) {
System.out.println("hehe0");
}
这个静态函数 你都没调用 当然也不会执行
作者:
梁小波
时间:
2012-6-6 20:06
程序首先执行的是静态代码快的内容;
然后是main函数;
你的 public static void main(int x) {
System.out.println("hehe0");
}
参数不对,所以是个重载形式;不会是程序入口;
必须调用才会出现;
你的hehe2是在构造代码块中吗!所以必须new MainDemo();才会初始化这一句;
作者:
信义明
时间:
2012-6-6 20:11
类加载时会优先运行静态代码块中内容,且只执行一次,因此先打印hehe和hehe3
紧接着运行主函数,打印hehe1
hehe0和hehe2都没有运行
作者:
李文富
时间:
2012-6-6 20:12
package interview;
public class MainDemo {
/**
* @param args
*/
static {
System.out.println("hehe");
//静态代码块随类的调用优先加载到内存,因为放在main函数之前故比main还要先载入;
}
public static void main(int x) {
System.out.println("hehe0");
//普通的静态方法,方法名叫main,接受int型;
//可以看下面的调用,因为虽和main同名但是不是接受 String[] args 故非主函数;
}
public static void main(String[] args) {
System.out.println("hehe1");
main(1);
new MainDemo();//此处可以看到打印结果;
}
static {
//同理
System.out.println("hehe3");
}
//类的默认代码块,随类的创建实例对象而加载 ,一个类只可一个这样的代码块
{
System.out.println("hehe2");
}
}
/*hehe
hehe3
hehe1
hehe0
hehe2*/
作者:
丰亚彬
时间:
2012-6-6 20:14
论坛里面有个贴子,总结的非常好,去看看就知道了
作者:
吴小铁你好
时间:
2012-6-6 20:31
本帖最后由 吴小铁你好 于 2012-6-6 20:32 编辑
这涉及到java中程序的执行顺序,
1.静态代码块。
2.块。
3.构造器
4.父类构造器。
在这段代码中选执行静态代码块static,所以先答应:hehe hehe3.最后执行主函数:hehe1.
在主函数中没有调用hehe0,和hehe2所以不会执行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2