【Java面试手册-基础篇】Java中能否声明main()方法为非静态方法?

答案是否定的,main()方法必须声明为静态的,这样JVM才可以调用 main() 方法而无需先实例化它的类。

因为main是程序的入口方法,所以当程序运行时,第一个执行的方法就是main()方法。通常来讲,要执行一个类的方法,先必须实例化一个类的对象,然后通过对象来调用这个方法。但由于main是程序的入口方法,此时还没有实例化对象,因此在编写main()方法时就要求不需要实例化对象就可以调用这个方法,鉴于此,main()方法需要被定义成public与static。

如果从main()方法去掉 static 这个声明,虽然编译依然可以成功,但在运行时会导致程序失败,比如下面的程序:

package com.magic.main;

public class MainDemo {

    public void main(String[] args) {
        System.out.println("Hello World");
    }

}

(1)先使用 javac MainDemo.java 命令进行编译,会得到 MainDemo.class 文件;

(2)再使用 java MainDemo.class 命令运行,会看到输出如下的错误

错误: 找不到或无法加载主类 MainDemo.class

从上可以看出,如果去掉 main() 方法的 static 声明,虽然编译是成功的,但是无法运行!

同理,如果去掉 public 修饰符,或者将其修改成 private 或 protected,都是无法运行的。

更多有关Java面试相关的知识点可以关注【Java面试手册】小程序,涉及Java基础、多线程、JVM、Spring、Spring Boot、Spring Cloud、Mybatis、Redis、数据库、数据结构与算法等。

【Java面试手册-基础篇】Java中能否声明main()方法为非静态方法?

Original: https://www.cnblogs.com/javatop/p/16520788.html
Author: 然笑后端
Title: 【Java面试手册-基础篇】Java中能否声明main()方法为非静态方法?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586436/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring Cloud GateWay 简单示例

    前提:提供一个注册中心,可以使用Eureka Server。供gateway转发请求时获取服务实例。 一、新建GateWay项目 1、引入maven依赖 org.springfra…

    Java 2023年5月30日
    065
  • 【每日算法】二分查找法

    模板 例题 367. 有效的完全平方数 描述 示例1 示例2 提示 思路 代码 69.x的平方根 描述 示例1 示例2 提示 代码 模板 left,right=1,n while …

    Java 2023年6月9日
    087
  • java的定时器

    定时器其实就是一个线程 可以在线程中用暂定实现,也可以用以下方法 // 定义一个&#…

    Java 2023年6月13日
    067
  • BP神经网络– 基本模型

    BP 神经网络中的 BP 为 Back Propagation 的简写,最早它是由Rumelhart、McCelland等科学家于 1986 年提出来的,Rumelhart 并在N…

    Java 2023年6月15日
    076
  • 【碎】@Value 注解

    注意lombok和spring posted @2022-09-16 14:12 HypoPine 阅读(6 ) 评论() 编辑 Original: https://www.cnb…

    Java 2023年6月15日
    079
  • 微服务SpringCloud之服务注册与发现

    在找.net core 微服务框架时发现了Steeltoe开源项目,它可以基于Spring Cloud实现.net core和.net Framework的微服务。正好之前也有学习…

    Java 2023年5月30日
    081
  • nginx+tomcat 架构 HttpServletRequest.getScheme()获取正确的协议

    问题:通过浏览器输入https://www.mysite.com,后台通过request.getScheme()获取到的确实http而不是https 通过request.getRe…

    Java 2023年5月30日
    074
  • java 多线程

    *线程的状态:New、Runnable、Blocked、Waiting、Timed waiting、Terminated new Thread()——> New、 start…

    Java 2023年6月16日
    083
  • mysql 的 Buffer Pool、redo log、undo log、Binlog

    缓冲池 Buffer Pool 首先,对于 InnoDB 存储引擎来说,数据都是放在磁盘上的,存储引擎要操作数据,必须先把磁盘里面的数据加载到内存里面才可以操作。 磁盘 I/O 的…

    Java 2023年6月5日
    063
  • SpringBoot整合redis缓存(一)

    准备工作 1.Linux系统 2.安装redis(也可以安装docker,然后再docker中装redis,本文章就直接用Linux安装redis做演示) redis下载地址:ht…

    Java 2023年6月7日
    089
  • Kubernetes-Daemonset

    1. 简介 DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会…

    Java 2023年6月7日
    078
  • Spring配置 bean

    在 xml 文件中通过 bean 节点来配置 beanid:Bean 的名称。在 IOC 容器中必须是唯一的若 id 没有指定,Spring 自动将权限定性类名作为 Bean 的名…

    Java 2023年5月30日
    091
  • Elasticsearch 分片集群原理、搭建、与SpringBoot整合

    单机es可以用,没毛病,但是有一点我们需要去注意,就是高可用是需要关注的,一般我们可以把es搭建成集群,2台以上就能成为es集群了。集群不仅可以实现高可用,也能实现海量数据存储的横…

    Java 2023年6月13日
    090
  • JAVA_基础篇(1)_JDK 8 的下载、安装与配置

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月15日
    053
  • Java Excel 文件导出导入

    1 import com.fasterxml.jackson.databind.exc.InvalidFormatException; 2 import com.sensetime…

    Java 2023年5月29日
    062
  • Spring(一):简介

    一、什么是Spring 广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。 经过十多年的发展,Spring 已经不再是一个单纯的应用…

    Java 2023年6月15日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球