Pierwszy program - przygotowanie, skompilowanie i uruchomienie

 

1. Uruchom konsolę wiersza poleceń lub terminal.

2. Jeśli nie utworzyłeś dotychczas katalogu, w którym chcesz utworzyć program w j. Java, utwórz ten katalog teraz (np. w katalogu C:\Users\studentwsb)

- możesz skorzystać z komendy md <nazwa_katalogu> - np.:
C:\Users\studentwsb> md java

3. Używając polecenia cd <nazwa_katalogu>, przejdź do katalogu, w którym chcesz utworzyć swój program w języku Java.

np. c:\users\studentwsb\java

W konsoli będziesz widział następujące wiersze:
C:\Users\studentwsb> cd java
C:\Users\studentwsb\java>

4. Uruchom edytor tekstu (najlepiej taki jak Sublime Text, ale równie dobrze może to być najzwyklejszy, prosty edytor).

5. Wprowadź podany niżej kod (UWAGA: ten kod zawiera dwa błędy, aby pokazać tobie jak czytać komunikaty o błędach i jak sobie z tym radzić). Tymczasem nie pytaj o szczegóły - np. nie pytaj co oznacza zapis public static void main( string[] args ) - wyjaśnimy wszystko później.

 

Pamiętaj:

  • wszystkie nazwy muszą zaczynać się literą - na początku nazw nie mogą występować cyfry;
  • w Javie rozróżniana jest wielkość liter;
  • każdy wiersz kodu wewnątrz nawiasów klamrowych musi kończyć się średnikiem. Po średniku . mogą wystąpić dwa ukośniki // i dalej treść komentarza.
  • wszyscy programiści zgodzili się na konwencję według której nazwy klas rozpoczynamy wielką literą, a wszelkie inne nazwy metod i argumentów lub zmiennych wprowadzamy z małej litery, natomiast w wypadku nazw składających się z wielu wyrazów stosujemy format zapisu określany jako camelCase, gdzie wielkieLiteryWKolejnychWyrazach przypominają garby wielbłąda;
  • nazwy stałych zapisujemy wielkimi literami.
public class Hello {	
    public static void main( string[] args ) {
        System.out.println( "Hello!" )
    }
}

 

6. Zapisz plik jako <TUTAJ_PODAJ_NAZWĘ_KLASY>.java w folderze, do którego wszedłeś w konsoli wiersza poleceń. W naszym przypadku zapisz plik Hello.java w katalogu C:\Users\studentwsb\java.

Pamiętaj!

Nazwa pliku MUSI być identyczna z nazwą klasy oraz musi mieć rozszerzenie .java. Wielkość liter w nazwie ma znaczenie.

7. W konsoli wpisz polecenie
C:\Users\studentwsb\java> javac Hello.java

 

UWAGA: jeśli pojawi się komunikat o błędzie o podobnej treści:

error: unmappable character (0x98) for encoding windows-1250

do skompilowania projektu użyj następującej wersji polecenia:

javac -encoding utf8 Hello.java

 

Jeśli wprowadziłeś podany wyżej kod dokładnie (uwaga: ten kod intencjonalnie zawiera błędy), ujrzysz komunikat o błędzie kompilacji np. taki:

C:\Users\studentwsb\java> javac Hello.java
Hello.java:3: error: ';' expected
		System.out.println( "Hello!" )
		                              ^
1 error
C:\Users\studentwsb\java>

Zwróć uwagę, że w komunikacie tym masz informację o nazwie pliku, w którym wystąpił błąd, a także numer wiersza z błędem.

Następnie widoczny jest opis błędu - w naszym wypadku: ';' expected

a następnie wyświetlony jest wiersz kodu i w kolejnym wierszu komunikatu o błędzie widzisz znaczek ^, który pokazuje miejsce wystąpienia błędu w kodzie.

 

UWAGA:

Jeśli wystąpi inny komunikat o błędzie, skopiuj opis błędu i wklej go w wyszukiwarce internetowej. Na pewno znajdziesz opis rozwiązania problemu. Pamietaj, aby szukać odpowiedzi w artykułach, które nie są za stare - spróbuj znaleźć jak najnowszy artykuł na dany temat.

 

Jeśli ujrzałeś komunikat o błędzie ';' expected, dodaj brakujący średnik we wskazanym miejscu, następnie KONIECZNIE ZAPISZ zmodyfikowany plik, a następnie uruchom kompilator ponownie (w konsoli wersza poleceń naciśnij klawisz STRZAŁKA_W_GÓRĘ, aby uniknąć konieczności ponownego wpisywania komendy javac Hello.java). Naciśnij ENTER. Tym razem możesz ujrzeć inny komunikat o błędzie. W naszym przykładzie będzie to następujący komunikat:

C:\Users\studentwsb\java> javac Hello.java
Hello.java:2: error: cannot find symbol
	public static void main( string[] args ) {
	                         ^
  symbol:   class string
  location: class Hello
1 error
C:\Users\studentwsb\java> 

Tym razem widzimy, że błąd dotyczy słowa string, które oznacza nazwę klasy String, a nazwy klas wprowadzamy w Javie od wielkiej litery. Dlatego symbol string jest w Javie nie znany.

Przejdź do edytora. Popraw wielkość litery s. Zapisz plik.

Poprawny kod pierwszego programu wygląda tak:

public class Hello {	
    public static void main( String[] args ) {
        System.out.println( "Hello!" );
    }
}

 

Przejdź do konsoli wiersza poleceń i naciśnij klawisz STRZAŁKA_W_GÓRĘ, a następnie ENTER.

 

Jeśli wprowadziłeś kod programu bezbłędnie, po wydaniu polecenia javac Hello.java pozornie nie wydarzy się nic i w konsoli ujrzysz następującą sytuację.

C:\Users\studentwsb\java> javac Hello.java
C:\Users\studentwsb\java> 

...to dobry znak.

Użyj teraz polecenia dir, aby wyświetlić zawartość katalogu. Zauważ, że powtał nowy plik Hello.class.

C:\Users\studentwsb\java> dir
 Volume in drive C has no label.
 Volume Serial Number is B041-FA7D

 Directory of C:\Users\studentwsb\java

07/12/2017  14:15    <DIR>          .
07/12/2017  14:15    <DIR>          ..
07/12/2017  14:15               410 Hello.class
07/12/2017  14:13               122 Hello.java
               2 File(s)            532 bytes
               2 Dir(s)  220,110,069,760 bytes free

C:\Users\studentwsb\java> 

Możesz teraz użyć narzędzia java (które uruchamia interpreter Javy), aby uruchomić swój pierwszy program. W konsoli wiersza poleceń wpisz następujące polecenie (podaj tylko nazwę klasy - bez rozszerzenia) :

java Hello

...i naciśnij ENTER

Ujrzysz wynik działania programu:

C:\Users\studentwsb\java> java Hello
Hello!

C:\Users\studentwsb\java> 

 

Szczegółowy opis procesu:

Wszystkie programy napisane w języku Java są zbudowane z klas. Klasa to "szablon" - podobny do rekordu RECORD w języku Pascal albo struktury struct w języku C. W szablonie tym dane są "przechowywane" w różnych typach pól (atrybuty) - np. możesz zapisać łańcuch znaków jako atrybut typu String, wartość całkowitą jako atrybut typu int, albo wartość zmienno-przecinkową jako wartość typu float . Ponadto w szablonie tym przechowywane są także funkcje (metody), które operują na danych (atrybutach).

Przykład bardzo prostej klasy SampleClass, w której jest tylko jeden atrybut i jedna metoda:

class SampleClass {
    // atrybut 
    String str;

    // metoda
    void displayStr() {
        System.out.println( str );
    }
}

Aby możliwe było uruchomienie aplikacji, musi w niej występować klasa z zaimplementowaną metodą o nazwie main zadeklarowaną w następujący, specyficzny sposób:

    public static void main( String[] args ) {
        // ... tutaj jest kod metody main
    }
Klasa z metodą main jest "punktem wejścia" aplikacji i musi ona zostać przekazana interpreterowi Java (np. przy użyciu narzędzia java) .

Słowa kluczowe pubic static void oznaczają, że:

  • (public) interpreter wirtualnej maszyny Javy może uzyskać dostęp do metody main;
  • (static) ...zanim zostanie utworzona instancja (obiekt) tej klasy; instancja (obiekt) klasy to wykonywalna kopia "szablonu" jakim jest klasa; w przypadku pierwszego programu nie tworzymy instancji klasy, poniewać nie jest ona potrzebna, ponieważ w klasie nie są zdefiniowane żadne inne metody ani atrybuty; instancja klasy będzie potrzebna, gdy będzie konieczne uzyskanie dostępu do danych (atrybutów) oraz wykonanie funkcji operujących na danych (metod); instancję czyli obiekt klasy możemy utworzyć wewnątrz metody main po uruchomieniu programu;
  • (void) metoda main po zakończeniu działania nie zwróci żadnej wartości dla interpretera.

 

Na platformie Java możesz bez utworzenia instancji klasy (bez utworzenia obiektu danej klasy) korzystać z klasy oraz wszystkich zdefiniowanych w niej metod i atrybutów oznaczonych słowem (static), dopóki w używanych metodach nie będzie odwołania do nie-statycznych metod lub atrybutów. Ale pamiętaj, że wszystkie elementy statyczne dotyczą tylko klasy jako "szablonu", a nie są związane z poszczególnymi instancjami (obiektami). Natomiast wszystkie metody i atrybuty nie-statyczne są związane z konkretnymi instancjami (obiektami).

 

W przykładowym pierwszym programie nie tworzymy instancji klasy (obiektu), ponieważ wywołujemy wyłącznie jedną metodę System.out.println( "Hello!" ).

System to nazwa klasy umieszczonej w pakiecie podstawowych klas Javy - java.lang - który jest domyślnie w całości dostępny w każdym programie w języku Java. Do dyspozycji masz "na dzień dobry" wszystkie klasy dostępne w tym pakiecie.

Słowo out to nazwa statycznego atrybutu w klasie System. Abrybut out to obiekt klasy PrintStream, w której dostępna jest metoda println( String str ). Metodę dostępną w obiekcie możesz wywołać, pisząc nazwę obiektu, a następnie po kropce nazwę metody, a w nawiasie określając wartości parametrów metody - np. out.printn( "Hello!" ).

Statyczne metody danej klasy mogą być wywoływane z metod innych klas bez konieczności tworzenia instancji (obiektu) danej klasy. To samo dotyczy statycznych atrybutów - w metodach innych klas możemy uzyskać dostęp do statycznego atrybutu danej klasy bez konieczności tworzenia instancji (obiektu) danej klasy.

Przykład dostępu do statycznego atrybutu klasy SampleClass oraz wywołania statycznej metody:

class SampleClass {
    //atrybut statyczny
    static int value;    

    //metoda statyczna
    static void displayValue() {            
        System.out.println( value );
    }
}
...
    //wnętrze jakiejś metody w innej klasie:
    SampleClass.value = 100;    //ustaw wartość statycznego atrybutu w klasie SampleClass
    SampleClass.displayValue();    //wywołaj statyczną metodę displayValue() w klasie SampleClass
...

Aby uzyskać więcej informacji o statytcznych i nie-statycznych elementach klas, patrz Statyczne i niestatyczne elementy klasy (static vs. non-static).

 

 

________________________________________________________________________________________________________________________