java.lang.ClassNotFoundException при выполнении из cmd - PullRequest
1 голос
/ 29 июля 2011

Я написал следующий код в текстовом файле и сохранил его как 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. Почему я не могу запустить свою программу и получить исключение, так как там нет ошибок?

Ответы [ 6 ]

4 голосов
/ 29 июля 2011

Команда java не принимает имя файла - она ​​принимает имя класса . Имя вашего класса просто «Exercise1» - если бы оно было в пакете, это могло бы быть что-то вроде «foo.bar.Exercise1» Затем вы отдельно указываете classpath , чтобы сообщить JVM, как искать классы, например,

java -cp D:\Projects Exercise1

... или вы можете изменить каталог и воспользоваться тем, что без указания пути к классу JVM будет включать текущий каталог в путь к классам:

cd D:\Projects
java Exercise1

РЕДАКТИРОВАТЬ: Я предположил, что вы уже исправили ошибки в коде. Не пытайтесь запустить код до его компиляции без ошибок. Ошибки происходят из-за ваших неинициализированных локальных переменных. Только значения экземпляра и статические переменные имеют значения по умолчанию.

2 голосов
/ 29 июля 2011

Не уверен, как вы скомпилировали вашу программу, она должна выйти из строя в двух следующих строках:

 char myChar;
 int myInt;

Потому что вы не указали никаких значений.

Тогда, хотя вы можете выполнить эту строку для компиляции:

javac D:\Projects\Exercise1.java

Если вы не измените classpath, вы должны быть в папке Projects, а затем запустить

java Exercise1

, поэтому он печатает значения myChar и myInt

2 голосов
/ 29 июля 2011
cd D:\Projects
java -cp . Exercise1
1 голос
/ 29 июля 2011

чтобы ответить на ваш первый пункт:

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 к переменным окружения. Для этого перейдите в системные свойства-> расширенные-> переменные окружения.

1 голос
/ 29 июля 2011

@ Джон: Он не объявил ни одного пакета на данный момент.

Самая распространенная проблема - это проблема с classpath. Попробуйте изменить путь к указанному каталогу, а затем скомпилировать. Или попробуйте изменить путь к классу из set classpat = address_of directory

Вы должны инициализировать "локальную" переменную, иначе java выдаст ошибку. Java предоставляет значение по умолчанию для переменных, но не для локальных переменных http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

0 голосов
/ 29 июля 2011

После изменения моих локальных переменных на статические переменные экземпляра я смог получить файл класса без необходимости явно инициализировать их некоторыми значениями, запустить программу и распечатать значения по умолчанию.Спасибо всем за ваши усилия.

...