前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >main方法可以重载吗?可以被其他方法调用吗?可以继承吗?

main方法可以重载吗?可以被其他方法调用吗?可以继承吗?

作者头像
4xx.me
发布于 2022-06-10 10:39:55
发布于 2022-06-10 10:39:55
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

我们一开始学习 Java 程序的时候,最先跑的一段代码肯定是 main 方法,那么 main 方法有什么特殊的地方呢?今天我们来简单看一下

main 方法的格式如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {

}

首先针对 main 方法的格式定义:

  • 「public」 :main 方法是启动的时候由 JVM 进行加载的,public 的可访问权限是最高的,所以需要声明为 public;
  • 「static」 :方法的调用要么是通过对象,要么是通过类,而 main 方法的话因为是由虚拟机调用的,所以无需生成对象,那么声明为 static 即可;
  • 「main」 :至于为什么方法名称叫 main,我想应该是参考的是 C 语言的方法名吧;
  • 「void」 :main 方法退出时,并没有需要有相关返回值需要返回,所以是 void;
  • 「String[]」 :此字符串数组用来运行时接受用户输入的参数;因为字符串在 Java 中是具有通用普遍性的,所以使用字符串是最优选择;数组的话,因为我们的参数不止一个,所以数组肯定是合适的;

不过自 JDK1.5 引入动态参数后,String[]数组也可以使用String... args来实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String... args){

}

除了上面 JVM 规定的这个 main 方法比较特殊外,其他的 main 方法与普通的静态方法是没有什么不同的。

main方法可以重载吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Main {
    public static void main(String args) {
        System.out.println("hello world:" + args);
    }

    public static void main(String[] args) {
        main("test");
    }
}

编译运行,很显然没啥问题,除了 JVM 规定的作为应用程序入口的 main 方法之外,其他的 main 方法都是比较普通的方法。 所以,main方法可以重载

main方法可以被其他方法调用吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Main {
    private static int times = 3;

    public static void main2(String[] args) {
        times--;
        main(args);
    }

    public static void main(String[] args) {
        System.out.println("main方法执行:" + times);
        if (times <= 0) {
            System.exit(0);
        }
        main2(args);
    }
}

运行一下代码,可以发现代码能正常执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main方法执行:3
main方法执行:2
main方法执行:1
main方法执行:0

所以说即使是作为应用程序入口的 main 方法,也是可以被其他方法调用的,但要注意程序的关闭方式,别陷入死循环了。

main方法可以继承吗?

我们以前了解过,当类继承时,子类可以继承父类的方法和变量,那么当父类定义了 main 方法,而子类没有 main 方法时,能继承父类的 main 方法,从而正常的运行程序吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Main {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

定义子类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Main2 extends Main {
}

这时候我们运行子类 Main2,可以发现,同样打印了hello world,这说明 main 方法也是可以继承的。那么还有一种隐藏的情况也很显然了,子类定义自己的 main 方法,隐藏掉父类中的实现,那么这也是可以的。

修改Main2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Main2 extends Main {
    public static void main(String [] args) {
        System.out.println("hello world Main2");
    }
}

这时候就会打印子类自己的内容了:hello world Main2

这么来看,除了main方法作为应用程序的入口比较特殊外,其他情况下与正常的静态方法是没什么区别的。

参考链接:https://mp.weixin.qq.com/s/ypgWSwyLkLIPrkuUfXfYrw

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
main方法的各种书写样式
1、main()方法是Java应用程序的入口点,每个Java应用程序都是从main()方法开始运行的。作为程序入口的main()方法必须同时符合以下几个条件:
全栈程序员站长
2022/09/02
6120
main方法的各种书写样式
Java-方法调用的各种分类和大总结
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
Fisherman渔夫
2019/07/31
1.7K0
Java-方法调用的各种分类和大总结
深入理解 Java 方法
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。
静默虚空
2022/03/23
3190
深入理解 Java 方法
Java面试之Java基础知识第一季
因为这个方法是Java程序的入口方法,JVM在运行程序的时候,会先查找main方法,其中public是权限修饰符,表明任何类和对象都可以访问这个方法,static表明main是一个静态方法,即,方法中的代码是保存在在静态保存区域中的,只要类被加载后,就可以使用该方法,而不需要通过实例化访问,可以直接通过类名,main直接访问,JVM在启动的时候,将会按照上述方法的签名,来查找方法的入口地址,若能找到就执行,找不到,则会报错。void 表明方法没有返回值,main是jvm识别的特殊方法名,是程序入口的方法,字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段。
mySoul
2020/06/27
3890
方法调用:一看就懂,一问就懵?
首先大家要明确一个概念,此处的方法调用并不是方法中的代码被执行,而是要确定被调用方法的版本,即最终会调用哪一个方法。
用户8639654
2021/07/30
3920
Java基础-08(01)总结帮助文档,代码块,继承
1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.jav
Java帮帮
2018/03/15
8330
Java基础-08(01)总结帮助文档,代码块,继承
10个经典的 Java main 方法面试题
在Java 7之前,你可以通过使用静态初始化运行Java类。但是,从Java 7开始就行不通了。
哲洛不闹
2018/09/18
6560
【Java核心面试宝典】Day7、面向对象常见面试题汇总(二)
上一篇文章和大家分享在面向对象方面的一些常见面试题,但是比较多就只分享了在构造方法和静态实例方面的题目,今天就继续来和大家总结剩下的面试题。
灰小猿
2021/09/23
1970
JAVA JVM类加载过程的学习
学习资料链接:https://www.bilibili.com/video/av30023103/
逆回十六夜
2019/09/12
4700
Java对象和多态
对象基于类创建,类相当于一个模板,对象就是根据模板创建出来的实体(就像做月饼,我们要做一个月饼首先需要一个模具,模具就是我们的类,而做出来的月饼,就是类的实现,也叫做对象),类是抽象的数据类型,并不能代表某一个具体的事物,类是对象的一个模板。类具有自己的属性,包括成员变量、成员方法等,我们可以调用类的成员方法来让类进行一些操作。
程序员Leo
2023/08/02
3150
Java对象和多态
java内部类以及为什么要用public static void修饰main()函数,String args[]是什么?(浅显的一些探索)
成员内部类就是定义在一个类的内部,其实是相当于成员变量的位置。 下面这两种其实都可以被称为成员内部类的,只不过一般static修饰的这种我们一般也可以称之为静态内部类。我们先来研究成员内部类(也可以称之为非静态内部类)怎么定义的话合理即可,明白意思就可以了。
兰舟千帆
2022/07/16
2680
java内部类以及为什么要用public static void修饰main()函数,String args[]是什么?(浅显的一些探索)
Java中的方法调用分析!详细解析静态分派和动态分派的执行过程
方法调用 在程序运行时,进行方法调用是最普遍,最频繁的操作 方法调用不等于方法执行: 方法调用阶段唯一的任务就是确定被调用的方法版本,即调用哪一个方法 不涉及方法内部的具体运行过程 Class文件的编译过程不包括传统编译中的连接步骤 Class文件中的一切方法调用在Class文件里面存储的都是符号引用,而不是方法在在实际运行时内存布局中的入口地址,即之前的直接引用: 这样使得Java具有更强大的动态扩展能力 同时也使得Java方法调用过程变得相对复杂 需要在类加载期间,甚至会到运行期间才能确定目标方法的
攻城狮Chova
2022/01/22
7420
深入浅出JVM(五)之Java中方法调用
本篇文章将围绕Java中方法的调用,深入浅出的说明方法调用的指令、解析调用以及分派调用等
菜菜的后端私房菜
2024/10/08
1580
全面理解Java中继承关系
继承是面向对象思想的三大特性之一,使类与类之间产生特殊 - 一般的关系,即is-a关系。继承是从已有类中派生出新的类,新的类能吸收已有类的属性和方法,并且能拓展新的属性和行为。在Java中使用extends关键字表示继承,语法表示为: class 子类 extends 父类{}子类被称为派生类,父类又被称为超类。子类继承父类,表名子类是一种特殊的父类,子类拥有父类的属性和方法,并且子类可以拓展具有父类所没有的一些属性和方法。子类即是不扩展父类,也能维持拥有父类的操作。
用户7886150
2021/01/30
1.6K0
main方法详解
学习Java有一段时间了,一直没用过博客来写写自己在学习过程中遇到的问题和学习心得,看到别人在诸如博客这样的社区写一些总结觉得挺好的。索性,今天开始自己也用起博客记录学习。一来呢,能更好的总结学习知识。二来,有问题更有机会让别人指出,对自己学习也很有帮助。话不多说,就以main方法详解开始今天的主题吧。
全栈程序员站长
2022/09/04
5220
main方法详解
揭秘Java方法的返回值,从void到诸多数据类型,有两下子!
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
bug菌
2024/06/25
5340
揭秘Java方法的返回值,从void到诸多数据类型,有两下子!
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑
各位小伙伴大家好,我是A哥。如果问:Java的三大特性是什么?你顺口就能答出:封装、继承、多态。如果继续问:你真的了解Java中的继承吗?
YourBatman
2022/05/06
1K0
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑
Spring杂谈 | 从桥接方法到JVM方法调用
这些代码对我之前也造成了不小疑惑,在彻底弄懂后通过本文分享出来,也能减少大家在阅读代码过程中的障碍!
程序员DMZ
2020/07/06
1.6K0
Java中main方法详解
Java中的main方法,是一个java应用程序的入口,无论一个java的应用多么复杂庞大,或是多么的小,只要他是一个可以运行的java程序那么必然就要有一个main方法。main方法的定义格式通常固定如下:
葆宁
2019/04/19
1.8K0
Java main方法
main方法是我们学习Java语言学习的第一个方法,也是每个java使用者最熟悉的方法,每个Java应用程序都必须有且仅有一个main方法。在eclipse里可以使用输入main,在按住Alt+/的方式快速创建main方法。可以说main方法是最简单的方法,因为main方法几乎是固定不变得,除了String[] args可以写成String args[],以及args的名称可以改变外,其它所有均不改变。main方法也是特殊的,因为它的类型必须是public static void,甚至名字都必须是main,还有括号内的参数String[] args,很多初学者都不知道它的作用。正是这种简单而特殊的性质,往往容易让人对它产生忽视以及疑惑。下面就详细谈谈java main方法:
全栈程序员站长
2022/09/05
7320
Java main方法
相关推荐
main方法的各种书写样式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验