一、问题

使用 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 类名 命令即可。

javac 及 java命令的使用问题(错误或无法加载主类)的更多相关文章

  1. java命令提示找不到或无法加载主类

    使用java执行命令出现此错误 localhost:SocketDemo wangwei$ javac Server.java localhost:SocketDemo wangwei$ java S ...

  2. 在CMD下用java命令出现“找不到或无法加载主类”问题

    解决思路: 从网上查找原因和解决方法,有提到环境变量classpath设置问题,但多次尝试问题依旧没有解决.然后使用java -cp %classpath; Hello执行,结果正确. 使用echo  ...

  3. Java的cmd配置(也即Java的JDK配置及相关常用命令)——找不到或无法加载主类 的解决方法

    Java的cmd配置(也即Java的JDK配置及相关常用命令) ——找不到或无法加载主类  的解决方法 这段时间一直纠结于cmd下Java无法编译运行的问题.主要问题描述如下: javac 命令可以正 ...

  4. 运行Java cmd程序 找不到或无法加载主类怎么解决

    //这个问题原因有以下几种,但是和环境变量并没有太大的关系 //能够执行java 和 javac 就证明你的环境变量已经配置好了,其实 classpath 可以不配置 //假如有如下文件:H:\cod ...

  5. java环境变量---找不到或无法加载主类

    默认安装在C:\ProgramFiles\Java\jdk1.7.0目录下 环境变量配置为 PATH=.;%JAVA_HOME%\bin CLASSPATH=.;%JAVA_HOME%\lib\dt. ...

  6. javac编译后运行提示找不到或无法加载主类

    第一种常见错误: package demo_01; public class hello { public static void main(String[] args) { System.out.p ...

  7. cygwin下java报错“找不到或无法加载主类”的故障排除

    win7 下安装了java,命令行下可以正常运行,cygwin下报错:找不到或无法加载主类. 经排查发现是cygwin的~/.bash_profile中画蛇添足的配置了$CLASSPATH: JAVA ...

  8. java运行显示“找不到或无法加载主类”的解决办法(linux)

    要是配置文件的路径问题.打开终端,输入vi ~/.bashrc添加如下代码即可. # set Java environmentJAVA_HOME=/usr/local/java/jdk1.8.0PAT ...

  9. Java找不到或无法加载主类

    今天用cmd运行一下java出现了找不到或无法加载主类 的问题 javac编译可以通过   java运行不了 原因: 看一下java版本 看一下javac版本: 编译和运行环境的版本不一样报错原来是用 ...

随机推荐

  1. HTML5基础知识(3)--required属性

    1.required属性规定在提交之前要填写输入域(不能为空). 2.代码 <body> <form> 账号:<input type="text" r ...

  2. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  3. 我的第一个jsp程序-实现注册登录留言功能

    1,注册功能,包括两个页面 zhuce.jsp注册页面 <%@ page language="java" contentType="text/html; chars ...

  4. iOS开发遇到的错误 -- Label显示多行文字导致宽度和高度的问题

    Label的宽度问题 注意:UILabel下面需要设置preferredMaxLayoutWidth ,设置了autolayout和numberofline的UIlabel才显示多行 label宽度的 ...

  5. 【BZOJ 3879】SvT

    http://www.lydsy.com/JudgeOnline/problem.php?id=3879 SvT的中文是后缀虚树? 反正本蒟蒻不懂,还是$O(nlogn)$的后缀数组和单调栈维护来做, ...

  6. 【POJ 1279】Art Gallery

    http://poj.org/problem?id=1279 裸的半平面交的模板,按极角排序后维护一个双端队列,不要忘了最后要去除冗余,即最后一条边(或者更多的边)一定在双端队列里,但它不一定构成半平 ...

  7. 512M内存编译php出错

    make时错误如下 virtual memory exhausted: Cannot allocate memory make: *** [ext/fileinfo/libmagic/apprenti ...

  8. android开发之生命周期

    android开发之生命周期 一:Activity的生命周期: 这几天了了解了安卓Activity的生命周期,对于生命周期有了大概的理解: 一个Activity的生命周期也就是Activity从生成到 ...

  9. crontab 命令

    1. crontab 可以在shell里面设置一些定时任务 格式 30 * * * * nohup sh /data/admin/adsprecise/sources/providers.sh mjo ...

  10. lottery概率问题

    问题:1~n编号的彩票,要买全,等概率条件下平均要买几张要求写出算法. 回答:已经买了m张时,买中剩下的概率为1-m/n,则要买的张数为1/(1-m/n)n=2,s=1+1/(1-1/2);n=3,s ...