Определение класса в Java - PullRequest
0 голосов
/ 08 марта 2012

Я новичок в Java и хочу уточнить: во-первых, я не уверен, могу ли я иметь 2 класса в одном файле.Мой вопрос заключается в том, что представляет собой каждый класс, когда вы видите следующую последовательность кода:

class Something {    
    //code here
} //end of class Something

public class SomethingElse {
    //NO code here!!!
    public static void main(String[] args) {
        //code of main here
    }//end of main
}

Какова роль класса Something Else и почему кода внутри нет?некоторые детали, которые я не могу получить, и мне нужна помощь ...

Ответы [ 7 ]

4 голосов
/ 08 марта 2012

Вы можете иметь более одного класса на файл, но только один класс может быть public, и его имя должно совпадать с именем файла (например, public MyClass в MyClass.java).

открытый класс файла будет виден внешнему миру , и, в частности, если в классе есть метод public static main(String[] args), его можно использовать для запуска приложения.

В вашем случаенапример, после того, как вы скомпилировали свой файл с использованием javac, вы получите файлы Something.class и SomethingElse.class.

С помощью команды java SomethingElse виртуальная машина Java сообщит следующее:

  • Найдите класс SomethingElse, который должен быть в файле SomethingElse.class.
  • вызовите метод main, соответствующий подписи, которую я вставил выше для этого класса (и поместив любой заданный аргумент в * 1020.* array).

Вы не можете вызвать java Something, потому что класс не является общедоступным и не имеет метода main.Но другие классы в вашей программе (и, в частности, SomethingElse, могут использовать ваш класс Something).

0 голосов
/ 08 марта 2012

Хотя можно иметь 2 класса в одном файле, это считается плохой практикой. Помимо снижения читабельности, в конечном итоге станет трудно выяснить, где на самом деле произошло объявление класса. Кроме того, если вы объявите переменную, относящуюся к классу, но не к классу с общим именем .java, у javac, скорее всего, возникнут проблемы с компиляцией.

Если вам нужно сделать это, убедитесь, что единственное место, которое вы используете во втором классе, находится внутри класса с общим именем .java. (Например, используйте только Something объект в классе SomethingElse). В противном случае разделите все ваши классы на отдельные файлы .java.

0 голосов
/ 08 марта 2012

Да, вы можете иметь 2 или более классов в одном файле Java.Единственное условие - только один класс будет содержать метод main с подписью (public static void main(String[] args)).И только один публичный класс будет там.И с этим публичным именем класса вы можете сохранить свой файл - имя файла должно соответствовать имени публичного класса.

0 голосов
/ 08 марта 2012

Вы можете иметь вложенные классы, но два отдельных открытых класса не допускаются. Каждый публичный класс должен находиться в своем собственном файле с именем, совпадающим с классом.

0 голосов
/ 08 марта 2012

В приведенном выше файле есть два класса SomethingElse (public) и Something.Теперь это обычно делается, когда закрытый класс вызывается изнутри публичным классом.Кроме того, в приведенном выше фрагменте кода SomethingElse представляется классом «драйвера».Другими словами, он не имеет каких-либо собственных функций / данных, но используется для выполнения (управления) другими классами (возможно, что-то в данном случае)

0 голосов
/ 08 марта 2012

Вы можете иметь несколько классов, определенных в одном файле.Однако должен быть только один класс, определенный как public, и именем файла будет это общедоступное имя класса.

В No code here!!! вы можете определить переменные класса и методы.Ваш main () является одним из таких примеров.

0 голосов
/ 08 марта 2012

Вы можете иметь только один открытый класс на файл, и файл должен иметь то же имя класса.Но у вас могут быть и другие закрытые классы, которые увидит только файловый класс.Например:

Файл Something.java

public class Something {
  //Something can access SomethingElse's doSomething method.

  private class SomethingElse {
    public void doSomething() {
    }
  }
}

class SomethingToo {

}

Файл OtherSomething.java

public class OtherSomething {
  //OtherSomething cannot access SomethingElse's doSomething method.
  //But can access SomethingToo, if they are in the same package
}
...