使用CMD命令编译和运行Java程序
对于初学者来说,使用CMD命令(Unix以及类Unix系统采用Termial)来编译和运行Java的好处是让初学者直观地体会到编译(Compile)这一步骤,加深记忆。所谓编译就是将文本文件xxx.java翻译为Java虚拟机可以识别的字节码文件xxx.class,这部分原理暂且不做深究,直接介绍如何使用CMD命令执行Java程序。Unix/Linux或者Mac iOS等其它类Unix系统,方法都一样,涉及到的一些操作CLASSPATH的命令与Windows系统不同,就此不再赘述。
写一个Hello World程序
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
因为规定java文本文件名称,必须与文件中public的类名相同,所以,我保存上述代码文件名为HelloWorld.java,储存在如下目录:
1.编译
E:\myJava\javaSrc>javac HelloWorld.java -d .
命令解析:
完整命令: javac [ options ] [ sourcefiles ] [ classes] [ @argfiles ]
- javac: java语言的编译器,使用命令行编译Java源文件,输出字节码文件.class.
- sourcefiles: java源文件的相对路径。
- options: 这里使用的是-d, 即directory简写,表示输出字节码的位置,"."表示当前目录,".."表示上级目录,"..\bin"表示在当前目录的兄弟目录bin,以此类推。
所以HelloWorld.java编译完成后在当前目录输出了字节吗文件HelloWorld.class.
2.运行
E:\myJava\javaSrc>java HelloWorld
Hello, World!
java运行程序的命令是:
java [options] classname [args]
- java: 执行程序命令。执行顺序是启动JRE->加载class->调用class的main()方法,main方法必须是public static void main(String[] args)的样子。
- classname: 要执行的class文件的名称,要加包名,中间以'.'隔开,比如java.lang.String
- options: 一些可选参数[可参考Java文档]
成功打印出字符串: Hello, World!
将class输出到指定package
package简言之就是存放Java字节码文件的包,jar文件就是存放package的包,这样区分文件结构,使项目的层次更分明,便于维护,可以避免命名重复的问题,注意要在类声明上方声明package:
package hello; //声明package public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
1.编译
E:\myJava\javaSrc>javac HelloWorld.java -d ..
注意存放路径是".."即上级目录,它表示"hello"这个package的生成路径,class文件会生成在hello包中,如果hello不存在,程序将自动创建之,在桌面上的结果,实际就是一个普通目录而已:
2.运行
java运行程序的命令是:
E:\myJava\javaSrc>java ../hello.HelloWorld
错误:找不到或无法加载主类
结果却是提示找不到class,如果我们现在将CMD打开到hello包所在同级目录下,即"myJava"目录,运行:
E:\myJava>java hello.HelloWorld
Hello,World!
程序成功输出了,也就是java解释器定位到了class文件。其实,java的解释器只能找到当前路径下和CLASSPATH变量存储路径中的包,所以我必须先把CMD的路径切换到hello的同级目录下,然后再运行java hello.HelloWorld。
那么如果每次都这样执行,岂不是很麻烦?
CLASSPATH
"The class path is the path that the Java Runtime Environment (JRE) searches for classes and other resource files."----官方文档, 即CLASSPATH就是JRE寻找class文件和其它资源文件的地方,因此,为了方便运行,就有必要把我们生成的包想办法放到CLASSPATH变量中,WIn7环境下的操作方法 是:
右击“计算机”->属性->高级系统设置->环境变量->系统变量, 双击“CLASSPATH”, 在“变量值”最后输入";路径",其中";"是多个CLASSPATH的分隔符号,如图所示:
好了,设置完成后,重新打开CMD,在任何位置输入命令:
C:\Windows>java hello.HelloWorld
Hello,World!
都可以成功运行啦!
当然,java命令中亦可以显式地使用-classpath参数告诉JRE去哪里找,不过这种方式的作用域是一次命令,也可以用命令行
set classpath=%classpath%;dir //dir是你需要设置的绝对路径
在本CMD窗口打开的期间生效一个临时的CLASSPATH,其它的CMD窗口不生效(Linux 使用#export CLASSPATH=$CLASSPATH:dir )。你可以使用
set classpath
来查看当前生效的CLASSPATH中有没有你设置的路径(Linux使用echo $classpath查看)。
总结
- 启动一个Java应用程序,需要经过编译和运行两个过程;
- 编译就是将程序员编写的Java源文件翻译为Java虚拟机可执行的字节码文件;
- 运行字节码文件的前提是虚拟机通过JRE的环境变量CLASSPATH找到这些文件;
- 可以设置CLASSPATH变量来将你的目录加入到环境变量中以使JRE能找到字节码文件;
- 找到文件后虚拟机将会加载字节码文件以运行。
不积跬步,无以至千里,不积小流,无以成江海。运行一个Java程序看似就是一小步,实际上其中包含有复杂的过程和逻辑,这些技术细节,需要在积累一定的实践经验和知识的基础上,再继续深究。
使用CMD命令编译和运行Java程序的更多相关文章
- 如何在cmd命令行中运行Java程序
cmd运行java 有萌新问我怎么用cmd运行Java,他运行报错了,怎么办?如图是他的执行过程: 他说就这一个类,里面包含了main方法怎么会没有加载主类呢. 其实很简单,因为你执行的时候并不能直接 ...
- 在 Sublime Text 2 中编译和运行 Java 程序,以及输出中文出错问题解决办法
Sublime Text 2 是我最喜欢用来编码的文本编辑器,如果你尝试使用后相信你也会喜欢上它的.在这篇文章中我们将讨论如何在 Sublime Text 2 中编译和运行 Java 程序. 第一步: ...
- 创建用于编译和运行Java程序的批处理文件
创建用于编译和运行Java程序的批处理文件 每次编译或运行Java程序时,都要在DOS命令行中输入很长的javac或java命令,悟空觉得太麻烦,就编写了一个适用于Windows操作系统的批处理文件b ...
- cmd命令行编译和运行java程序报错 NoClassDefFoundError
首先,当在运行java程序出现这个错误时,首先考虑是不是路径或者未指定正确的包名,例如当运行下面这个文件时: package cn.wgh.socket; public class HelloWorl ...
- 在 Sublime Text 3 中配置编译和运行 Java 程序
参考网址:http://www.open-open.com/lib/view/open1388105023765.html 1. 设置 java 的 PATH 环境变量 2. 创建批处理或 Shell ...
- 在Sublime Text 3中配置编译和运行Java程序
设置Java的PATH环境变量 在Java的jdk的bin目录下建立新文件runJava.bat 文件内容如下: @echo off cd %~dp1 echo Compiling %~nx1.... ...
- 运行java程序的方法-DOS命令和Eclipse方法
● 运行java程序的方法(使用DOS命令) 首先进行一个"文件夹选项"的设置: 在D:\Android\java_code目录下新建了一个Hello_World.java文件(不 ...
- Java 命令行运行java程序,出现“找不到或无法加载主类 ”的注意事项
引用:http://blog.chinaunix.net/uid-27106528-id-5209914.html 要在CMD命令行中使用java 运行java程序,关于出现 “找不到或无法加载主类 ...
- 在命令符模式下编译并执行Java程序
对于Java初学者,建议使用纯文本文件来编写Java程序,并在命令符模式下使用工具程序编译和执行Java程序.使用javac工具编译.java,使用java工具执行.class.(推荐sublime编 ...
随机推荐
- 5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
跟踪标记:834 功能: 在64位的windows环境下,为SQL Server开启这个跟踪标记,那么SQL Server 会使用大页(Large pages)为内存缓冲区(buffer pool)分 ...
- Flask從入門到入土(三)——Web表單
Flask-WTF擴展可以把處理Web表單的過程變成一種愉悅的體驗.這個擴展對獨立的WTForms包進行了包裝,方便集成到Flask程序中. Flask-WTF及其依賴可使用pip安裝: pip in ...
- JS中的Undefined和Null的区别
Undefined ①在声明变量时,如果没有给变量赋值,则这个变量就是undefined类型: ②访问未声明的变量会报错误消息,但这样的变量使用 typeof 测试,返回的值为Undefined. 即 ...
- filebeat -> logstash -> elasticsearch -> kibana ELK 日志收集搭建
Filebeat 安装参考 http://blog.csdn.net/kk185800961/article/details/54579376 elasticsearch 安装参考http://blo ...
- SpringBoot application.yml logback.xml,多环境配置,支持 java -jar --spring.profiles.active
趁今天有时间整理了一下 启动命令为 //开发环境 java -jar app.jar --spring.profiles.active=dev--server.port=8060 //测试环境 jav ...
- php 变量原理讲解
php 变量原理讲解 一.变量概念 所谓变量,是指在程序中其值可以变化的量. 程序是管理和处理数据的.在程序运行过程中,我们需要存贮这些数据,变量和常量就是用于保存程序运行时的数据的. 变量通常由 ...
- accordion 分类
<!--accordion--><h1>accordion 分类</h1><div id="accordionId" class=&quo ...
- apue.h头文件(UNIX环境高级编程)
在看UNIX环境高级编程是,碰到一个头文件"apue.h",搜一下别人的帖子,其实apue.h是作者自己写的一个文件,包含了常用的头文件,系统不自带.其中包含了常用的头文件,以及出 ...
- 奶瓶beini系统
奶瓶(beini)这个系统,是一款基于 Tiny Core Linux 搭建的无线网络安全测试系统,当然由于它是用来安全测试的系统,因此在安全方面自然有着强大的功能.而且,这个系统非常简便易学,因此现 ...
- Netty高可靠性设计:优化建议
尽管Netty的可靠性已经做得非常出色,但是在生产实践中还是发现了一些待优化点,本小节将进行简单说明.希望后续的版本中可以解决,当然用户也可以根据自己的实际需要决定自行优化. 1 发送队列容量上限控 ...