记一次java命令执行IDE中java类的入口函数的坑

简介: 熟悉java的同学都知道,我们可以直接通过`java命令`执行Java类的`入口函数`,执行时还可以携带参数,参数是以`字符串数组`的形式传递给main入口函数的。不过现在已经很少使用这种方式执行java代码了,都是通过IDE来执行。

熟悉java的同学都知道,我们可以直接通过java命令执行Java类的入口函数,执行时还可以携带参数,参数是以字符串数组的形式传递给main入口函数的。

不过现在已经很少使用这种方式执行java代码了,都是通过IDE来执行。比如下面这个测试类,

package com.tinytongtong.androidstudy.java.cachepool;

public class JavaMainTest {
    public static void main(String[] args) {
        for (String item: args) {
            System.out.println(item);
        }
    }
}

比如在Android Studio中,我们最少有两种非命令行的方式来执行它,比如说右键java类 --> 选择Run 'ClassName.main()':

也可以直接点击main方法左侧的绿色箭头直接运行:

一般的测试用例啥的这个都可以满足,但是如果我们需要在执行main方式时携带一些参数进去(比如说jar的执行支持参数配置),这个方式就不太方便了,还是需要java命令行的方式进行测试。

我们先进入到当前类所在的目录下,再执行java命令,于是乎二话不说,javac XXX.javajava XXX 命令搞起来,然后?然后就当头一盆冷水浇在头上,你会遇到下面的错误:

你去网上搜索Error: Could not find or load main class JavaMainTest,基本上都是说你需要配置Java环境变量的,或者说你的文件名称不对大小写不对,再或者说你的文件路径不对的。

Java环境变量检查了没问题,通过java -version查看结果如下:

文件名称是通过提示自动生成的,也不会出错。

文件路径,我都进入到当前文件目录下了,怎么会出错?

后面百思不得其解,只有求教后台大佬,大佬看了眼跟我说,你的Java类有问题。

具体来说就是代码里的package com.tinytongtong.androidstudy.java.cachepool;这句,在通过java命令执行入口函数的时候,它会从当前目录开始,去这个包下找对应的类,但由于你当前已经在这个目录下了,再往下顺着这个路径找,必然是找不到的,肯定会报错。

所以还是路径的问题。怎么解决呢?你执行的路径应该是package的父目录,对于我来说,具体如下:

图中的1、2、3、4、5对应的就是JavaMainTest这个类的package路径。

所以我到java这个目录下执行这个java类就是可以的:

说到底,还是执行路径的问题

相关文章
|
2天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
3天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
6天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
6天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
10 0
|
8天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
9天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
9天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类
|
11天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
19 4
|
12天前
|
Java
在Java中,多态性允许不同类的对象对同一消息做出响应
【4月更文挑战第7天】在Java中,多态性允许不同类的对象对同一消息做出响应
17 2
|
16天前
|
Java
Java通过反射获取类调用方法
Java通过反射获取类调用方法
18 0