深入理解Java main方法
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,例如
- 方法的名字必须是main
- 方法必须是public static void 类型的
- 方法必须接收一个字符串数组的参数。
案例
// Java中的main()方法详解
public class HelloWorld {public static void main(String args[]) {System.out.println("Hello World!");}
}
HelloWorld 类中有main()方法,说明这是个java应用程序,通过JVM直接启动运行的程序。
问题1、main()方法为何被声明为public static?
这和JVM的运行有关系,当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用,因此需要是限制为public static。
此外对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。
、
问题2、main()方法入参
main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类细必须String[],至于字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和sun java规范范例中mian参数名保持一致,取名为args。
public class NewTest {public static void main(String args[]){for(int i = 0;i < args.length; i++){System.out.println("prinit:" +args[i]);}}
}
在idea运行main方法,会发现打印参数为空,原因是idea中启动这个类默认传空参
javac NewTest.java
java NewTest 1,2,3
结果
main()方法中可以throw Exception
public class TestMain { public static void main(String\[\] args) throws Exception { System.out.println("111"); throw new Exception(""); }
}
@Test单测方法和main方法区别
单测方法结束的时候会把里面的资源释放了,导致里面线程提前结束。main方法结束后其它的线程资源还能继续运行,案例如下,这是一个模拟ConcurrentModificationException异常的案例
main方法中会产生预期的报错
public static void main(String[] args) {Map<String,String> list = new HashMap<>();for (int i = 0; i < 30; i++) {new Thread(()->{list.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));System.out.println(list);},"t"+i).start();System.out.println(i);}}
test方法中不会出现预期报错
@Testpublic void test() throws InterruptedException {Map<String,String> list = new HashMap<>();for (int i = 0; i < 30; i++) {new Thread(()->{list.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));System.out.println(list);},"t"+i).start();}}
test方法中对应test线程,因为for循环中每次循环都会创建一个新线程并立刻启动了该线程,test线程进行for循环30次是个瞬时操作(1ms以内完成),而线程的创建+启动个人主机需要几百毫秒,没等线程的创建+启动,test线程就执行完了,而其余30个线程只能是释放资源然后方法结束;
所以,我们让test线程睡1000ms,给其它线程创建和运行的时间,这样就能复现这个exception了
@Testpublic void test() throws InterruptedException {Map<String,String> list = new HashMap<>();for (int i = 0; i < 30; i++) {new Thread(()->{list.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8));System.out.println(list);},"t"+i).start();System.out.println(111);}Thread.sleep(1000);}
结论:多线程测试不要在test测试方法中进行,需要在main中进行
深入理解Java main方法相关推荐
- main方法中args_public static void main(String [] args)– Java main方法
main方法中args public static void main(String[] args) is the most important Java method. When you start ...
- java main 方法使用 HttpClients发送请求 不打印debug日志
记录目的:java main 方法使用HttpClients发送请求不打印debug日志 记录背景: 使用java main方法测试接口响应时间 发现问题: 控制台打印巨多debug日志 解决方法: ...
- Java main方法
public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...
- Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法
public static void main(String[] args) {} 或者 public static void main(String args[]) {} main方法是我们学习Ja ...
- Maven exec:java 运行 Java main 方法
目录 前言 适用条件 方法1 遇到错误:[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.5.0:java (d ...
- 两种参数类型_深入理解Java中方法的参数传递机制
形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...
- java main方法里调用mapper
在main方法中调用mybatis的mapper,一次性执行导入数据功能package com.runxsoft.test;import com.runxsoft.iutils.common.util ...
- java main方法背后的故事?(转)
jvm java 看似一种语言,实则一个巨大的体系的王国,开发这么多年了,还是没有搞懂,我以为我懂了,可是过了一段时间又忘了,所以说还是没懂 1.main方法说起 编译完我们的java文件后,需要有个 ...
- Java main()方法
在 Java 中,main() 方法是 Java 应用程序的入口方法,程序在运行的时候,第一个执行的方法就是 main() 方法.main() 方法和其他的方法有很大的不同. 下面先来看最简单的一个 ...
最新文章
- 四字节对齐(DWORD-aligned)
- Flutter入门:application、module、package、plugin
- 迁移到 Centos 7 遇到的一些常见问题
- 北大助理教授献给「后浪」的建议:奔涌吧,深度学习!
- 基于SSM的理财系统
- paip.提升安全性---防止敏感文件被下载
- HBase: 看上去很美
- 保活 进程唤醒_Android 8.0以上系统应用如何保活
- linux系统手柄模拟器下载,MotioninJoy
- 适用于dev中c语言的图形库,Dev-C++中使用EGE图形库
- 深度学习面试100题
- android5.0 输入法提取,搜狗手机输入法5.0 Android新版使用体验
- 511遇见易语言文本处理寻找文本
- Fater-RCNN
- python中key=lambda_排序后的语法(key=lambda:…)
- 手机上将png转pdf_如何在Linux上将多个jpg图像合并为pdf?
- NOI:253 丛林里的路
- 计算机视觉实习生面试经验(微软/腾讯(AI Lab优图)/阿里巴巴)
- Windows10 锁屏界面黑屏,无法显示图片——解决方法
- LSP(Layered Service Provider)入门的基础知识概念