zoukankan      html  css  js  c++  java
  • 使用CMD命令编译和运行Java程序

    对于初学者来说,使用CMD命令(Unix以及类Unix系统采用Termial)来编译和运行Java的好处是让初学者直观地体会到编译(Compile)这一步骤,加深记忆。所谓编译就是将文本文件xxx.java翻译为Java虚拟机可以识别的字节码文件xxx.class,这部分原理暂且不做深究,直接介绍如何使用CMD命令执行Java程序。Unix/Linux或者Mac iOS等其它类Unix系统,方法都一样,涉及到的一些操作CLASSPATH的命令与Windows系统不同,就此不再赘述。

    写一个Hello World程序

    1 public class HelloWorld {
    2     public static void main(String[] args){
    3         System.out.println("Hello, World!");
    4     }
    5 }

    因为规定java文本文件名称,必须与文件中public的类名相同,所以,我保存上述代码文件名为HelloWorld.java,储存在如下目录:

    1.编译

    E:myJavajavaSrc>javac HelloWorld.java -d . 

    命令解析:

    完整命令: javac [ options ] [ sourcefiles ] [ classes] [ @argfiles ]

    • javac: java语言的编译器,使用命令行编译Java源文件,输出字节码文件.class.
    • sourcefiles: java源文件的相对路径。
    • options: 这里使用的是-d, 即directory简写,表示输出字节码的位置,"."表示当前目录,".."表示上级目录,"..in"表示在当前目录的兄弟目录bin,以此类推。

    所以HelloWorld.java编译完成后在当前目录输出了字节吗文件HelloWorld.class.

    2.运行

    E:myJavajavaSrc>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:

    1 package hello;     //声明package
    2 
    3 public class HelloWorld {
    4     public static void main(String[] args){
    5         System.out.println("Hello, World!");
    6     }
    7 }

    1.编译

    E:myJavajavaSrc>javac HelloWorld.java -d ..

    注意存放路径是".."即上级目录,它表示"hello"这个package的生成路径,class文件会生成在hello包中,如果hello不存在,程序将自动创建之,在桌面上的结果,实际就是一个普通目录而已:

    2.运行

    java运行程序的命令是:

    E:myJavajavaSrc>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程序看似就是一小步,实际上其中包含有复杂的过程和逻辑,这些技术细节,需要在积累一定的实践经验和知识的基础上,再继续深究。

  • 相关阅读:
    PTA天梯赛L2
    图论-最短路算法
    配置自己的sublime
    testNG常用用法总结
    testng.xml文件的配置
    阿里云服务器 ECS Jenkins 安装教程
    jenkins报错:Problem accessing /jenkins/. Reason: HTTP ERROR 404
    jenkins安装详细教程
    jenkins下载插件无插件显示+离线下载插件方法
    如何让junit的测试跑多次
  • 原文地址:https://www.cnblogs.com/yxlaisj/p/8594444.html
Copyright © 2011-2022 走看看