IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 深入理解Java main方法 -> 正文阅读

[开发工具]深入理解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方法中不会出现预期报错

@Test
    public 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了

 @Test
    public 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中进行

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:03:22  更:2022-04-18 18:05:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:48:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码