使用javac编译java文件
过程中遇到的几个问题记录如下:
1.java -version正常显示java版本,但是javac却显示【不是内部外部命令】
原因:JAVA_HOME设置成了用户环境变量,Path里用%JAVA_HOME%时没有正确解释出来,在cmd里echo %Path%就能看出来了。
解决方法:不用JAVA_HOME,直接在Path里添加绝对路径,到bin为止。
2. 如果程序中声明了包名,即首行写了package com.xxx;
那么如果按照一般的编译方式 javac 源文件名.java
会在当前目录下生成class文件。
然后直接用:java源文件名执行,则会报错。
出现java.lang.NoClassDefFoundError
产生问题的原因
包的意义在于产生一种目录结构,所以class文件必须位于相应的目录层次结构中。
以package com.xxx为例:
一种解决方式是手工建立com文件夹,里面建立xxx文件夹,把生成的class文件放在目录结构中,并且执行的时候采用java 完整类名(即带上包名)才能够执行。
不需要手动建立文件夹的解决手段
使用编译参数 -d的解决方法:
编译的时候可以在javac命令中采用-d指定存放生成的类文件的位置。
-d . 可以在当前目录下生成。
用如下命令:
javac –d . 源文件名.java
则编译后在当前目录下,编译器会生成包的文件目录层次结构,并且把class文件放入其中。
如果不用“.”,也可以指定目录。
用java命令执行的时候需要将包的信息全部带上,即用完整的加包名的形式执行。
执行:
java 完整类名
3.import的时候,如果要引入整个包,需要用【.*】,如果不这样,则一定要具体到引用包里的哪个类。只是【import 包名】是不对的。
最新文章
- 自定义一个类似UIAlertView的弹出框
- 数据库中Count是什么意思和SUM有什么区别?
- Centos7.2 Systemd 方式编译 Mysql5.7.11
- SharedPreferences实现记住密码功能
- Oracle数据库中有关记录个数的查询
- zoj 3380 Patchouli's Spell Cards 概率DP
- 【转】Mysql三种备份详解
- 12.TCP的成块数据流
- UWP 重启App
- dedecms幻灯片调用图片模糊的解决办法
- python使用
- LDAP的用户需求
- Typescript---03 类、接口、枚举
- CISCO MDS – Useful ‘Show’ Commands
- Java 数据类型与运算符
- ASP.Net上传文件
- ssh连接docker镜像ubuntu与debian
- postgresql-死锁
- LRU算法 - LRU Cache
- 追踪溯源--抓住隐藏在NAT后面的罪犯