构造函数和main(String args[]){},哪个先执行?

westuser 2006-02-12 02:59:23
public class test{
test(){}
public static void main(String args[]){}
}
//哪个先执行呢?
...全文
665 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
sophitia212 2006-02-14
  • 打赏
  • 举报
回复
看大家这么热情我也来谈谈我的看法
首先我认同,如果带main()的类没有被new 是不会执行构造方法的。
有人说main()是最先执行的,其实如果你看了《core java》你会发现static initialization block是最先执行的,他有个例子如下:
public class Hello
{
static
{
System.out.println("Hello, World");
System.exit(0);
}
}
这样一个应用程序就能在没有main()的情况下输出一行字到控制台。
其实静态初始化块也属于类的初始化的一部份,他负责初始化静态变量,他是在类第一次被调用的时候被调用。下面是《core java 7》原话:
==================================================
You initialize a static field either by supplying an initial value or by using a static initialization block. You have already seen the first mechanism:

static int nextId = 1;

If the static fields of your class require complex initialization code, use a static initialization block.
==================================================

另外再提一下对象的初始化,也就是调用构造方法的时候,java的处理过程(注意与类的初始化分开)。
1.All data fields are initialized to their default value (0, false, or null).

2.All field initializers and initialization blocks are executed, in the order in which they occur in the class declaration.

3.If the first line of the constructor calls a second constructor, then the body of the second constructor is executed.

4.The body of the constructor is executed.

下面是对上面的话的一些解释,本人英语水平有限,翻译和解释有错的地方请大家指导。

1.所有数据都被初始化成他的默认值(0, false, or null)
2.所有数据初始化(也就是你定义的全局变量:private int i=5;),所有的初始化块被调用。
3.如果构造器的第一行调用第二个构造器,那么第二个构造器被调用。
4.构造器被调用。


treeroot 2006-02-13
  • 打赏
  • 举报
回复
晕的一塌糊涂,main方式是入口,不是先不先的问题
只有new的时候才会调用构造函数.
根本就是完全不同的概念,哪里来的先后之分?
universe01 2006-02-13
  • 打赏
  • 举报
回复
main先!
weinickli 2006-02-13
  • 打赏
  • 举报
回复
main~~ 这是系统调用~~再调用里面的程序~~要是你不用到定了main的类~~~构造函数就不调用了
hello132 2006-02-13
  • 打赏
  • 举报
回复
先静态后动态
gifted1982 2006-02-13
  • 打赏
  • 举报
回复
先静态后动态
先成员后构造

可以做个测试类,然后设置断点走一下就知道了
菠菜Hello_World 2006-02-13
  • 打赏
  • 举报
回复
main()先
figoren 2006-02-13
  • 打赏
  • 举报
回复
main()
HengHuan 2006-02-13
  • 打赏
  • 举报
回复
同意各位楼主,帮顶——
xzgyb 2006-02-13
  • 打赏
  • 举报
回复
你这个包含main的test类也是一个普通的公共类
你没有构造它,当然构照函数就不会执行
只执行main
chg2008 2006-02-13
  • 打赏
  • 举报
回复
main先,从线程的角度,他是手护线程
superstack 2006-02-13
  • 打赏
  • 举报
回复
实践才是真理
treeroot 2006-02-13
  • 打赏
  • 举报
回复
要是构召函数是static方法的呢?

这句话事虾米意思????????????????????????
mlyb 2006-02-13
  • 打赏
  • 举报
回复
先main

K1234567890 2006-02-13
  • 打赏
  • 举报
回复
程序在进入MAIN之前的确会进行一些初始化的工作,例如一些全局变量,静态变量等等.
但现代的编译技术有时也可能会采取在实际使用到变量时才真正初始化变量,以加快程序启动的速度.所以不能主观而论的.

楼主的程序比较简单,但思考是应该提倡的呀?越是简单的程序,越要深挖呢..
tiesoftware 2006-02-13
  • 打赏
  • 举报
回复
我觉得要看情况了,要是构召函数是static方法的呢?是不是应该先执行构找函数呢
ftlovexg 2006-02-12
  • 打赏
  • 举报
回复
在main里调用test()才能执行test()
liaoxingya276 2006-02-12
  • 打赏
  • 举报
回复
在你的程序中,main会执行,test()不会执行
chyx413332087 2006-02-12
  • 打赏
  • 举报
回复
public class test{
test(){System.out.println("dfd");
}
public static void main(String args[]){
System.out.println("测一下哪个先");
}
}
main()先
IT佬 2006-02-12
  • 打赏
  • 举报
回复
main方法是程序的入口....
加载更多回复(4)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧