运行包含package语句的HelloWord程序报Exception in thread "main" java.lang.NoClassDefFoundError

初学Java的程序员在下载java sdk、设置环境变量后都会写一个HelloWord程序来测试自己的环境是否搭建得正确。我在之前的学习中就遇到了Exception in thread "main" java.lang.NoClassDefFoundError这个问题

  1. 使用javac命令编译源文件,ok没问题。

        2. 使用java命令来执行Hello.class,here comes the problem.


这时发现用java Hello这个命令来运行时报NoClassDefFoundError错误,乍一看觉得没有什么问题,环境变量配置应该是正确的否则的话第一步不可能成功。针对上面的异常在后面出现了com/afeiluo/Hello,貌似是一个路径。

      3.这时打开源文件Hello.java,如下所示:

package com.afeiluo;
public class Hello{
  
   public static void main(String[] args){
     System.out.println("hello world");   
 
   }
}
在Hello.java中的第一行中有一条package语句,package是java中的包。关于包的声明和使用有以下要求:

  • 为了声明一个包,首先必须建立一个相应的目录结构,子目录与包名一致。然后在需要放入该包的类文件开头声明包,形式为:

    package 包名;

    这样,在这个类文件中定义的所有类就都被装入到您所希望的包中了,例如:

    package bookexample; class A{ …… } class B extends A{ …… } public class OverrideExample{ …… }

    不同的程序文件内的类也可以同属于一个包,只要在这些程序文件前都加上同一个包的说明即可。

  • 在Java中,为了装载使用已编译好的包,通常可使用以下3种方法:

    (1) 在要引用的类名前带上包名作为修饰符。

    (2) 在文件开头使用import引用包中的类。

    (3) 在文件前使用import引用整个包。

由于我们在源文件中声明了包(package),那么我们的源文件应当放在与包名相一致的目录结构下去,而在我们的例子中源码的存放位置却是这样的:

虽然编译通过了但是如果我们当前目录下执行时,由于class文件的包信息是com.afeiluo所以直接执行会报步骤2的错误,这时只有当Hello.class文件位于包所指定的路径下时,才能使用上面的三种方式来装载包下面的类。

这时我们用java命令来执行:

注意在testJava目录下我们是通过加上包名作为修饰符来执行的并且当前目录下存在包路径。同样我们在用java命令时也可以用下面的形式来指定包路径:



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值