在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

时间:2022-02-19 01:37:10

一、背景

  最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法。

二、测试过程

 1.父类代码

 package com.hafiz.zhang;

 public class Fu
{
private Integer i ; public void sayHello(String name) {
System.out.println("Hello " + name);
}
}

  2.子类代码

 package com.hafiz.zhang;

 public class Zi extends Fu
{
private static String name = "Hafiz.Zhang";
public static void main(String[] args) {
new Zi().sayHello(name);
}
}

1)第一次直接在基类和子类所在的目录运行javac Zi.java命令,出现以下错误:

在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

解决办法为:我们需要使用javac *.java命令来进行运行,因为此时存在继承关系,编译子类的同时也需要先编译父类

2)运行java Zi命令,出现以下错误

在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

这是什么原因呢?因为我们在编写程序时用到了包名,所以运行类文件时,需要完整名称,命令修改为:java com.hafiz.zhang.Zi

我们会发现出现以下错误

在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

这是因为我们不存在子文件夹com/hafiz/zhang并且在该子文件夹下不存在Zi.class文件,故找不到主类。

解决办法是:使用javac  -d . *.java("-d ."代表在当前目录下创建包路径)命令来进行编译,这样javac命令会自动帮我们创建包名所指定的文件夹,并在该文件夹下创建Zi.class文件。

在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

此时我们还发现,已经自动生成子文件夹com/hafiz/zhang并且在该子文件夹下存在Zi.class文件了。

在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

这时我们再运行:java com.hafiz.zhang.Zi命令,程序执行成功!

在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

由此我们得出了在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类的方式:

1.使用javac -d . *.java进行编译

2.使用java com.hafiz.Zi(带包名的类全名)命令进行运行!