使⽤JDK命令⾏编译、运⾏Java程序及相关常见问题的解决
(细致)
使⽤JDK命令⾏编译、运⾏Java程序
⼀般都是通过IDE(如Eclipse、Intellij Idea,MyEclipse)来开发,调试java项⽬。但作为学习Java初学者,⼀上来就⽤这些IDE,可能会被分神,原因是学习IDE的使⽤也需要相当的付出。应从使⽤JDK命令⾏编译、运⾏Java程序开始,这是学习Java最基本的实验实践技能。
JDK11于2018-09-25正式发布!美国当地时间9⽉25⽇,Oracle 官⽅宣布 Java 11 (18.9 LTS) 正式发布,可在⽣产环境中使⽤!这是⾃ Java 8 后的⾸个长期⽀持版本(Long-Term Support),新的长期⽀持版本每三年发布⼀次,根据后续的发布计划,下⼀个长期⽀持版 Java 17 将于2021年发布。以前的版本,要运⾏⼀个 Java 源代码必须先编译(⽤ javac 命令),再运⾏(⽤ java 命令),两步执⾏动作。⽽ Java 11 版本中,通过⼀个 java 命令就直接搞定了,分两步也可以。
JDK(java development Kit,Java 开发⼯具包),是⾯向开发⼈员使⽤的SDK(软件开发⼯具包),提供了java的开发环境和运⾏环境。JRE是java runtime enviroment,是指java的运⾏环境,是⾯向java程序的使⽤者,⽽不是开发者。
和⼀般的Windows 程序不同,JDK 安装成功后,不会在“开始”菜单和桌⾯⽣成快捷⽅式。这是因为bin ⽂件夹下⾯的可执⾏程序都不是图形界⾯的,它们必须在控制台中以命令⾏⽅式运⾏。另外,还需要⽤户⼿⼯配置⼀些环境变量才能正常使⽤JDK。
JDK 安装完毕后,在安装路径下有⼀些⽂件夹(⽬录),如:
bin ⽂件夹:存放编程所要⽤到的开发⼯具,包括javac、java等。
lib ⽂件夹:lib是libarary(类库)的缩写。也就是存放⼀些程序运⾏时的依赖⽂件。
……
关于JDK11的安装与配置,在此跳过,请看他⽂。
特别说⼏句,关于书或⽂章中图⽰⽤的截图和操作步骤,这些相对来说是稳定的但决⾮是固定的。对于初学者,或刚刚接触的技术,好的图⽰截图和操作步骤可以减少学习过程中出现周折带来的挫折感,但是,我们知道,技术是演化和进步的,改进变⾰是不可避免的,因此图⽰截图和操作步骤不可能⼀成不变,特别是在不同的版本或出现重⼤升级时有⼀些显著改变,有时困惑不明,上⽹⼜搜索不到,这时⾃主探索就很重要,所以探索性试验性学习应当发扬。当你练习时发现截图和书或⽂章中有某些差异时,除作者可能的失误外,应想到你所⽤的版本、开发环境是否与作者的⼀致。
可以结合 下列⽹⽂学习
Java开发环境搭建与实验教程
CMD和PowerShell介绍
在学习本⽂的过程中,如果遇到疑惑,可以看看上述⽹⽂。
本⽂重点介绍使⽤JDK11命令⾏编译、运⾏Java程序
预备知识:CMD命令⼊门
按下win键+R键(先按下 键,再按下R键),弹出“运⾏”窗⼝,参见下图:
输⼊cmd 回车(指按下Enter见)或单击“确定”按钮,弹出的cmd命令窗⼝,参见下图:
输⼊help 回车,看到⼀些cmd命令,参见下图:
这⾥列出了⼀些命令概述,要想看⼀个命令的具体⽤法,你就尝试的在其命令后直接输⼊/? ,如cd/? 回车
cmd命令不区分⼤⼩写,/反斜杠⽤在命令参数前,\斜杠⽤在路径中(也可以⽤/但不提倡)。
下⾯是常⽤⽬录操作
要进⼊另⼀个盘输⼊盘符:回车 如,进⼊d盘,则输⼊d:回车
进⼊⼦⽬录就输⼊cd ⼦⽬录名
回到根⽬录输⼊cd \
返回上级⽬录,输⼊cd..
路径中的“.”代表当前⽬录;路径中的“..”代表上级⽬录。
跳转到其他驱动器的其他⽂件夹,必须加/d参数。否则⽆法跳转。
带有空格的⽂件夹(如Documents and settings,Program files等⽂件夹),给⽂件夹加引号。 如c:\>cd "documents and settings"
这样的好处是多长的⽂件名都可以全部显⽰出来。
使⽤JDK命令⾏编译、运⾏Java程序时,⽤到这些。
下⾯开始介绍使⽤JDK11命令⾏编译、运⾏Java程序
javac是编译java⽂件⽤的命令,编译之后会⽣成⼀个与之前编译的⽂件⼀样名字的.class⽂件, 然后直接⽤java运⾏编译之后的.class⽂件,运⾏的时候不需要打后缀名。例如,编写⼀个Test.java⽂件,使⽤javac Test.java可以执⾏编译操作,将⽣成⼀个Test.class⽂件;使⽤java Test可以执⾏编写的代码。
如果要编译的.java⽂件不带完整路径,javac会默认在当前路径中寻要编译的.java⽂件。
java命令可以运⾏class⽂件字节码。
javac命令可以将java源⽂件编译成class字节码⽂件。
java和javac是两个东西前者是jdk版本,后者是java编译器的版本。
⽤java -version和javac -version得到的结果应⼀样,如下图:
如此,就可以开始实验了。
【若⽤java -version和javac -version得到的结果不⼀样的原因:
系统⾥边装了2个以上的jdk版本,先查看环境变量path设置,检查是否⽆效有问题。再搜索和看其位置。与环境变量path设置⽐较,是否⼀致。】
特别提⽰,若系统⾥边装了2个以上的jdk版本,设置环境变量path,jdk路径靠前的优先。
利⽤这⼀点可是实现版本切换。你可以在CMD中输⼊java –version 回车(指按下Enter键) 看⼀下当下使⽤的版本:
在命令⾏下,⼤多数java命令可以通过--help参数获得帮助信息。
包括但不仅限于java、javac、javadoc、javap、jdb、javaws、jps、jstat、jstatd等。
例如:
java –help 回车(指按下Enter键)
或者直接输⼊java命令,不带任何参数:
Java 回车
Javac编译命令和Java运⾏命令的说明
在cmd中,输⼊Javac 回车、Java 回车,可以获得这两个命令帮助信息,但是太简略了。因此进⼀步叙说如下。
javac命令是⽤来编译.java⽂件的。常⽤格式如下:
javac -d destdir srcFile
说明
1、-d destdir 指定存放编译⽣成的 .class ⽂件的路径。
若此选项省略,那么默认在当前⽬录下⽣成 .class ⽂件,并且不会⽣成包⽂件夹;如 javac JavacTest.java ,便在当前路径下⽣成了⼀个JavacTest.class的⽂件。
若使⽤-d destdir ,作⽤(i)在destdir指定的⽬录中⽣成class⽂件,(ii)且,若源代码中含有包语句将按包结构⽣成对应的⽬录结构,例如源代码中含有包语句package packA.packB; 将在destdir指定的⽬录中建⽴⼦⽬录\packA\packB,⽣成的class⽂件放到此处。
当前⽬录可以⽤“.”来表⽰,如javac -d . srcFile。【思考:javac -d . srcFile和不写 -d .即javac srcFile效果⼀样吗?请注意源代码中含有包(package)语句的情况。】
2、srcFile 是要编译的源代码⽂件名,必须有扩展名,可以带路径:路径\⽂件名.java,如 D:\TestDir\ Demo.java
3、使⽤选项 -encoding utf-8 指明源⽂件的编码格式,如:
javac -encoding utf-8 -d . SoftReferenceTest.java
4、不需要指定⽬标⽂件名,编译后以.class为扩展名 以源⽂件中所定义的类名为其⽂件名。
5、若Javac编译时提⽰ 某某某使⽤或覆盖了已过时的 API。⽐较笼统,可是使⽤参数-Xlint:deprecation ⽤来提供详细原因,定位那个语句造成的,类似如下做,将
javac -d D:\JavaTestDir\ch04 D:\JavaTestDir\ch04\DemoA.java,改为
javac -Xlint:deprecation -d D:\JavaTestDir\ch04 D:\JavaTestDir\ch03\ DemoA.java
6、-classpath或-cp参数,设定查被引⽤类的位置,可以是⽬录、jar⽂件、zip⽂件(⾥⾯都是class⽂件),jar⽂件、zip⽂件需要全路径到jar⽂件、zip⽂件。此参数会覆盖掉所有在CLASSPATH 环境变量中的设定。当你要编译的类引⽤了其它的类,但被引⽤类的.class⽂件不在当前⽬录下时,就需要通过-classpath来引⼊。
7、-sourcepath参数,指定查被引⽤类源⽂件(.java ⽂件)的位置,注意不要误认为是指定srcFile的路径。
Java命令可以运⾏class⽂件字节码。常⽤格式如下:
Java ClassFile
说明
1、常⽤选项-classpath ,可简写为-cp,⽤来指定位置:可以是要运⾏的类的路径,要运⾏的类所依赖的其他类的路径、jar⽂件、zip⽂件之类,jar⽂件、zip⽂件需要全路径到jar⽂件。它将覆盖CLASSPATH 环境变量中的设定。例如 java -cp c:\dir1\lib.jar Test
2、ClassFile 要运⾏的类的名,是“纯”名称——不能含路径且不能含扩展名.class。代码中未使⽤package(包)语句,ClassFile就是类名,若使⽤了package语句,类名前应带包名,格式为:包名.类名。
java编译器ide最新版下载程序可以通过编译,但Java命令运⾏class⽂件,报“不到或⽆法加载主类”错误的原因及处理
有如下两种情况:
1)、可⽤cmd的cd命令跳转到class⽂件所在的路径,再运⾏。javac 编译命令⽀持带路径的⽂件名,但java运⾏命令不⽀持带路径的⽂件名⽽只能是类⽂件名且不带扩展名,如运⾏ D:\TestDir\ch03 ⽬录中的DemoA.class ⽂件,
对此可以这样处理,⽅法较多:
▲⽤cmd的cd命令切换到.class ⽂件所在的⽬录 cd /d D:\JavaTestDir\ch03,再这样运⾏java DemoA
▲使⽤参数 -cp 或 -classpath,可这样执⾏java -classpath D:\JavaTestDir\ch03 DemoA 或 java -cp D:\JavaTestDir\ch03 DemoA
▲在CLASSPATH环境变量中,加⼊路径D:\JavaTestDir\ch03,再这样运⾏java DemoA
▲将.class ⽂件放到在java命令所在⽬录下,再这样运⾏java DemoA ,但⼀般不⽤。
2)、若java 源⽂件使⽤了package(包)语句,这种情况下使⽤java命令运⾏⼀个.class⽂件,需要按照package语句指定的包层次转化为的⽂件路径到.class⽂件,因此,⽤Javac命令来编译.java⽂件时可以使⽤-d选项,⽤来把把编译出的类⽂件(.class⽂件)放⼊包层次对应的⽬录中,否则需要⽤户⾃⼰来做。这种情况下⽤Java运⾏命令中ClassFile的格式为:包名.类名。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论