当前位置: 首页 > 面试题库 >

软件包名称与文件夹结构不同,但仍会编译Java代码

殳宸
2023-03-14
问题内容

我正在使用Notepad ++编写我的Java代码,并使用命令提示符来编译和运行它。以下是我的示例Java代码,

    package abraKadabra;

    public class SuperClass{
       protected int anInstance;

       public static void main(String [] abc){
           System.out.println("Hello");
       }
    }

但是,此文件具有以下文件夹结构:

“ usingprotected \ superPkg”(usingProtected是C中层次结构中某个位置的文件夹:)

因此,这里的包名称应该类似于usingProtected.superPkg,而不是我写的abraKadabra。

但是,当我从命令提示符下编译此Java代码时,它编译良好,没有任何错误或警告。为什么会这样呢?软件包名称不应该遵循文件夹结构吗?如果应该,它将如何坚持下去?

例如,如果我的包名称正在使用Protected.superPkg,则编译器将按相反顺序进行检查。当前的工作目录应为superPkg,然后父目录应为usingProtected并且已完成。用包名检查文件夹结构吗?


问题答案:

经过一些试验后,我获得了如何使用包名称以及如何从命令提示符下运行Java类文件的方法。

假设以下是我的Java源文件:

    package mySample;


    public abstract class Sample{
        public static void main(String... a){
           System.out.println("Hello ambiguity");
        }
    }

该文件位于目录“ D:\ Code N Code \ CommandLine”中。

现在,当使用以下命令编译源代码时(通过从cmd转到以上目录):

    javac -d . Sample.java

这将在当前目录中自动创建“ mySample”文件夹。因此,我的类文件Sample.class存在于目录“ D:\ Code N Code \
CommandLine \ mySample”中。编译器根据我在源代码中提供的程序包名称创建了这个新文件夹“ mySample”。

因此,如果我给我的包名称是“ package com.mySample”,则编译器将创建两个目录并将我的类文件放置在“ D:\ Code N Code \
CommandLine \ com \ mySample”中。

现在,我仍位于当前的工作目录中,即“ D:\ Code N Code \ CommandLine”中。为了运行我的类文件,我给出以下命令:

    java mySample.Sample

因此,我给出了程序包的完整层次结构,然后给出了类名。Java解释器将在当前目录中搜索“ mySample”目录,并在该目录中搜索“
Sample.class”。它正确并成功运行它。:)

现在,当我询问为什么要编译错误的程序包源代码时,虽然可以成功编译代码,但是当我运行类文件时却给出了NoClassDefFoundError。因此,以上方法可用于从命令行使用程序包名称。



 类似资料:
  • 问题内容: 我想知道在Eclipse IDE中用于Java EE开发的文件夹结构和包之间有什么区别。 我们什么时候使用哪个,为什么? 应该怎么做 创建一个像src / com / utils这样的文件夹结构,然后在其中创建一个类 创建一个像src.com.util这样的包,然后在其中创建一个类 如果我以后必须编写一个ant脚本进行部署,哪个选项会更好,更容易部署? 如果我要使用文件夹结构,那么部署

  • 问题内容: 我正在尝试仅将原始文件从一个目录复制到另一个目录,但是某些文件具有相同的名称…我正在尝试使用哈希来比较文件,如果其不在目录中发送并且名称相同,它到file_name.something。目前,我正在获取一些文件,并且具有相同名称的文件正在被覆盖…任何人都可以提出建议吗? 问题答案: 您将哈希与文件名进行比较。你需要类似的东西 计算目标文件夹中每个文件的哈希值。 此外,在当前版本中,您的

  • 问题内容: 我正在做一个大项目,该项目很可能最终包含成千上万行代码,对于当前结构,我喜欢这样: 这样做的问题是controllers和models目录包含很多文件,全部使用和。因此,我正在考虑将其拆分为: 凡在控制器包的用户文件中可能包含的文件,等等。 现在,我读到像或那样的软件包是不好的做法,但是我担心对这两个软件包进行命名可能不是一个好主意,因为它们是同一项目的一部分(即使它们位于不同的目录中

  • 我有两个类,它们具有相同的类名并使用相同的包名。但是,这两个类文件位于不同的目录中。这两个类之间的另一个不同之处是,每个类中都有其他类中没有的方法。本质上,我想将这些方法拆分为两个使用相同名称但不同文件夹的单独文件。 理论上,我认为这是可能的,因为Java编译器在构建输出时确实维护了目录结构。所以在运行时,如果在类中调用了一个方法,Java可能会在任何一个文件中找到该方法。 这可能吗?我使用的是I

  • 1. 软件架构与编译方法

  • 虽然不能定做,但依然有许多人会去吃麦当劳,因为麦当劳的汉堡符合大多数人的口味;同样,预编译软件包也可以满足大多数用户的需求,如果没有特殊需求,很少有人会选择编译软件 最早的软件包管理系统不支持网络,类似于在 Windows 下安装软件,你必须获取一个安装包(比如通过网络下载),然后在本地安装它。使用这种方式安装软件的包管理系统主要有:dpkg(debian系)、rpm(redhat系) 由于 Li