对于笔记3中的HelloWorld程序,编译时只要输入javac HelloWorld.java即可生成类文件;再用java HelloWorld即可运行。

如果源程序使用了包声明,编译运行时要使用某些参数才能成功编译或运行。下面用简单的例子说明一下。

作者: 蝉蝉

请尊重作者劳动成果,转载请在标题注明“转载”字样,并标明原文链接:

http://www.cnblogs.com/chanchan/p/7613261.html

有两个源文件,分别为StringCompareEmp.java和StringFunction.java,两个源文件都有包声明语句"package StringTest;",即它们同属StringTest包,编译生成的类文件要放到StringTest文件夹下。具体代码如下:

注:包名最好小写…

/*
* compareTo()返回参与比较的两个字符串的ascii码差值
* Object类....
*/
package StringTest;
public class StringCompareEmp{
public void printCompare() {
// public static void main(String[] args) {
int indexI = 3;
String firststr = "This String";
String secondstr = "this string";
Object objstr = firststr; String str1 = "a";
String str2 = "b";
String str3 = "abc";
String str4 = "ab";
String str5 = "abcde";
String str6 = "a"; System.out.println( firststr + " 第" + (indexI+1) + "个字符是:" + firststr.charAt(indexI) );//char charAt(int)
System.out.println( firststr + " 与 " + secondstr + " 按字典顺序比较,结果为:" + firststr.compareTo(secondstr) );//int compareTo(String),按字典顺序比较两个字符串
System.out.println( firststr + " 与 " + secondstr + " 按字典顺序比较并且不考虑大小写,结果为:" + firststr.compareToIgnoreCase(secondstr) );//int compareToIgnoreCase(String),按字典顺序比较两个字符串,不考虑大小写
System.out.println( firststr + " 与 " + objstr + " 比较,结果为:" + firststr.compareTo(objstr.toString()) );//int compareTo(Object),把字符串与另一个对象比较 // 两个字符串首字母不同,则返回首字母的ascii差值
System.out.println( "两个字符串首字母不同,则返回首字母的ascii差值:" );
System.out.println( str1 + " 与 " + str2 + " 按字典顺序比较,结果为: " + str1.compareTo(str2) );
System.out.println( str4 + " 与 " + str2 + " 按字典顺序比较,结果为: " + str4.compareTo(str2) );
System.out.println( str5 + " 与 " + str2 + " 按字典顺序比较,结果为: " + str5.compareTo(str2) ); //首字母相同,则比较下一个字符,直到有不同的为止或比较到字符串最后一个字符,返回该不同的字符的ascii差值;如果两字符串长度不同,可以参与比较的字符又完全一样,返回两个字符串的长度差值
System.out.println( "首字母相同,则比较下一个字符,直到有不同的为止或比较到字符串最后一个字符,返回该不同的字符的ascii差值;如果两字符串长度不同,可以参与比较的字符又完全一样,返回两个字符串的长度差值:" );
System.out.println( str4 + " 与 " + str1 + " 按字典顺序比较,结果为: " + str4.compareTo(str1) );
System.out.println( str1 + " 与 " + str6 + " 按字典顺序比较,结果为: " + str1.compareTo(str6) );
System.out.println( str3 + " 与 " + str1 + " 按字典顺序比较,结果为: " + str3.compareTo(str1) );
System.out.println( str3 + " 与 " + str4 + " 按字典顺序比较,结果为: " + str3.compareTo(str4) );
System.out.println( str5 + " 与 " + str1 + " 按字典顺序比较,结果为: " + str5.compareTo(str1) );
System.out.println( str5 + " 与 " + str4 + " 按字典顺序比较,结果为: " + str5.compareTo(str4) );
System.out.println( str5 + " 与 " + str3 + " 按字典顺序比较,结果为: " + str5.compareTo(str3) );
System.out.println( str3 + " 与 " + str5 + " 按字典顺序比较,结果为: " + str3.compareTo(str5) ); }
}
package StringTest;
public class StringFunction{
public static void main(String[] args) {
// StringCompareEmp strcmp = new StringCompareEmp();
// SearchLastString secstr = new SearchLastString(); // strcmp.printCompare();
// secstr.printSearch();
System.out.println("function");
}
}

1,在windows系统下打开命令行,进入到源文件所在目录

①,编译StringCompareEmp. java,输入javac -d . StringCompareEmp. java,这里用到参数"-d .",表示在当前目录下生成包文件夹,并把类文件放到该文件夹下;不加-d参数的话,在当前目录下能生成类文件,但运行时会提示找不到或无法加载类文件,原因在于,JVM要到包文件夹下寻找类文件,而此时只在当前目录下有类文件,这样就会出错。

命令如图1所示:

图1

出现“编码GBK的不可映射字符”的错误,原因是,系统默认的编码格式与源文件编码格式不同,编译时没有显式指定源文件编码格式的话,JDK会把源文件从系统默认编码格式转换为Java默认编码格式,这样就出现乱码了。

图2

②,编译时加上参数“-encoding UTF-8”就能正确编译了。

图3

编译通过后,查看目录,发现当前目录下生成StringTest文件夹,StringCompareEmp. class文件就放在该文件夹下。

图4

③,用同样的命令编译StringFunction. java

图5

查看StringTest文件夹,两个类文件都存放其中。

图6

④,用命令java StringTest. StringFunction执行类文件,成功输出

图7

2,更改源程序StringFunction. java,修改后的源文件如下:

package StringTest;
public class StringFunction{
public static void main(String[] args) {
StringCompareEmp strcmp = new StringCompareEmp();
// SearchLastString secstr = new SearchLastString(); strcmp.printCompare();
// secstr.printSearch();
System.out.println("function");
}
}

①,把前面编译生成的类文件删除,重新编译这两个源文件。

先编译StringFunction. java,出现"找不到符号"的错误,原因在于,StringFunction. java实例化了一个StringCompareEmp对象,而此时StringCompareEmp还未编译,调整编译顺序,先编译StringCompareEmp. java,再编译StringFunction. java就可以了。详见图8:

图8

②,输入命令java StringTest. StringFunction,成功执行,详见图9:

图9

3,上面的例子都把源文件放在当前目录下了,源文件位于其他地方呢?

①,要用到另一个参数"-cp 源文件所在的路径",表示要编译的源文件在所示路径下;此时"-d ."也改为"-d 源文件所在路径",表示在源文件所在路径下生成包文件夹,并把类文件放在该文件夹下。详见图10:

图10

②,输入java -cp StringFunction\src StringTest. StringFunction,成功执行,详见图11:

图11

总结:

①,源文件中有包声明语句时,编译时要使用“-d 路径”参数,表示编译时自动生成与包同名的文件夹,并把类文件放到该文件夹下,目的是运行时让JVM能够在包文件夹下找到要加载的类文件。

②,源文件中有中文字符时,要编译时要用“-encoding UTF-8”参数,否则编译有乱码。

③,当要编译的多个源文件有引用关系时,先编译不引用其他类的文件,后编译有引用的文件,否则编译会出现“找不到字符”的错误。

④,当源文件在非当前路径下时,编译或运行时要用到“-cp 源文件所在路径”参数,表示到所给路径下寻找源文件。

待学习:

①,用javac *.java解决类之间相互引用时,编译顺序问题

②,JVM如何加载类

③,变量,代码块等在内存如何存储

Java学习笔记5---命令行下用javac,java编译运行含package语句的类的更多相关文章

  1. MOOS学习笔记3——命令行

    MOOS学习笔记3--命令行 例程 /** * @code A simple example showing how to use a comms client问问怎么样 */ #include &q ...

  2. .Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行)

    .Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行) 遇到个诡异的问题,项目发布并寄宿到 IIS上后,Log4Net没有日志输出 1.原因分析 这不应该啊,所有的配置 ...

  3. 学习笔记——Maven 命令行选项

    2014-10-09:更新裁剪反应堆具体用法 说明: 1.使用-选项时,和后面的参数之间可以不要空格.而使用--选项时,和后面的参数之    间必须有空格.如下面的例子: $ mvn help:des ...

  4. MongoDB学习笔记~客户端命令行的使用

    回到目录 当我们从MongoDB网站下载安装包之后,它会伴随有一系列的工具,服务器程序mongod是我们耳熟能详的了,客户端mongo和性能检测mongostat我们可能就没有用过了,今天主要是介绍一 ...

  5. SVN学习之svn命令行下的基本操作

    http://huihai.iteye.com/blog/1985751 上一节已经把svn安装完成,下来就用命令行做一些简单的操作. 1.当svn安装完成后,svn管理人员会在svn的root根目录 ...

  6. osg学习笔记2, 命令行参数解析器ArgumentParser

    ArgumentParser主要负责命令行参数的读取 #include <osgDB/ReadFile> #include <osgViewer/Viewer> int mai ...

  7. Java学习笔记 11/15:一个简单的JAVA例子

    首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java   // TestJava.java,java 的简单范例  public ...

  8. 【Java学习笔记之二十一】抽象类在Java继承中的用法小结

    一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...

  9. Java学习笔记15---instanceof与向下转型

    感冒咳嗽停更了几天,今天恢复更新了. 先来看下instanceof与向下转型的概念: 1.instanceof instanceof是一个二元操作符,用法是:boolean result = a in ...

随机推荐

  1. API Gateway - KONG 安装与配置

    简介 Kong,是由Mashape公司开源的,基于Nginx的API gateway 特点 可扩展,支持分布式 模块化 功能:授权.日志.ip限制.限流.api 统计分析(存在商业插件Galileo等 ...

  2. Ubuntu下deb包的解压、打包、安装、卸载及常用命令参数

    1.首先下载deb包,比如:将其放在 /home/tools/ 根目录下: 2.进入到tools根目录下的终端,输入下面命令创建文件夹extract,并在extract文件夹下创建DEBIAN文件夹 ...

  3. Java中File的使用

    File 代表文件或者目录的类 构造函数 File(File parent,String child)---代表了指定父目录下的指定的子文件或者子目录 File(String pathname)--- ...

  4. [UI列表]LoopScrollRect无限滑动不卡顿

    应用场景 对于背包界面,排行榜列表,聊天消息,等有大量的UI列表的界面,常规做法是为每一条数据生成一个格子,在数据量越大的情况下,会生成越来越多的Gameobject,引起卡顿. 这篇文章讲述的就是解 ...

  5. 自学Zabbix1.2-zabbix特性

    Zabbix是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性. 概述 Zabbix是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性 数据收集 可用性及性能检测 支持SNMP(t ...

  6. 源生js惯性滚动与回弹效果

    在写移动端的APP或者页面时,经常会遇到惯性滚动与回弹效果.用插件iscroll可以轻松解决这个问题,大多数的移动框架也能轻松解决这个问题,它们内部都封装了这个效果. 一直好奇这个效果原生JS是怎么实 ...

  7. Springboot 之 解决IDEA读取properties配置文件的中文乱码问题

    问题描述 当在.properties的配置文件中有中文时,读取出来的总是乱码.比如我的application.properties配置文件的内容如下: server.port=9090 test.ms ...

  8. Python 项目实践一(外星人入侵小游戏)第五篇

    接着上节的继续学习,在本章中,我们将结束游戏<外星人入侵>的开发.我们将添加一个Play按钮,用于根据需要启动游戏以及在游戏结束后重启游戏.我们还将修改这个游戏,使其在玩家的等级提高时加快 ...

  9. std::shared_ptr<void>的工作原理

    前戏 先抛出两个问题 如果delete一个指针,但是它真实的类型和指针类型不一样会发生什么? 是谁调用了析构函数? 下面这段代码会发生什么有趣的事情? // delete_diff_type.cpp ...

  10. Python Web框架(URL/VIEWS/ORM)

    一.路由系统URL1.普通URL对应 url(r'^login/',views.login) 2.正则匹配 url(r'^index-(\d+).html',views.index) url(r'^i ...