构造函数和main(String args[]){},哪个先执行?
public class test{
test(){}
public static void main(String args[]){}
}
//哪个先执行呢?
问题点数:20、回复次数:24Top
1 楼aaa2003gf(珍惜 (MSN:aaa2003gf@hotmail.com))回复于 2006-02-12 15:07:17 得分 1
main 先Top
2 楼yxwmxkq(酷得经动了党)回复于 2006-02-12 15:10:42 得分 1
先静态后动态
先成员后构造Top
3 楼zjrkif(风寒凝)回复于 2006-02-12 17:34:31 得分 1
main(String args[]){}是java程序的入口
构造函数是在创建类test的对象时由编译器自动调用的
也就是说程序先从main()函数进入,遇到类的对象时在调用构造函数。Top
4 楼lydvqq(碧水情缘♀黑哥)回复于 2006-02-12 20:44:21 得分 1
main(String args[]){}先Top
5 楼asp911()回复于 2006-02-12 21:02:20 得分 1
main方法是程序的入口....Top
6 楼chyx413332087()回复于 2006-02-12 21:22:33 得分 1
public class test{
test(){System.out.println("dfd");
}
public static void main(String args[]){
System.out.println("测一下哪个先");
}
}
main()先Top
7 楼liaoxingya276(独孤过客)回复于 2006-02-12 21:35:24 得分 1
在你的程序中,main会执行,test()不会执行Top
8 楼ftlovexg(噼里啪啦)回复于 2006-02-12 22:08:49 得分 1
在main里调用test()才能执行test()Top
9 楼chg2008(岂能尽如人意,但求无愧我心!)回复于 2006-02-13 08:16:24 得分 1
main先,从线程的角度,他是手护线程Top
10 楼xzgyb(老达摩)回复于 2006-02-13 08:56:17 得分 1
你这个包含main的test类也是一个普通的公共类
你没有构造它,当然构照函数就不会执行
只执行mainTop
11 楼HengHuan(山里人)回复于 2006-02-13 08:57:03 得分 0
同意各位楼主,帮顶——Top
12 楼figoren(figoren)回复于 2006-02-13 10:44:17 得分 1
main()Top
13 楼spinach110(菠菜)回复于 2006-02-13 11:12:15 得分 1
main()先Top
14 楼gifted1982(玩游戏的Coder)回复于 2006-02-13 11:21:14 得分 1
先静态后动态
先成员后构造
可以做个测试类,然后设置断点走一下就知道了Top
15 楼hello132(hell123)回复于 2006-02-13 11:25:53 得分 1
先静态后动态Top
16 楼weinickli(总有路,总没走)回复于 2006-02-13 11:35:05 得分 1
main~~ 这是系统调用~~再调用里面的程序~~要是你不用到定了main的类~~~构造函数就不调用了Top
17 楼universe01(未知软体)回复于 2006-02-13 11:52:29 得分 1
main先!Top
18 楼treeroot(旗鲁特)回复于 2006-02-13 12:31:05 得分 1
晕的一塌糊涂,main方式是入口,不是先不先的问题
只有new的时候才会调用构造函数.
根本就是完全不同的概念,哪里来的先后之分?Top
19 楼tiesoftware(我想早恋----但是已经晚了:( )回复于 2006-02-13 15:31:34 得分 1
我觉得要看情况了,要是构召函数是static方法的呢?是不是应该先执行构找函数呢Top
20 楼K1234567890(Ken.Lv)回复于 2006-02-13 15:32:55 得分 1
程序在进入MAIN之前的确会进行一些初始化的工作,例如一些全局变量,静态变量等等.
但现代的编译技术有时也可能会采取在实际使用到变量时才真正初始化变量,以加快程序启动的速度.所以不能主观而论的.
楼主的程序比较简单,但思考是应该提倡的呀?越是简单的程序,越要深挖呢..Top
21 楼mlyb()回复于 2006-02-13 16:11:58 得分 0
先main
Top
22 楼treeroot(旗鲁特)回复于 2006-02-13 16:28:47 得分 0
要是构召函数是static方法的呢?
这句话事虾米意思????????????????????????Top
23 楼superstack(snowolfe)回复于 2006-02-13 17:15:43 得分 0
实践才是真理Top
24 楼sophitia212(皓血)回复于 2006-02-14 02:30:34 得分 1
看大家这么热情我也来谈谈我的看法
首先我认同,如果带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.构造器被调用。
Top




