java学习--main方法

在 Java 中,main方法是程序的入口点 ,JVM(Java 虚拟机)通过调用main方法启动程序执行。它是一个特殊的静态方法,具有固定的语法规范和特性。

1. main方法的语法规范

main方法必须遵循严格的格式,否则 JVM 无法识别:

复制代码
public static void main(String[] args) {
    // 程序逻辑
}
  • public:JVM 需要从外部访问该方法,因此必须是公共的。
  • static :JVM 启动时无需创建类的实例,直接通过类名调用main方法。
  • void :main方法没有返回值,JVM 不接收其返回结果。
  • main :方法名必须为main(严格区分大小写)。
  • String[] args:参数是字符串数组,用于接收命令行传入的参数。

2. 核心特性解析

(1)参数String[] args

args是命令行参数的载体,允许程序运行时接收外部输入:

  • 运行 Java 程序时,通过空格分隔参数传递给args数组。
  • 若未传递参数,args为空数组(非null)。

示例:

复制代码
public class MainDemo {
    public static void main(String[] args) {
        System.out.println("参数个数:" + args.length);
        for (int i = 0; i < args.length; i++) {
            System.out.println("参数" + i + ":" + args[i]);
        }
    }
}

命令行运行:

复制代码
java MainDemo hello world 123

输出:

复制代码
参数个数:3
参数0:hello
参数1:world
参数2:123
(2)静态特性

main方法是静态的,因此:

  • 不能直接访问类的非静态成员(实例变量 / 方法),需先创建类的实例。
  • 可直接访问类的静态成员(静态变量 / 方法)。

示例:

复制代码
public class MainTest {
    private static String staticField = "静态变量";
    private String instanceField = "实例变量";

    public static void main(String[] args) {
        System.out.println(staticField); // 直接访问静态变量

        // System.out.println(instanceField); // 错误:不能直接访问实例变量
        MainTest obj = new MainTest();
        System.out.println(obj.instanceField); // 正确:通过实例访问
    }
}
(3)程序入口的唯一性

一个类中可以有多个重载的main方法,但只有public static void main(String[] args)会被 JVM 作为入口:

复制代码
public class MainOverload {
    // 程序入口
    public static void main(String[] args) {
        System.out.println("主入口main方法");
        main("hello"); // 调用重载的main方法
    }

    // 重载的main方法(非入口)
    public static void main(String arg) {
        System.out.println("重载的main方法:" + arg);
    }
}

3. 扩展用法

(1)main方法的继承

main方法可被继承,子类可直接使用父类的main方法作为入口,也可重写(实际是隐藏):

复制代码
public class Parent {
    public static void main(String[] args) {
        System.out.println("父类main方法");
    }
}

public class Child extends Parent {
    // 子类可直接运行Parent的main方法,也可重写
    public static void main(String[] args) {
        System.out.println("子类main方法");
    }
}

运行Child类时,执行子类的main方法;若子类无main方法,则执行父类的。

(2)模块化与main方法

在 Java 9 + 模块化中,需在module-info.java中声明包含main方法的类:

复制代码
module myModule {
    exports com.example;
    // 指定主类
    provides java.lang.module.MainClass with com.example.MainDemo;
}

4. 注意事项

  • 大小写敏感 :main必须小写,Main或MAIN都无法作为入口。
  • 参数类型 :必须是String[](或String... args,可变参数形式),其他类型(如int[])会导致 JVM 无法识别。
  • 异常处理 :main方法可声明抛出异常(如public static void main(String[] args) throws Exception),JVM 会处理未捕获的异常并终止程序。

总结

main方法是 Java 程序的启动入口,具有固定的语法格式和静态特性,通过String[] args接收命令行参数。理解其设计规范和特性,是编写 Java 程序的基础。

相关推荐
Pniubi1 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko71 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师1 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.1 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼2 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
gCode Teacher 格码致知2 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工2 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留3 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
撩得Android一次心动3 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
ShineWinsu3 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素