博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javac 及 java命令的使用问题(错误或无法加载主类)
阅读量:6694 次
发布时间:2019-06-25

本文共 1095 字,大约阅读时间需要 3 分钟。

 一、问题

使用 javac 命令编译完.java源文件后,用 java 命令运行.class文件时,通常会遇到如下或类似的问题:

错误: 找不到或无法加载主类 HelloWorld.class

二、解决

javac命令用来编译.java源文件。没有-d选项时直接在.java源文件同级目录下生产.class文件;有加-d时会在指定路径生成.class文件且文件在与包语句对应的目录下。

  • 当指定 -d path 选项时,会在path下生成 与.java文件里的包声明结构 相同的.class文件。如,若HelloWorld.java里有package com.zsm.test;语句,则执行javac -d path HelloWorld.java后在path下会生成com/zsm/test/HelloWorld.class
  • 当没有 -d path 选项时,在与.java相同目录下生成.class文件,无论HelloWorld.java里有没有包声明语句。虽然这种方式简单,但由于没有生成与包语句对应的目录,在执行后面的java命令时比较容易出错。

java命令用来执行.class文件,有两种方法来解决开头说到的 找不到或无法加载主类问题,关键在于需要在类名前加上与包声明语句相对应的package才能正确运行。

  • 一般我们在包所在目录的最上层执行 java package.类名 即可正确运行。(若.java中没有包语句,即在默认包下,则直接在类目录下执行 java 类名 命令即可)
  • 另一方法是用-cp指定包最上层所在的目录,这样就不用切到该目录执行java命令了,即 java -cp 包最上层所在目录  package.类名 。(若没包语句,则同上)

三、总结

综上,对于.class文件(不管有没有用-d path选项),我们有两种执行java命令的方法:

  • 一种为到包最上层目录执行 java package.类名 ,如假设当前在com的上层目录下,则 java com.zsm.test.HelloWorld或 java com/zsm/test/HelloWorld 即可(注意,对于后者,若切换到com下再 java zsm/test/HelloWorld 是错的)
  • 另一种不用到包最上层目录,而是用-cp选项指之,即 java -cp 包最上层所在目录  package.类名 ,如假设当前在com目录下,则 java -cp ../  com.zsm.test.HelloWorld 即可 

若.java里没有包名,则直接在.class所在目录执行 java 类名 命令即可。

 

转载地址:http://vlcoo.baihongyu.com/

你可能感兴趣的文章
可以设置命令执行的超时时间的脚本
查看>>
SQL server权限管理和备份实例
查看>>
sql server中的用户临时表和全局临时表的区别
查看>>
大整数算法[06] 绝对值加法
查看>>
2018-2019-1 20165325 《信息安全系统设计基础》第五周学习总结
查看>>
Python 列表(list)操作
查看>>
洛谷P1417 烹调方案
查看>>
Bzoj3652 大新闻
查看>>
GridView之数据邦定(HYPERLINK)小技巧与从数据库取汇总参数传值
查看>>
面试问题总结
查看>>
HTML特殊转义字符列表
查看>>
2、NIO--缓冲区(Buffer)
查看>>
3、集合--AbstractCollection、AbstractList源码
查看>>
如何较为直观的打印二叉树
查看>>
2014年计划:
查看>>
USACO习题:Broken Necklace
查看>>
打包命令
查看>>
POJ 1679 The Unique MST 【最小生成树/次小生成树模板】
查看>>
什么是动态链接库
查看>>
mysqldump 定时任务 执行后备份的文件为空
查看>>