浅谈Java文件执行顺序、main程序入口的理解

 更新时间:2019年03月14日 10:59:34   作者:Gxx2018  
这篇文章主要介绍了Java文件执行顺序、main程序入口的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在我们通过JVM编译Java后缀名的文件时,JVM首先寻找入口(main方法)

public static void main(String[] args)

1、由于在入口时,未调用任何对象,该方法只能设置为static静态
2、JVM为Java的最底层,所以即使有返回结果,结果也无处可去,因此该方法必然是void无返回值
3、由于main方法是入口,被JVM自动调用,只有将该方法设置为public公有级别才能对JVM可见
综上,入口main方法只能写为

public static void main(String[] args)

在我们没有写main方法时,系统会自动会为我们添加一个无参mian主方法,该方法的添加位置为public类中首行(之前也提到过,只有添加在public级别中才对JVM可见,可以自动调用)

注意:如果在java文件中未包含任一公共类(public class),此文件依然可以通过编译,但是主动运行由于找不到public class,就无法自动添加main方法,JVM找不到程序入口,运行会报错,即编译通过运行报错,缺少public class的文件需要等待被其它java文件调用,无法作为入口。

package j2se;

class X{
  Y y=new Y();
  public X(){
    System.out.print("X");
  }
}
class Y{
  public Y(){
    System.out.print("Y");
  }
}
//public class Z extends X{
 // Y y=new Y();
 // public Z(){
  //   System.out.print("Z");
  // }
  // public static void main(String[] args) {
  //   new Z();
  // }
//}

报错:

错误: 找不到或无法加载主类 j2se.Z
原因: java.lang.ClassNotFoundException: j2se.Z

当我们加上public类(public class)后,编译运行通过,根据返回结果可以清楚看到程序的执行顺序,代码如下:

package j2se;

class X{
  Y y=new Y();
  public X(){
    System.out.print("X");
  }
}
class Y{
  public Y(){
    System.out.print("Y");
  }
}
public class Z extends X{
  Y y=new Y();
  public Z(){
    System.out.print("Z");
  }
  public static void main(String[] args) {
    new Z();
  }
}

运行结果:YXYZ

 根据这个运行结果,我们可以看出,程序运行后JVM编译顺序为,JVM直奔public class中main()方法作为入口,并开始编译执行

public static void main(String[] args)

以上所述是小编给大家介绍的Java文件执行顺序、main程序入口的详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • EL调用Java方法_动力节点Java学院整理

    EL调用Java方法_动力节点Java学院整理

    简单来说,我们在一个类中的某个方法,可以使用EL进行调用,这个能被EL表达式调用的方法称之为EL函数,但是这种方式必须满足两点要求,具体哪两点,大家可以参考下本文
    2017-07-07
  • Java中的Semaphore信号量深入解析

    Java中的Semaphore信号量深入解析

    这篇文章主要介绍了Java中的Semaphore信号量深入解析,Semaphore是Java里面另外一个基本的并发工具包类,主要的的作用是用来保护共享资源的访问的,也就是仅仅允许一定数量的线程访问共享资源,需要的朋友可以参考下
    2023-11-11
  • SpringBoot多环境打包与配置文件排除实践记录

    SpringBoot多环境打包与配置文件排除实践记录

    本文介绍了SpringBoot项目多环境打包与配置文件排除实践,包括多环境配置的实现方法、打包时排除配置文件的方法以及动态加载外部配置文件的最佳实践,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • java中同类对象之间的compareTo()和compare()方法对比分析

    java中同类对象之间的compareTo()和compare()方法对比分析

    这篇文章主要介绍了java中同类对象之间的compareTo()和compare()方法对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java数据结构基础:单链表与双向链表

    java数据结构基础:单链表与双向链表

    这篇文章主要为大家详细介绍了java实现单链表、双向链表的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • spring的xml文件打开没有namespace等操作选项的解决方案

    spring的xml文件打开没有namespace等操作选项的解决方案

    这篇文章主要介绍了spring的xml文件打开没有namespace等操作选项的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springboot数据库操作图文教程

    springboot数据库操作图文教程

    本文以图文并茂的形式给大家介绍了springboot数据库操作,感兴趣的朋友一起看看吧
    2017-07-07
  • Mybatis-plus批量插入的2种方式总结

    Mybatis-plus批量插入的2种方式总结

    这篇文章主要给大家总结介绍了关于Mybatis-plus批量插入的2种方式,Mybatis-Plus提供了多种方式进行批量插入优化,文中通过代码示例将实现的方法介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • Java 策略模式 if-else用法实例详解

    Java 策略模式 if-else用法实例详解

    这篇文章主要介绍了Java 策略模式 if-else用法详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • Spring手动获取bean的四种方式

    Spring手动获取bean的四种方式

    本文主要介绍了Spring手动获取bean的四种方式,包括BeanFactoryPostProcessor接口,ApplicationContextAware接口,注解 @PostConstruct 初始化时获取,启动类ApplicationContext获取这四种方法,感兴趣的可以了解一下
    2024-01-01

最新评论