Java程序初始化


在这里插入图片描述

一. 为什么需要主方法

Java是面向对象的语言,即所谓的一切皆对象。我们可以吧一个Java程序想象成为一个房子,你要进入房子,必须得先开门来进入房间。房间里的所有东西,都可以抽象成对象。你要做饭,洗衣服,得通过对象(锅碗瓢盆洗衣机)来做这件事,具体怎么做,先干啥后干啥,得看具体到做什么事,也就是通过对象来调用方法。而程序的入口,就是这间房子的门。

public static void main(String[] args)就是Java程序的入口,Java是半编译半解释性的语言,在程序执行时,它先会把.java文件编译成.class的字节码(区别于编译型语言的二进制代码和解释型语言),JVM在运行程序时,会首先来寻找main()作为入口执行程序。

public是修饰权限,表明任何类或对象均可访问这个方法,但是第一次执行的时候,并没有实例化对象,所依并不能通过对象来调用主方法。所以,需要用static来修饰,表明main()是静态方法,只要类加载后,不需要用过对象来调用,直接通过类名.方法名来调用

字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段。

main()方法的返回值必须为空,并且必须有publicstatic来修饰。

以下签名也均为正确

public static final void main(String[]args)

static public void main(String[]args)

static public synchronized void main(String[]args)

为什么不能用 abstract来修饰呢?

abstract修饰的抽象类需要子类来实例化

二. Java程序初始化的顺序

怎么来看Java中那一部分代码先执行呢?既然main()是程序的入口,它一定会是先执行吗?

Java程序初始化的顺序:

  1. 有继承关系,父类是爸爸;先执行父类,再执行子类
  2. 静态代码块最先执行(只在类加载时执行一次,先父后子,与代码在类种位置无关)
  3. 构造方法(先父后子)
  4. 非静态内容(先父后子,按顺序执行,与代码在类种位置有关)

看例子:
在这里插入图片描述
在这里插入图片描述

class B extends Object {
    static {
        System.out.println("Load B1");
    }

    public B() {
        System.out.println("Creat B");
    }

    static {
        System.out.println("Load B2");
    }
}

class A extends B {
    static {
        System.out.println("Load A");
    }

    public A() {
        System.out.println("Creat A");
    }
}

public class Dad {
    public static void main(String[] args) {
        new A();
    }
}

执行结果:

  • Load B1
  • Load B2
  • Load A
  • Creat B
  • Creat A
发布了77 篇原创文章 · 获赞 118 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43232955/article/details/103114232