java中main方法中的static函数不管是不是在最后,都会最先执行吗?
java中main方法中的static函数不管是不是在最后,都会最先执行吗?还是怎么样呢?,请知道的朋友解释一下那有多个static变量多个static方法应该怎么样?...
java中main方法中的static函数不管是不是在最后,都会最先执行吗?还是怎么样呢?,请知道的朋友解释一下
那有多个static变量 多个static 方法应该怎么样? 展开
那有多个static变量 多个static 方法应该怎么样? 展开
6个回答
展开全部
你应该知道,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修饰的方法先执行了初始化。
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修饰的方法先执行了初始化。
展开全部
类中的静态函数不会自己运行起来,什么时候被调用就会什么时候执行,以此可以推得如果出现下面的这种情况
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代码段)调用它的时候,它都是已经被正确初始化的
避免混乱的办法是记下下面的初始化顺序~:
静态变量>静态初始化块>变量>初始化块>构造器
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代码段)调用它的时候,它都是已经被正确初始化的
避免混乱的办法是记下下面的初始化顺序~:
静态变量>静态初始化块>变量>初始化块>构造器
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[] args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样 test t=new test();
然后才能调用 test.main();
而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。
然后才能调用 test.main();
而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使test.main()可以直接被调用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这就是面向对象和面向过程的区别了
在c语言中,函数如果在调用者后面定义,那么在调用前还需要先声明
面向对象中整个类中的所有方法是一个整体,没有前后关系
系统只会找public static void main(String[] args)作为入口方法进行执行,其他static方法都不会自动执行,除非你调用它
在c语言中,函数如果在调用者后面定义,那么在调用前还需要先声明
面向对象中整个类中的所有方法是一个整体,没有前后关系
系统只会找public static void main(String[] args)作为入口方法进行执行,其他static方法都不会自动执行,除非你调用它
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对, 这和放的位置没关系
static变量在程序开始运行的时候开始分配内存。static方法只能被其他static方法调用执行。main方法由程序自动执行
static变量在程序开始运行的时候开始分配内存。static方法只能被其他static方法调用执行。main方法由程序自动执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询