首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >包名称与文件夹结构不同,但Java代码仍可编译

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

Stack Overflow用户
提问于 2011-12-06 05:52:01
回答 4查看 17.5K关注 0票数 32

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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代码时,它编译得很好,没有出现错误或警告。为甚麽呢?包名不应该与文件夹结构保持一致吗?如果它应该,它将如何坚持?

例如,如果我的包名是usingProtected.superPkg,编译器是否会以相反的顺序进行检查。当前的工作目录应该是superPkg,那么父目录应该是usingProtected并完成它。它是如何检查带有包名的文件夹结构的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-07 07:17:31

经过一些试验,我掌握了如何使用包名和从命令提示符运行Java类文件的方法。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    package mySample;


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

此文件位于目录"D:\Code N Code\CommandLine“中。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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“中。为了运行我的类文件,我给出了以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    java mySample.Sample

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

现在,当我问它为什么会编译错误的包源代码时,它会成功地编译代码,但当我运行类文件时,它会给出NoClassDefFoundError。所以上面的方法可以用来从命令行使用包名。

票数 10
EN

Stack Overflow用户

发布于 2011-12-06 05:55:09

Java语言规范并不强制将文件放在某个目录中。它允许编译器要求公共类与类名相同的文件中,但我不认为有任何类似的包。Section 7.2.1谈到了文件系统中可能的存储选项,但据我所知,它没有提到任何关于强制源代码结构的内容。

但是,在源目录结构中反映包结构是最佳实践,也是一个几乎被普遍接受的约定……javac将使用它来尝试查找未显式指定要编译的源文件。

请注意,如果您从命令行编译,默认情况下,每个类将出现在与相应源文件相同的位置,但如果您使用"-d“选项(例如,"-d bin"),编译器将为您构建一个适当的输出目录结构,其根位于指定的目录中。

票数 53
EN

Stack Overflow用户

发布于 2011-12-06 05:58:13

如果您正在编译单个类,javac不需要在其他地方寻找它。它只是按原样编译文件,并将生成的.class放入相同的文件夹中。但是,在将类放入类路径中某个目录的"abraKadabra“目录之前,通常无法使用它。

但是,如果您的类使用包中的另一个类,则出于相同的原因(javac希望找到该类并确保它具有您的类使用的方法等),您可能会在原地编译它时遇到问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8395916

复制
相关文章
Java反编译Jar包 jd-gui 与 Idea自带工具反编译jar包!
下载地址:https://gitee.com/li_kun_zang/jd-gui/releases/v1.6.6
收心
2022/04/19
3.2K0
Java反编译Jar包 jd-gui 与 Idea自带工具反编译jar包!
JD-GUI反编译jar包为Java源代码
程序员难免要借鉴其他java工程的代码。可有时只能拿到.calss文件,jar包或者war包,这个时候要求程序员能熟练的将这些类型文件反编译为Java代码并形成可编译运行的项目。本文介绍的反编译工具是JD-GUI。反编译的jar包是一个springboot项目的jar包。
震八方紫面昆仑侠
2020/07/22
7.5K0
【JavaSE专栏22】一文吃透Java的包机制
Java 的包机制可以避免代码冲突,高效组织管理代码,本文讲解 Java 中包机制的相关知识。
Designer 小郑
2023/08/01
6090
【JavaSE专栏22】一文吃透Java的包机制
python包urllib名称
经查询,在python3.5版本中是使用urllib.request,而在python2.7中则是urllib2
努力在北京混出人样
2019/02/18
9830
Java小白翻身教程-链表结构与编译大法(3)
D盘下面的tool文件夹已经有三个工具类了(其实是两个,CustNode是为了TuziLinkedList服务的),我们这一节来进行打包,这样的好处就是不用每次编译都把tool里面的类也带上了。
剽悍一小兔
2021/07/16
2920
Java小白翻身教程-链表结构与编译大法(3)
Java小白翻身教程-链表结构与编译大法(1)
咳咳,我是小白,没错,主线剧情又回来了。现在我遇到麻烦了,老板要我设计一个类,可以用来保存多个客户的资料。
剽悍一小兔
2021/07/14
2920
Java小白翻身教程-链表结构与编译大法(1)
Java小白翻身教程-链表结构与编译大法(2)
类越来越多了,是时候搞一波编译了。我们不能总是依赖CLASSPATH环境变量,那个参数主要是放一些公共的类路径,实际开发的话,我们是跟着项目走的。
剽悍一小兔
2021/07/16
3170
Java小白翻身教程-链表结构与编译大法(2)
Java小白翻身教程-链表结构与编译大法(4)
基本上每一个java项目都会有一个lib目录,我们创建这个目录,把刚才的jar包丢进去。
剽悍一小兔
2021/07/19
2920
Java小白翻身教程-链表结构与编译大法(4)
让代码更优雅:JAVA代码不同JDK版本的不同写法
JDK不同版本有不同的特性,我刚毕业时候JDK1.8(8)已经出现了,但是大多公司还在用1.6(6),后面陆续出现了9、10、11、12,但是大多公司仍然坚守在1.6版本,逐渐在向1.8靠拢。
品茗IT
2020/09/22
9860
Java代码的编译过程
从Javac代码的总体结构来看,编译过程大致可以分为1个准备过程和3个处理过程,它们分别如下所示。
韩旭051
2021/04/14
9470
Java代码的编译过程
以树状结构输出计算机某个指定文件夹下的所有的文件和子文件夹名称
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/106331.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/30
9820
【taro react】 ---- 项目打包生成不同目录【代码编译到不同生产目录】
1. 官方文档 代码编译后的生产目录 2. 实际开发问题 不同端程序的打包,都会生成到dist文件夹下边,这就导致如果同时多端调试或者打包,会很麻烦! 不同程序的打包命令! /package.json "build:weapp": "taro build --type weapp", "build:swan": "taro build --type swan", "build:alipay": "taro build --type alipay", "build:tt": "taro build
Rattenking
2022/05/11
7740
【taro react】 ---- 项目打包生成不同目录【代码编译到不同生产目录】
Java 将文件夹打成压缩包 zip
  今天在做批量下载的时候,用到了就写一写吧,一般多文件下载通常都是通过压缩包下载的
彼岸舞
2020/12/02
4.8K0
Java学习-如何编译适配java版本的jar包
在日常浏览github社区的过程中,会碰到一些好用的java项目,但作者往往只提供源码或与本地jdk不适配的jar包,这时候可以自行进行编译
hyyrent
2022/12/26
9100
Java学习-如何编译适配java版本的jar包
JavaScript 与 Java 有什么不同?
写这篇文章是因为在知乎上看到有人问这个问题,在想怎么会有这种奇葩问题,不过想想当初刚刚接触编程的我貌似也搞不清两者的关系,认知还是需要一个过程。 然后看到比较经典的回答有:Java 和Javascri
三哥
2018/06/15
9980
python安装包代码_linux编译程序
Linux下源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
全栈程序员站长
2022/09/23
3.2K0
反编译Java_java反编译的代码可以修改么
1.反编译是java开发者必不可少的东西,今天我们jd-gui-0.3.6.exe这个工具来反编译class文件。下面是下载地址: http://download.csdn.net/detail/luozheng4698729/9728359
全栈程序员站长
2022/11/15
8000
深入理解Java虚拟机(程序编译与代码优化)
对于性能和效率的追求一直是程序开发中永恒不变的宗旨,除了我们自己在编码过程中要充分考虑代码的性能和效率,虚拟机在编译阶段也会对代码进行优化。本文就从虚拟机层面来看看虚拟机对我们所编写的代码采用了哪些优化手段。
张磊BARON
2019/07/31
6480
深入理解Java虚拟机(程序编译与代码优化)
Jenkins教程之java代码编译、打包、代码扫描
1、要全局工具配置里面配置好 maven的安装路径(现在java代码大部分都是maven工程)
小博测试成长之路
2021/03/06
1.2K0
点击加载更多

相似问题

使Java源代码不可编译但仍可读

812

Java包结构与文件夹结构

22

未编译的java类,但仍可执行

30

尽管应标记类型,但Typescript代码仍可编译

18

Java包Vs文件夹-结构?有什么不同?

66
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文