命令行编译java的一点总结

今天在使用命令行编译时遇到些问题,顺便又仔细分析了一些基础知识,记录总结一下。

下面使用javac和java命令都是在D:\Workspace\java目录下执行的:

 1 //Inner.java
 2 package cn.inner;
 3 public class Inner
 4 {
 5     public static void show()
 6     {
 7         System.out.println("I‘am inner class.");
 8     }
 9 }
10
11 //DoTest.java
12 import cn.inner.*;
13 public class DoTest
14 {
15     public static void main(String[] args)
16     {
17         Inner.show();
18     }
19 }

javac -d . Inner.java

javac DoTest.java

折腾半天,最终把Inner.java删掉、重命名都能够使DoTest.java编译成功。

自己思索半天,想到一个合理的解释:javac 命令在编译源文件时,如果源文件中有对其他类的调用(例如本例中的Inner类的调用),

它首先会在与源文件相同的目录下(即是与该类相同的包下)寻找是否有该类存在,在示例中发现了Inner.java源文件存在(该源文件中肯定存在一个Inner类),

但是事实上Inner.java是属于cn.inner包下的类,即cn.inner.Inner。检查到这里,javac命令就报错了,提示错误的源文件...

为了进一步证实我的假设,我修改DoTest.java文件,增加了默认包名:

package src;

在当前目录下执行:

Javac -d . DoTest.java

成功!

这时在分析下DoTest.java原源文件中导入的其它类:

由于该源文件中有导入cn.inner.Inner类,在使用javac命令编译时,该命令会按照classpath环境变量的路径去搜索导入的类,我的环境变量中有配置".",

所以在当前目录下可以正确寻找到cn.inner.Inner类,在当前目录下执行javac DoTest.java 命令成功

但是在执行java DoTest 命令时,出现下面的结果

这时才发现原来DoTest.java中增加了包名的限制,所以需要把DoTest.class 文件移到src目录下,或者编译时加上"-d ."参数,即javac -d . DoTest.java 命令

再执行java src/DoTest 成功

总结:java中包名的层级关系是用目录来体现的,比如cn.inner包就对应cn\inner这两层目录,在编译代码的过程中,如果有import其他包中的类,

则使用javac命令的命令行窗口的目录必须可以按照classpath环境变量的路径搜索到import进来的类。另外值得一提的是,编译后的类都应该按照包名规定放在指定目录下,

还需要注意被引入的类的源文件和使用引入类的源文件不能放在一起,除非两个文件都是默认包,如果是这种情况也不会使用import引入另外一个类了。

当然,我今天提到的这些问题,在IDE开发中一般都不会遇到,只是觉得这样能够更加深刻的理解java的一些基础问题。

时间: 2024-12-28 17:22:31

命令行编译java的一点总结的相关文章

用命令行编译java并生成可执行的jar包

用命令行编译java并生成可执行的jar包 1.编写源代码. 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: package test; import java.awt.*; import javax.swing.*; //更多包的导入... class NotePadFrame extends JFrame { //主界面的设计... } //其他相关代码... public class CardLayo

命令行编译java源文件提示 “编码GBK的不可映射字符” 及输出的中文变为乱码的解决方法

使用命令行编译运行java代码,编译时出现 “编码GBK的不可映射字符” 的错误提示,并且需输出的中文全部变为乱码,此时有两种解决方法: (方法一) 在输入 javac 命令时,额外输入 -encoding utf-8, 例如:如果编译的源文件名为 Test.java ,那么编译时原先只需输入 javac Test.java,而现在需要输入 javac -encoding utf-8 Test.java (方法二) 使用 EditPlus 软件编写代码时,通过修改相关设置然后保存文件即可,具体操

Maven 手动添加第三方依赖包及编译打包和java命令行编译JAVA文件并使用jar命令打包

一,实例:新建了一个Maven项目,在eclipse中通过 build path –> configure path-.将依赖包添加到工程中后,eclipse不报错了.但是用Maven命令 mvn clean compile 时出错如下: 原因是在eclipse中添加了 exteneral jar后,还需要在maven中再添加依赖的jar包 Maven手动添加第三方依赖包有两种方法: 参考:maven 添加第三方依赖              maven中把依赖的JAR包一起打包 第一种方法是使

【二】命令行编译Java文件

①运行→cmd→ ②常用指令:进入E盘是“e:”回车 打开文件夹是“cd 文件夹名”比如“cd work” “dir”是看当前文件夹下面的文件 编译java文件的命令是“javac XXXO.java”,会生成一个class文件, 执行class文件命令式“java XXXO”(无需后缀名) ③Java对大小写敏感,java文件名需和里面的类名一致 ④hello word代码: public class hello{ public static void main(String args [])

Java 命令行编译项目

(初学者的一些总结-高手们勿喷哈-) 原因: 以前一直用Eclispe编程环境运行Java.非常舒服,就像用傻瓜相机照相一般. 有看见许多高手都是直接用vim编辑文件,命令行编译运行,觉得那样不是反而更繁琐? 转折点是在前几天本科毕设题目选定之后.毕设题是一个基于java 字节码的类关系动态分析.需要对.class文件中字节码进行更改(具体的说是在许多指令后加入做标记的新指令,以实现动态跟踪的目的). 我发现,eclipse根本无法如此灵活,他无法直接装载运行一个我修改过的.class文件.它是

java 命令行 编译 运行程序

学习java使用IDE前最好先用用命令行的javac.java来跑一跑简单的程序,这样能够熟悉一下包管理对.class文件路径的影响. 我们先写一段简单的代码: package com.csdn.lkasdolka; public class test_1{ public static void main(String[] args){ for(int i = 0; i < 10; ++i ){ System.out.println(i); } } } 写好后保存为test_1.java,win

韩顺平细说Servlet视频系列意外收获之用命令行编译带有包的java类解决方案

命令行编译带有包的java类 在命令行编译这一块,基本上都是新手入门时了解一下,然后就直奔IDE而去.这样固然没错,就怕那些--.然后今天在视频中看到了这种方法,觉得可能会用到,所以就记录下来了,以备自查. 步骤如下: 在X盘新建一个java文件,编写一段内带包的代码,示例如下: package com.hsp; public class Exercise{ public static void main(String[] args){ System.out.println("Hello Wor

java 命令行 编译 执行程序

学习java使用IDE前最好先用用命令行的javac.java来跑一跑简单的程序,这样可以熟悉一下包管理对.class文件路径的影响. 我们先写一段简单的代码: package com.csdn.lkasdolka; public class test_1{ public static void main(String[] args){ for(int i = 0; i < 10; ++i ){ System.out.println(i); } } } 写好后保存为test_1.java,win

java学习总结(16.05.08)在windows下使用cmd命令行对java文件进行编译和执行

windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量(jdk安装与环境变量的配置方法:http://blog.csdn.net/qq_32099621/article/details/51339868) 下面来说一下windows下如何使用cmd命令行来编译执行java文件 首先找到需要编译和执行的java文件 这里我要编译和执行这个java文件 按组合键win+r调出"运行",