从cmd执行时java.lang.ClassNotFoundException

时间:2011-07-29 05:25:24

标签: java default-value primitive-types classnotfoundexception

我在文本文件中编写了以下代码并将其保存为Exercise1.java:

import java.util.*;
public class Exercise1
{
 public static void main(String[] args)
 {
  char myChar;
  int myInt;
  System.out.println(myChar);
  System.out.println(myInt);

 }
}

然后在cmd我写

javac D:\Projects\Exercise1.java

我得到2个错误,都说声明的变量可能没有被初始化。但是如果我初始化变量,上面的代码会生成“Exercise1.class”文件。然后当我写

java D:\Projects\Exercise1

我得到java.lang.ClassNotFoundException。现在我想知道的是:

  1. 不是原始类型在Java中初始化为默认值(我认为并且读过它们)。
  2. 为什么我不能运行我的程序并获得Exception,因为似乎没有任何错误?

6 个答案:

答案 0 :(得分:4)

java命令不带文件名 - 它需要 classname 。你的类的名字只是“Exercise1” - 如果它在一个包中,它可能就像“foo.bar.Exercise1”。然后,您可以单独指定类路径,以告诉JVM如何查找类,例如。

java -cp D:\Projects Exercise1

...或者您可以更改目录并利用以下事实:如果未指定类路径,JVM将在类路径中包含当前目录:

cd D:\Projects
java Exercise1
编辑:我认为你已经修复了代码中的错误。在编译之前不要尝试运行代码而不会出错。错误是由于未初始化的局部变量造成的。只有实例和静态变量被赋予默认值。

答案 1 :(得分:2)

cd D:\Projects
java -cp . Exercise1

答案 2 :(得分:2)

不确定如何编译程序,它应该在以下两行中失败:

 char myChar;
 int myInt;

因为你没有给出任何价值。

然后,虽然您可以执行此行来编译:

javac D:\Projects\Exercise1.java

如果不更改类路径,则应该位于Projects文件夹中,然后运行

java Exercise1

所以它打印myChar和myInt的值

答案 3 :(得分:1)

@Jon:截至目前,他还没有宣布任何包裹。

最常见的问题是类路径问题。尝试更改所述目录的路径,然后进行编译。或者尝试从set classpat = address_of directory

更改类路径

你必须初始化一个“本地”变量,否则java会给出错误。 Java确实为变量提供了默认值,但没有为局部变量提供默认值 http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 4 :(得分:1)

回答你的第一点:

只有在实例化类的对象时,Java才会初始化为默认值。由于这里没有实例化类,因此它们未初始化。以下代码将变量初始化为默认值:

class Exercise{
    int myInt;
    char myChar;
    }

class Exercise1{
public static void main(String []a){
//Instantiating Exercise
Exercise e=new Exercise();
System.out.println(e.myInt);
System.out.println(e.myChar);
}
}

这里我没有初始化变量,但我实例化了练习课。在实例化时,变量的值设置为默认值。如果您是java新手并且不熟悉类,我建议您阅读一些关于Java的好书。

要回答第二个问题,可以将CLASSPATH和PATH添加到环境变量中。要执行此操作,请转到系统属性 - >高级 - >环境变量。

答案 5 :(得分:0)

将我的局部变量更改为静态实例变量后,我既可以获取类文件,又无需将它们显式初始化为某些值,并运行程序并获取打印的默认值。谢谢大家的努力。