zoukankan      html  css  js  c++  java
  • javac 及 java命令的使用问题(错误或无法加载主类)

     一、问题

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

  • 相关阅读:
    mysql 创建数据库 添加用户 数据库授权给某用户
    Storm近年的发展
    Doris 最佳实践-Compaction调优
    pickle,struct,ujson,orjson 模块
    python用prettytable输出漂亮的表格
    nginx自定义访问日志
    事务 知识点梳理
    14
    13
    8
  • 原文地址:https://www.cnblogs.com/z-sm/p/5275364.html
Copyright © 2011-2022 走看看