Punkt startowy dla aplikacji Java (nie zawsze) jest to metoda
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
Kiedy robisz java className
będzie pójść i sprawdzić, czy klasa ma główny sposób, ponieważ jej statyczne może być wywoływane bez tworzenia instancji.
Jeśli nie ma głównej metody lub głównej metody, ale nie z tą samą sygnaturą, to wyrzuci ona RuntimeException
stwierdzając, że nie znaleziono metody głównej.
Nie zapomnij przeczytać A closer look at main method.
off topic:
Rozszerzanie ten sam pomysł, nie trzeba instancję klasy odwołać swoje metody statycznej i polami.
public class MyClass {
public static int NUMBER = 10;
public static void String sayHello(){
return "Hello";
}
public void String sayBye(){
return "Bye";
}
public static void main(String[] args){
System.out.println(NUMBER); // No need for object
System.out.println(sayHello()); // No need for object
System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
}
}
Jeśli sam nazywa się w jakiejś innej klasy to może wyglądać następująco:
public class MyClassCaller {
public static void main(String[] args){
System.out.println(MyClass.NUMBER); // No need for object just refer the class
System.out.println(MyClass.sayHello()); // No need for object just refer the class
System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
}
}
Ładna dyskusja na wykorzystanie/overusage z static methods
Czy to oznacza, że mogę wywoływać statyczne funkcje w innych klasach? Czy nie bagatelizuje koncepcji enkapsulacji? –
Tak, możesz, statyczne pola/metody są powiązane z klasą (na klasę załadowaną, a nie z Object), jeśli są publiczne, możesz to zrobić –
Enkapsulacja nie jest regułą wymuszoną przez kompilator, ale zasadą, że programiści użyj, aby spróbować stworzyć lepszy kod. Język i kompilator mogą nam pomóc osiągnąć hermetyzację, ale nie zmuszają nas do tego. Nawet czysty obiektowy język, taki jak Smalltalk, nie zmusza do podążania za hermetyzacją. W Smalltalk klasy same w sobie są prawdziwymi obiektami, więc możesz wysyłać im wiadomości, na które reagują. Możesz nawet dziedziczyć je w podklasach i wywoływać superklasy podklas. –