java中main方法中的static函数不管是不是在最后,都会最先执行吗?

java中main方法中的static函数不管是不是在最后,都会最先执行吗?还是怎么样呢?,请知道的朋友解释一下那有多个static变量多个static方法应该怎么样?... java中main方法中的static函数不管是不是在最后,都会最先执行吗?还是怎么样呢?,请知道的朋友解释一下
那有多个static变量 多个static 方法应该怎么样?
展开
 我来答
Shirdrn
2009-08-31 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:113万
展开全部
你应该知道,main方法是程序执行时的入口,但是因为有了static代码段,main方法可能不会执行到。

main之所以为static的,在程序加载的时候就会分配内存,但是如果一个程序中还有其他的static方法,只能在static修饰的方法中调用。对于static代码段,也是程序执行时开始加载。

我在涉及多线程应用遇到过这个问题,例如:

public class Test {

static {
initial(); // 调用静态方法initial()
}

private static void initial() {
while(true) { // 这是在无限循环
System.out.println("some strings.");
break;
}
}

public static void main(String[] args) {
System.out.println("This is main method");
}
}

如果你执行程序的话,肯定先输出"some strings.",后输出"This is main method.",。

这说明,程序一开始加载的时候,首先加载了静态的static的代码段的程序,而且,无论static代码段放在什么位置,都会首先加载的。

其实,说main方法时入口,一般把一些static代码段视为初始化代码段,而不是应用程序(进入main方法)执行过程中,但应该知道,static代码段可以调用static修饰的方法,从而使得对应的static修饰的方法先执行了初始化。
鬼火狼烟
推荐于2017-09-18 · TA获得超过6333个赞
知道大有可为答主
回答量:2275
采纳率:50%
帮助的人:2728万
展开全部
类中的静态函数不会自己运行起来,什么时候被调用就会什么时候执行,以此可以推得如果出现下面的这种情况
class A
{
public static void main(String[] a)
{
d();
s();
}
void d()
{
System.out.println("d");
}
static void s()
{
System.out.println("s");
}
}
会输出
d
s
而不会是
s
d
多个static函数都是这个道理,main()函数也不是自己执行起来的,而是JVM去调用而执行起来的。
对于static代码段(而不是static函数),会在这个类第一次被实例化的时候执行到,所以如果A中有static{} 那么其中的代码会由于A被JVM实例化而立即执行,然后才会执行main()
对于static 变量,所有的static变量都会在第一次类被实例化的时候初始化一次,所以不管你任何一个方法(包括static方法和所有static代码段)调用它的时候,它都是已经被正确初始化的

避免混乱的办法是记下下面的初始化顺序~:
静态变量>静态初始化块>变量>初始化块>构造器
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
du瓶邪
推荐于2017-09-08 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2868万
展开全部
main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[] args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样 test t=new test();
然后才能调用 test.main();
而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
freish
2009-08-31 · TA获得超过2878个赞
知道大有可为答主
回答量:3153
采纳率:0%
帮助的人:2684万
展开全部
这就是面向对象和面向过程的区别了

在c语言中,函数如果在调用者后面定义,那么在调用前还需要先声明

面向对象中整个类中的所有方法是一个整体,没有前后关系

系统只会找public static void main(String[] args)作为入口方法进行执行,其他static方法都不会自动执行,除非你调用它
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幸巴达
2009-08-31 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6953
采纳率:38%
帮助的人:2437万
展开全部
对, 这和放的位置没关系

static变量在程序开始运行的时候开始分配内存。static方法只能被其他static方法调用执行。main方法由程序自动执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式