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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中main方法中的static函数不管是否在最后,都会最先执行吗?相关的知识,希望对你有一定的参考价值。

java中main方法中的static函数不管是不是在最后,都会最先执行吗?还是怎么样呢?,请知道的朋友解释一下
那有多个static变量 多个static 方法应该怎么样?

你应该知道,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修饰的方法先执行了初始化。
参考技术A 类中的静态函数不会自己运行起来,什么时候被调用就会什么时候执行,以此可以推得如果出现下面的这种情况
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代码段)调用它的时候,它都是已经被正确初始化的

避免混乱的办法是记下下面的初始化顺序~:
静态变量>静态初始化块>变量>初始化块>构造器本回答被提问者采纳
参考技术B main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[] args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样 test t=new test();
然后才能调用 test.main();
而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。
参考技术C 这就是面向对象和面向过程的区别了

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

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

系统只会找public static void main(String[] args)作为入口方法进行执行,其他static方法都不会自动执行,除非你调用它
参考技术D 对, 这和放的位置没关系

static变量在程序开始运行的时候开始分配内存。static方法只能被其他static方法调用执行。main方法由程序自动执行

在java中为什么要把main方法定义为一个static方法?

使用外部方法时(不管是static还是非static),都要先new一个对象,才能使用该对象的方法

eg:

Employee employee = null;错误
Employee employee = new Employee(); 正确

以上是关于java中main方法中的static函数不管是否在最后,都会最先执行吗?的主要内容,如果未能解决你的问题,请参考以下文章

不用static,巧用对象.方法调用java中的函数

JAVA里面的main函数为啥要定义为static的?

是否有正当理由在C程序的main()函数中声明变量static?

漫话:为什么Java中的main方法必须是public static void的?

为什么Java的main方法必须是public static void?

课程作业02