Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法

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

或者

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

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方法:

根据Java语言规范,main方法必须声明为public。但是在JavaSE1.4以前的版本中,当main方法不是public时,有些版本的Java解释器也可以执行Java应用程序。当时SUN公司的工程师解释说,Java虚拟机规范并没有要求main方法一定是public。以上只是写出来,丰富一下兴趣。如果有人说Java main方法从来只能用public,那样说实际上还是错的,因为以前出过这么个BUG。但是在1.4版本之后main方法已经被强制成了public,所以现在我们看到的main方法只能是public。

public是一种访问权限修饰符,public中文翻译共有,正如它的实际意思一样,在Java里面所有被public修饰的方法,类等都可以在任意其他地方调用。main方法之所以是public,是因为一个Java程序在运行时首先创建一个JVM实例,程序要运行需要调用main方法,JVM从外部调用main方法这就需要访问权限修饰符必须给出外部访问的权限,所以只能用public。

static的定义是为了JVM在调用main方法时不用实例化对象,只需要在初始时加载main方法所在类,然后直接通过类名.main来调用main方法。

void表示main方法没有返回值,没有返回值的原因是因为Java不需要main方法向操作系统返回退出信息。如果main方法正常退出,那么Java应用层序的退出代码为0,表示成功的运行了程序。

main的名称不能变是为了JVM能够识别程序运行的起点,main方法可以被重载,重载的main方法不会被执行。main方法作为程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程,非守护线程和守护线程,main方法属于非守护线程,守护线程通常由JVM自己使用,Java程序也可以表明自己的线程是守护线程。当程序中所有的非守护线程终止时,JVM退出。也可以用Runtime类或者System.exit()来退出。

String[] args,是main方法中唯一可以改变的地方!args是arguments的缩写,只是一个变量默认名,习惯性写作它,但是也可以改变的,只要符合命名规则随便你写成什么。在使用集成开发工具的今天,String[] args更像是一种摆设了,很多初学者都不知道它的作用,其实它是程序运行传入的一个参数组。一个简单的例子:

用文本工具如下代码并将其保存为Test.java

public class	Test{public static void main(String[] args){System.out.println("获取数组args[]的数据");for(int i=0;i<args.length;i++){System.out.println(args[i]);}}
}

以管理员身份运行CMD,因为我的Test.java是直接保存在F盘中的,输入f:跳转到目录,输入Javac Test.java将其编译为Test.class文件
在这里插入图片描述

然后输入java Test 5 4 3 2 f xx,获取输出数据
在这里插入图片描述

Java中所有方法的代码都是从“{”开始,以“}”结束。

三大特点 ---- 介绍

1、main() 作为程序的入口
2、mian() 方法也是一个普通的静态方法
3、main() 方法也可以作为我们与控制台的交互方式,原来用Scanner

1、main() 作为程序的入口

运行程序都会找到main方法后,在该文件下运行程序

2、mian() 方法也是一个普通的静态方法

main方法是用static定义的静态方法,所以具有静态方法的特征

  • main静态方法只能调用静态的属性,所以在使用的时候一般会先声明一个对象,用对象调用属性/方法
public class MainTest {public static void main(String[] args) {// 入口// 1.1 正确的示范,调用一个非静态方法时,需要先创建一个对象,用对象去调用MainTest a = new MainTest();a.show1();// 1.2 错误的示范,不能直接输入方法//show1(); // java: 无法从静态上下文中引用非静态 方法 show1()// 2.1 如果是想调用静态的属性和方法,不用先创建一个对象show(); // 输出:show 方法}public void show1(){System.out.println("非静态方法");}public static void show(){System.out.println("show 方法");}}

3、main() 方法也可以作为我们与控制台的交互方式(原来用Scanner),输入的数据传入main方法形参String[] args

了解即可

解释Java中的main方法,及其作用

1、main方法中的"String[] args",有什么作用?

  • 分析以下:谁负责调用main方法(JVM)
  • JVM调用main方法的时候,会自动传一个String[]数组过来*
public static void main(String[] args) {
// JVM默认传递过来的这个数组的长度为?--->默认0
// 通过测试得出 args不是nullSystem.out.println("String[] args"+"数组的长度="+args.length); // 0// 遍历"String[] args"数组for(int i = 0;i < args.length;i ++){System.out.println(args[i]);}
}

那这样子为什么要设计"String[] args"数组呢?
那么这个数组什么时候会有值呢?

// 其实这个数组是留给用户的,用户在控制台上输入参数,这个参数会自动转换 为"String[] args"
// 例如这样运行程序:Java MainTest abc def xyz
// 那么这个时候jvm会自动将abc def xyz通过空格进行分离,分离完成后,会自动放到"String[] args"数组中
// 所以,main方法中的"String[] args"数组主要是接受用户输入的参数
// 把abc def xyz转换为字符串数组:{“abc”,“def”,“xyz”}

用cmd编译则:
在这里插入图片描述
这个有什么用呢?
例如,可以模拟一个系统,必须使用用户名和密码,并假设用户名为admin,密码为123则:

public static void main(String[] args) {if (args.length != 2){System.out.println("使用系统时请输入程序参数,参数中包含用户和密码信息,例如:张三 123");return;}String userName = args[0];String password = args[1];// 假设userName为admin,密码为123if ("admin".equals(userName)&&"123".equals(password)){System.out.println("欢迎"+"["+userName+"]"+"回家");}else{System.out.println("验证失败用户不存在或密码错误");}
}

放入cmd中运行
在这里插入图片描述

一个java文件中可包含多个main方法

java中的main方法是java应用程序的入口,java程序在运行时,首先调用执行main方法。但并不是说java中只能有一个main方法,不同类中都可以包含main方法。当JVM进行编译时,会提示选择其中一个main方法作为编译的入口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA---jdk1.8之后的接口(接口中定义默认方法和静态方法,私有方法)

JAVA—jdk1.8之后的接口(接口中定义默认方法和静态方法) 从jdk1.8开始&#xff0c;接口里允许定义默认方法 格式&#xff1a;public default 返回值类型 方法名(参数列表){ 方法体 } public interface Demo1 {public default void method2(){System.out.println("Hello…

node 后台重定向_登录后重定向到用户原本要访问的页面《 Node.js 应用:重构与改进 #3 》...

现在我是未登录的状态 ... 可以先试着打开一个内容的编辑界面 ... 会被重定向到登录页面 ... 输入用户名 ... 密码 .. 确认登录 ... 成功以后会把用户重定向到这个用户页面上 ... 现在我想用户登录以后&#xff0c;可以把他重定向到他原本要访问的页面 ..回到项目 .. 打开 hook…

端口号被占用:Disconnected from the target VM, address: ‘127.0.0.1:XXXX‘, transport: ‘socket‘

debug启动Spring boot项目的时候&#xff0c;项目没有启动起来。log最后一行&#xff0c;显示Disconnected from the target VM, address: ‘127.0.0.1:XXXX’, transport: ‘socket’。 解决方式&#xff01;&#xff01;&#xff01; 1、看看是谁占用了我的端口号&#xff…

mysql截取字符串去重_mysql 截取字符串 去重 拼接

1&#xff1a;字符串截取LEFT(guid_,LENGTH(guid_) - 5)//1001-1002-1003 截取为 1001-10022&#xff1a;判断是否存在某字符串中IN(1001,1002,1003)// where id in(xxxx) 可以用查询的某个字段直接 where id in (select id from xxxx)3&#xff1a;根据某个字段去重复在查询结…

Linux系统tab自动补全快捷键的时候显示cannot create temp file for here-document: No space left on device解决方案

登陆linux系统之后&#xff0c;使用tab自动补全快捷键的时候显示&#xff1a;cannot create temp file for here-document: No space left on device。 原因&#xff1a;磁盘满了&#xff0c;不能创建临时文件。 解决方法&#xff1a;&#xff08;逐级查看占用空间过多的目录…

python画二维数组散点图_2个numpy二维数组的散点图

IIUC,你不需要zip步骤:s (arr1.ravel(), arr2.ravel())plt.scatter(*s)plt.show()或者,你也可以通过策划arr1和arr2:plt.scatter(arr1, arr2)plt.show()原因是,通过压缩,可以创建许多坐标元组:>>> list(zip(*s))[(0.5233576831070681, 0.3622905772322086), (0.67714…

双表联查mysql_MySQL的双表多表联查

最近在做EC-Mall的二次开发&#xff0c;遇到这么一个需求&#xff0c;将挂件单独显示成一个页面。由于EC-Mall的挂件是用数据模块模块类库的方式进行的&#xff0c;就是使用类似smarty的形式。而单独一个页面的话&#xff0c;数据读取需要自己写SQL语句。 现在的问题是&#xf…

Linux命令——echo追加和覆盖

追加&#xff1a; echo " " >> 文件名覆盖&#xff1a; echo " " > 文件名ximong:~$ cat aa.sh #打印文件aa中原来的内容,显示aa aaximong:~$ echo bb >> aa.sh #  在文本末尾追加 ximong:~$ cat aa.sh aa bbximong:~$ echo cc >aa.sh…

如何安装mysql 匹配_学习笔记----安装MySQL

安装MySQL1.下载解压源代码包。我的是mysql 5.1.48版本的。2.添加mysql用户和组[roottigertall mysql-5.1.48]#groupadd mysql[roottigertall mysql-5.1.48]#useradd -g mysql mysq3.编译安装[roottigertall mysql-5.1.48]# ./configure --enable-assembler \--with-client-l…

Linux中的通配符

Linux中的通配符 Linux中的通配符 *匹配任意长度的任意字符&#xff0c;可以没有?匹配任意单个字符&#xff0c;至少有1个[ ]匹配指定字符范围内的任意单个字符[a-z,A-Z,0-9]匹配所有数字和字母[a-z]匹配a-z中的一个[A-Z]匹配A-Z中的一个[a-Z]匹配所有大小写字母[:upper:]所…

mysql区间段_解决针对MySQL中对于某一个区间段范围的数据更新的情况

(1)在使用更新update的过程中&#xff0c;我们可能会想要更新比如id段在某一个指定范围内的数据&#xff0c;如果我们是想要更新前面多少行的数据的话可以直接&#xff1a;UPDATE tb_name SET column_name‘value‘ ORDER BY id ASC LIMIT 20;比如我想要把下面的这个员工信息表…

SpringBoot实现执行sql语句打印到控制台

SpringBoot实现执行sql语句打印到控制台 1.简介 每当写完持久化语句时肯定免不了要查漏补缺一波。这里就可以将执行的sql打印到控制台来检查sql语句哪里出了问题。 2.配置 配置非常简单&#xff0c;只需要在配置文件中设置下mapper日志级别就可以了 application-test.prop…

Java 8 lamda Stream的Collectors.toMap 参数

java 8 lamda Stream的Collectors.toMap 参数 使用toMap()函数之后&#xff0c;返回的就是一个Map了&#xff0c;自然会需要key和value。 toMap()的第一个参数就是用来生成key值的&#xff0c;第二个参数就是用来生成value值的。 第三个参数用在key值冲突的情况下&#xff1a;…

Java8中的Collectors.groupingBy用法

Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组 数据准备&#xff1a; public Product(Long id, Integer num, BigDecimal price, String name, String category) {this.id id;this.num num;this.price price;this.name name;this.category category; …

什么是CDN,有何作用?

cdn顾名思义是一个英文缩写&#xff0c;全称是contentdeliverynetwork&#xff08;内容分发网络&#xff09;&#xff0c;即服务商通过在世界各地部署大量服务器节点&#xff0c;缓存源站静态资源&#xff08;目标服务器&#xff09;&#xff0c;当用户访问时返回最优线路的资源…

BigDecimal中divide(除)方法注意问题_BigDecimal 判断大于小于

BigDecimal中divide方法抛异常: Non-terminating decimal expansion; no exact representable decimal resultIdea也会给出警告 原因是在做除法的时候出现了无限不循环小数如&#xff1a;33.333333333333 解决方案 在做除法的时候指定保留的小数的位数: BigDecimal rate …

python 字符串操作速度_强者一出,谁与争锋?与Python相比,C+的运行速度究竟有多快?|python|编程语言|字符串|示例|算法...

对于数据科学家而言&#xff0c;热爱Python的理由数不胜数。但你是否也曾问过这样的问题&#xff1a;Python和C或C等更专业的低级编程语言究竟有何不同呢?我想这是很多数据科学家或者Python用户曾经问过或者将来会问自己的问题。Python和C类语言之间存在许多区别&#xff0c;本…

Maven私有仓库、上传jar包、引用私服jar包、上传本地项目到私服_将已有jar包部署到私服

Maven私有仓库、上传jar包、引用私服jar包、上传本地项目到私服 搭建私有服务器 前面已经说过了&#xff0c;我们使用Maven的使用&#xff0c;如果需要导入相对应的jar包&#xff0c;Maven首先会在我们的本地仓库中寻找—>私有仓库—>中心仓库… 然而&#xff0c;我们…

java水泡_JAVA图像处理系列(八)——艺术效果:水泡

艺术效果水泡通过对图像进行变形或叠加其他图片&#xff0c;能够实现许多有趣的艺术效果&#xff0c;本文介绍类似水泡效果的实现方式&#xff0c;下面先看一下实现的效果。第一张为原始图像&#xff0c;第二张为叠加水泡效果的图像。cat.jpgcat_belb.jpg算法原理图像中的水泡效…

SpringBoot中调用第三方接口的三种方式

使用SpringBoot跨系统调用接口的方案 一、简介 项目开发中存在系统之间互调问题&#xff0c;又不想用dubbo&#xff0c;这里提供几种SpringBoot方案&#xff1a; 1、使用Feign进行消费&#xff08;推荐&#xff09; 2、使用原始httpClient请求 3、使用RestTemplate方法 二…