Java程序main方法执行流程 当我们编写完java源代码程序后,经过javac编译后,执行java命令执行这个程序时,是怎么一步步的调用到我们程序中的main方法的呢?...java可执行程序是由C++编写的,它的内部会启动一个Java虚拟机实例。 虚拟机启动入口函数位于src/java.base/share/native/launcher/main.c。...例如快速线程时钟、Linux信号处理器、最小栈长度、最大文件描述符数量、线程优先级策略等 初始化安全点机制,安全点机制是很重要的概念。...当初始化工作完成后,会调用java应用程序的入口方法(static void main(String[] args)),然后根据main方法的类型从_entry_table数组中找出对应的解释器入口点,...然后就开始解释执行main方法的字节码了。
通过maven将应用打成jar包之后,可以通过java -jar ***.jar来执行,会运行指定的main方法,主要是 MANIFEST.MF 中指定的 main 方法;那么如果有多个main方法的时候如何运行指定的...main方法哪,可以通过下面命令去执行 java -classpath ****.jar ****.****.className [args] 这里的****....MANIFEST.MF中指定,jar中有多个main方法,指定运行某个特定的main方法的命令 java -cp mplus-service-jar-with-dependencies.jar com.smbea.dubbo.bin.Console...aaa bbb 然后再main方法中添加打印的逻辑,来看下执行的参数情况 其实就是把aaa,bbb的值作为args参数传递进去了; 总结:通过maven 把项目打包成jar,然后运行main方法,有两种情况...,一种是在MANIFEST.MF中指定运行的main方法;另外一种是通过命令行指定运行的main方法的包;同时可以添加对应的参数传递到main方法中去; 发布者:全栈程序员栈长,转载请注明出处:https
中间遇到了一些坑,主要就是对java代码执行循序,特别是在main方法之前的代码执行顺序了解不深入导致的,中间有多个继承关系也有点扰乱了思路。下面分享一下自己这个错误的复现步骤。...; public static void main(String[] args) { System.out.println("进入程序入口了!")...; } } 下面是执行结果: 我是Cbc构造方法! 我是Cbc静态代码块! 进入程序入口了! 这个就比较简单了,先执行静态变量赋值,然后执行静态代码块,然后再去执行main方法。...; } } 下面是执行结果: 我是Abc构造方法! 我是Abc静态代码块! 我是Abc构造方法! 我是Bbc构造方法! 我是Bbc静态代码块! 我是Abc构造方法! 我是Bbc构造方法!...我是Cbc构造方法! 我是Cbc静态代码块! 进入程序入口了! 可以看出来,先执行Abc,再去执行Bbc,再去执行Cbc。
ava打包成jar jar -cvf [jar包的名字] [需要打包的文件] 执行jar包中的main方法 java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 main...方法,那么如何运行指定的 main 方法呢?....****.className [args] “****.****”表示“包名”; “className”表示“类名”; “[args]”表示传入的参数; 直接运行 MANIFEST.MF 中指定的 main...方法: java -jar mplus-service-jar-with-dependencies.jar 运行指定的 main 方法(MANIFEST.MF 中没有指定的main方法): java
下面就详细谈谈java main方法: 根据Java语言规范,main方法必须声明为public。...但是在JavaSE1.4以前的版本中,当main方法不是public时,有些版本的Java解释器也可以执行Java应用程序。...但是在1.4版本之后main方法已经被强制成了public,所以现在我们看到的main方法只能是public。...static的定义是为了JVM在调用main方法时不用实例化对象,只需要在初始时加载main方法所在类,然后直接通过类名.main来调用main方法。...main的名称不能变是为了JVM能够识别程序运行的起点,main方法可以被重载,重载的main方法不会被执行。main方法作为程序初始线程的起点,任何其他线程均由该线程启动。
话不多说,就以main方法详解开始今天的主题吧。...每个修饰符都有它对应的权限,public权限最大,为了说明问题,我们假设main方法是用private修饰的,那么main方法出了Demo这个类对外是不可见的。那么,JVM就访问不到main方法了。...; } } 此时,JVM要调用main方法可以这样做:new Demo().main();对于这种情况来说显然是可以的。...此时要创建对象就会调用的带参的构造方法,而带参的构造方法必然是要接受参数的,可是对于JVM来讲,根本就不知道要传递什么参数。所以,将main方法设计成静态的,就避免了这种问题。...3、为什么没有返回值(void) 这个很好理解,假设是有返回值的,JVM调用了main方法,main将数据返回给JVM,main方法一旦返回数据,也就意味着程序结束了,而JVM要这个返回的数据是没有意义的
和单片机开发一样,在Linux中,C语言程序的执行通常从main函数开始。main函数是程序的入口点,当程序启动时,操作系统会调用main函数来执行程序的主要逻辑。...不同于单片机开发,通常设置main函数没有参数,Linux开发中main函数有两种形式:一种是不带参数,另一种是带参数。无论使用哪种形式,都需要返回一个整数值,通常用于表示程序的退出状态。...以下是关于main函数的一些基本使用方法: #include // 主函数的声明,可以有两种形式 // 1....不带参数 int main() { return 0; // 返回0表示程序正常结束 } // 2....*argv[]) { return 0; } 重点说一下带参数的main函数形式,实际应用中可以接收命令行参数。
从语法上对main方法的理解 从JVM角度: 由于JVM需要调用类的main()方法,所以该方法的访问权限必须是public, 又因为JVM在执行main()方法时不必创建对象,所以该方法必须是static...的, 该方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。...从Java语法角度: 又因为main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。...注:有很多初学者 ( 我也是 ) 可能会认为文件名应该也和 main 方法所在类有关系,其实不然。...main 方法只是程序的一个入口,老师讲“一个程序只能有一个入口”,好象是在说只能有一个 main 方法,其实,只要你高兴,就可以在所有类里都写上 main 方法,给程序提供N多个入口,但是最后你运行程序的时候也只能从其中的一个入口进去
最终,在启动过程的最后阶段,会通过调用__call_main来跳转到main函数,从而开始执行主程序。 MCU启动过程 MCU启动过程指的是从MCU复位到main函数之前的过程。...这确保了在复位时能够始终从相同的地址开始执行,从而确保可靠的系统启动。...然后是C++动态初始化:构造静态 C++ 对象,最后会调用main函数。...会调用main函数跳转到main函数: 至此MCU从复位向量开始,运行启动代码之后就跳转到main函数,然后开始运行用户的代码: 注意事项 Cortex-M的MSP赋值是通过硬件自动操作完成的,在复位后会从中断向量表的...最终,在启动过程的最后阶段,会通过调用__call_main来跳转到main函数,从而开始执行主程序。
在WPF程序抛出这样的错误: Program 'SQLiteManager.exe' does not contain a static 'Main' method suitable for an entry...当把Build Action设置为ApplicationDefinition时,WPF程序就会生成static 'Main' 方法。...Application 提供了一些实用的属性和方法。 Current: 获取 Domain 中默认的 Application 实例。 MainWindow: 获取主窗口实例。...Shutdown: 该方法终止 Application Process,可向操作系统返回一个退出码。
Java main 方法三问 main 方法是我们能刚开始学习 Java 时接触的第一个方法,在开发过程中我们都会直接和间接的使用到这个方法,那么你是否考虑过这三个问题: main 方法为什么是静态方法...main 方法为什么是公有方法? main 方法的返回值为什么是 void ? 针对上面的三个问题我分别进行一一解答。...零、main 方法为什么是静态方法 我们想象一下,如果 main 方法不是静态的,那么 JVM 在调用 main 方法前就必须先实例化 main 类,但是构造器可以被重载因此 JVM 就无法确认到底应该调用哪个...main 方法。...并且静态的方法和数据加载到内存中后就可以直接调用,而不需要先实例化类后才能调用实例化方法。简单的说就是静态的 main 方法会被加载到 JVM 上下文中成为可直接执行的方法。
今天给大家分享【java 主方法--main】。...main 是java程序的入口(Java 虚拟机运行程序的时候首先找的就是 main 方法),一个 java 程序的运行必须有且仅有一个 main 方法。...Java 程序利用 main 函数中 args 参数实现参数的传递(多参传递空格处理) 用控制台编译运行: $ javac Test.java $ java Test I am lucky....,这样 Java 虚拟机就可以找到 main() 方法,从而来运行 javac 程序。...static:表明方法是静态的,不依赖类的对象的,是属于类的,在类加载的时候 main() 方法也随着加载到内存中去。 void:方法是不需要返回值的。 main:约定俗成,规定的。
有时候我们需要调用一个类的Main方法,也可说是执行这个类的代码。...但是这时候这个类我们还没有写好,或者这个类是通过网络运行时传给我们的,我们就不可能在程序中知道我们将要运行的类的名字,这时候我们可以利用java的反射机制去调用main方法,只要在我们执行的时候,将我们需要执行的类的名字传递进去就可以了...这个方法在进行网络编程的时候,有时候我们需要接收一个类,我们只有等到接收到了才知道类的名字叫什么,显然现在在写程序不实际,我们就可以利用反射的方法。...import java.lang.reflect.Method; public class CopyOfReflectMain { public static void main...mainMethod.invoke(null, new Object[]{new String[]{"abc","efg"}}); //还可以使用下面的方法, mainMethod.invoke
每个修饰符都有它对应的权限,public权限最大,为了说明问题,我们假设main方法是用private修饰的,那么main方法出了Demo这个类对外是不可见的。那么,JVM就访问不到main方法了。...在Java中声明为public的任何方法或变量都可以从该类的外部访问。 而JVM访问main方法显然不是在类的内部访问,因此main方法需要定义为public的方法。...4、main main的名称不能变是为了JVM能够识别程序运行的起点,main方法可以被重载,重载的main方法不会被执行。main方法作为程序初始线程的起点,任何其他线程均由该线程启动。...,才会开始调用finalize()方法;因此并不是所有对象的finalize()方法都会被执行; 2)该线程也是daemon线程,因此如果虚拟机中没有其他非daemon线程,不管该线程有没有执行完finalize...Finalizer对象的引用置为null,由垃圾收集器来回收; 4) JVM为什么要单独用一个线程来执行finalize()方法呢?
Selection does not contain an applet 你的程序的main参数应该是String[] args 而不是String args 顺便,LZ注意首字母大写。...主要是main方法中的参数的问题,请注意!!
今天在考试中,遇到了main方法的书写方式判断,赶脚没用,但还是侧了一侧 Main方法测试 一个方法至少需要哪些要素??...1、main()方法是Java应用程序的入口点,每个Java应用程序都是从main()方法开始运行的。...作为程序入口的main()方法必须同时符合以下几个条件: .用public static修饰; .返回类型为void; .方法名为main; .参数类型为String[]; 包含main方法的类又叫主程序类...方法体每个语句用“;”结束; 方法体中使用return语句返回数据或结束本方法的执行; 但是在学习到后期,我们可以发现main方法有很多等同意义的写法 1.1 public static void...publicabstract voidmain(String[] args)//错误,abstract要求没有方法体 以上就是众多的main方法。。。
} } 编译运行,很显然没啥问题,除了 JVM 规定的作为应用程序入口的 main 方法之外,其他的 main 方法都是比较普通的方法。...main方法能被其他方法调用么?...("main方法执行:" + times); if (times <= 0) { System.exit(0); } main2(...args); } } 运行一下代码,可以发现代码能正常执行: main方法执行:3 main方法执行:2 main方法执行:1 main方法执行:0 所以说即使是作为应用程序入口的 main...我们以前了解过,当类继承时,子类可以继承父类的方法和变量,那么当父类定义了 main 方法,而子类没有 main 方法时,能继承父类的 main 方法,从而正常的运行程序么?
一、phy执行的枚举状态定义 enum phy_state { PHY_DOWN=0, //down 如关闭网卡,ifconfig eth0 down PHY_STARTING, //1 PHY_READY...网卡上已插入网线、并建立物理连接,同时会从这个状态切换到PHY_CHANGELINK PHY_NOLINK, //7 断网,如拔掉网线 PHY_FORCING, //8 自动协商标识未被使能,就强制执行自动协商...(ifconfig eth0 down)会执行到这个状态,即phy挂起 PHY_RESUMING //11 在执行网卡开启时(ifconfig eth0 up)会执行到这个状态,即phy恢复 }; 二...三、应用层执行ifconfig eth0 up时phy的设备状态 ifconfig eth0 up-----> nuc970_ether_open phy_start //.........总结:上面在执行 ifconfig eth0 up 后,已将phydev->state = PHY_UP 四、phy状态机phy_state_machine执行状态分析 phy_state_machine
现在就用最简单的main方法复现堆内存溢出并做分析。...概念先行 JVM内存模型(JMM): 堆,方法区,本地方法栈,虚拟机栈,程序计数器 (后面三个线程共享) 栈和堆: 栈是运行空间,堆是存储空间,类似于我小米手机的运行内存(RAM)8G和存储空间(ROM...public static void main(String[] args) { List peoples = new ArrayList(); int i = 0;...People{name='null', sex='null'}540216 People{name='null', sex='null'}540217 Exception in thread "main...ArrayList.java:231) at java.util.ArrayList.add(ArrayList.java:462) at com.example.demo.DemoMain.main
学过java的都知道main方法是学习java的开始,也是程序的入口,不过你有多少个类或程序,线程,他们的入口方法都是main()。...执行过程: 现在的问题是:JVM是如何加载类,又是如何调用 main() 方法的?...4. executed the main method(执行main方法) 实际上,装载的工作是由Java的 类加载器 完成的。当JVM启动的时候,会同时启动三个类加载器。 1....在该类的 main() 方法被执行之前,它会首先完成 装载、链接、初始化其他被依赖类等工作。...随后,被调用的 println() 方法又会生成一个栈帧被推入到 “main” 线程所在的栈中。当 main() 方法执行完毕,整个的栈会被销毁,整个的应用也就正常结束了。
领取专属 10元无门槛券
手把手带您无忧上云