Java:Wstęp

Młody kandydacie na tytuł Zakonnika Klawiatury, widzę że chciałeś się czegoś pouczyć na lekcje. Świetnie się składa, ponieważ teraz poruszymy coś, co Ci się przyda jak chcesz zdać u takiego nauczyciela jak Idzik.

## Wstęp teoretyczny

Zaczniemy od tego, abyś zrozumiał, jak bardzo nic nie umiesz. Chodzi o to, abyś nie wyskakiwał z super hiper pomysłami na jakieś przełomowe gry rewolucjonizujące całą branżę na kolejne stulecie, bo i tak ci nie wyjdzie. Zajmij się może najpierw takimi informacjami, jak na przykład przechowywanie danych w pamięci.

Artykuł nie obejmuje przygotowania środowiska Javy (JDK - Java Development Kit). Niedługo napiszę artykuł, jak to załatwić.

**Java** to superhiperprawieobiektowy język, w którym przy minimalnym wysiłku możesz napisać program, który zatnie komputer twoich rodziców. Ale zrobi to w najbardziej irytujący sposób. Każdy głupi może spowodować BSoD w Windowsie, Java najpierw wyniszczy twój układ nerwowy.

Ogólnie programowanie w tym języku opiera się na tym, że cholera cię obchodzi, jak aktualnie wyglądają wszystkie adresy pamięci RAM, dysku twardego, chipsetu, procesora, tostera. psa czy słonia z serem zamiast twarzy. Dane to dane - zawsze są trzymane pod swoją nazwą i tyle musisz wiedzieć, by ich używać.

Niestety, dlatego że Java pozwala na zniszczenie RAMu w ośmiu linijkach, używa się w niej typów ścisłych. Chodzi o to, że jeżeli napiszesz że tworzysz dane typu liczbowego, to te dane mogą być tylko liczbą! Tak samo ciąg znaków (popularnie zwane majtki, profesjonalnie Stringi - zawiera szlaczki takie jak litery) jest jedynie ciągiem znaków. Jeżeli zapiszesz jakąś liczbę jako znaki, to już nic z niej nie policzysz. Dlaczego? Ponieważ Java cię nienawidzi. To już nie jest liczba, to są litery (znaki) reprezentujące to, jak ty byś tę liczbę przeczytał.

### Typy zmiennych

W Javie dane zapisujemy w zmiennych. Bo jak inaczej chcesz uzyskać dostęp do jakiegoś wyniku twojej funkcji matematycznej (która jest źle napisana, nie wiesz co robi, ale bez niej program nie działa)? Oczywiście gdzieś zapisując ten wynik! Na przykład w pamięci.

Jak już wspomniałem, musisz wiedzieć, jakiego typu tworzysz zmienną. Tak w ogóle, to tworzenie zmiennych nazywa się ich **deklarowaniem**. Pamiętaj jednak, że definiując przygotowujesz jedynie miejsce w pamięci, zmienna nie ma wartości jeżeli jej nie przypiszesz! Nie ma wartości - to znaczy nie jest równa 0 lub nie wiadomo co. Nie ma jej.

Podstawowe typy Javy to:

 short
 int
 long

Jak pewnie bystrze zauważyłeś, są to typy całkowite. Zauważ też, że zakres tych typów to od dwóch do potęgi rozmiaru minus jeden do dwóch do potęgi rozmiaru minus jeden minus jeden (-2rozmiar– 2rozmiar- 1).

 double

Łatwo zapamiętać. Ale w rzeczywistości i tak normalnie będziesz używał tylko int i double. Reszta jest potrzebna tylko wtedy, gdy pracujesz na pamięci. Zaraz, czy ja nie napisałem, że w Javie nie trzeba się martwić, jak działa pamięć? A no tak, zapomniałem - Java cię nienawidzi.

### Tworzenie zmiennych

Zmienne akurat tworzy się bardzo prosto. Pamiętaj, że każda zmienna musi mieć typ i trzeba ją nazwać. Dlatego aby stworzyć liczbę całkowitą wpiszemy:

```
int Marcin;

```

A więc stworzyliśmy zmienną nazwaną Marcin, która przechowuje liczby (z tym, że teraz nic w sobie nie ma). Postarajmy się nazwać ją jakoś bardziej sugestywnie i nadać jej wartość

```
int dwa = 2;

```

Teraz każde użycie zmiennej *dwa* to używanie jej wartości - czyli liczby 2.

### Obliczenia na liczbach

Spodziewasz się czegoś specjalnego? Tak myślałem, że nie. Dlatego w Javie używamy znaków +, - do dodawania i odejmowania, \*, / do mnożenia i dzielenia oraz bardzo przydatnego %, który oznacza resztę z dzielenia.

```
int wynik = 2 * 4 / 8 + 2;

```

Nie użyjesz tutaj natomiast takich znaków jak ^ czy :, bo służą do całkowicie czego innego!

Natomiast istnieją tricki pozwalające ci **dodawać i odejmować 1**! Wiem, że marzyłeś od dawna tylko o tym, aby twój ulubiony język(tm) pozwalał na takie obliczenia!

Jednak te obliczenia są inne. Spojrzyj na poniższy kod.

```
int liczba = 1;
liczba++;

```

*Liczba* została właśnie zwiększona o 1 i ma wartość 2. Analogicznie jest z odejmowaniem - używasz tu minusów.

## Pierwszy program

Jako Zakonnikowi Klawiatury, sama powyższa teoria ci nie wystarczy. Musisz umieć napisać program. I skończ myśleć o tej swojej głupiej grze, nawet nie wiesz jak się za nią zabrać.

Nauczę cię teraz magicznych zaklęć dających efekt, w porównaniu do powyższego.

Pamiętaj, że ten plik ma się nazywać *Program.java*. Każdy plik .java zawdzięcza swoją nazwę tej najważniejszej klasie w pliku (lub vice versa).

```
public class Program {
  public static void main(String args[]) {
    // Magiczne zaklęcia w magicznej krainie
  }
}

```

Te pięć linijek daje ci teraz tę przewagę, że one nic nie robią. Ale dzięki nim będziesz mógł włączyć poprawnie swój pierwszy program!

Zauważ linijkę z magicznymi zaklęciami. To tak naprawdę nie jest prawdziwy kod, to komentarz. Od tych dwóch ukośników Java wypina dupsko na cokolwiek, co napiszesz, i nie potraktuje tego poważnie. A więc jednym ze sposobów naprawy błędów jest komentarzowanie podkreślonych na czerwono linijek. Ale o tym później.

W klamrach ( {} ) zawarte są kolejne bloki instrukcji programu. Pamiętaj o tym - każdy blok to każdy nowy zestaw instrukcji, nawet jeżeli jest jeden w drugim. Ta myśl przyda ci się, jak zajmiesz się trudniejszymi rzeczami.

Każda instrukcja (ale nie warunek ani definicja) kończy się średnikiem. Dzięki temu możesz sprawić, że twój kod będzie jeszcze gorszy i nie będzie można go rozczytać, bo napiszesz cały program w jednej linijce. Ale pamiętaj, że tam, gdzie nie ma średnika, powinna być klamra!

Teraz policzmy coś. Na przykład 2 \* 2, żeby sprawdzić, czy nic się nie spieprzyło z procesorem.

```
 public class Program {
   public static void main(String args[]) {
     int wynik;
     wynik = 2 * 2;
   }
}

```

Zauważ, że wynik policzyłem dopiero po zadeklarowaniu zmiennej. Java na to pozwala, tak naprawdę wartość tej zmiennej możesz zmieniać tak długo i często aż ci prądu zabraknie. Pamiętaj, że ona musi najpierw istnieć.

Włącz ten program. Albo nie, bo przecież wiem, że nawet kopiuj-wklej ci się nie chciało zrobić. Po prostu wytłumaczę już, że nie stanie się to, o czym myślisz. To drugie też nie. Program nie powie ci, jaki jest wynik!

Dlaczego tak się stało? Prześledźmy działanie programu. Program włącza się (uruchamia main), tworzy zmienną "wynik" i przypisuje do niej wynik działania 2 razy 2.

I co dalej? Gratuluję, jesteśmy idiotami - zapomnieliśmy tego wyświetlić.

Program zapisał wynik w pamięci i niestety nie chce go dać na ekran. Potrzebujemy więcej magii. Użyjemy magicznej funkcji, która pozwala wyświetlić nam zawartość pamięci.

```
 public class Program {
   public static void main(String args[]) {
     int wynik;
     wynik = 2 * 2;
     System.out.println("Wynik to " + wynik);
   }
 }

```

Zauważ, że ta cholerna Java używa + nie tylko do dodawania, ale także do łączenia łańcuchów znaków! Ale przynajmniej dzięki System.out.println() jesteśmy w stanie wyświetlić linijkę tekstu *Wynik to 4.*

Jak w każdej szanującej się funkcji, argument wpisujemy w nawiasie. W tym przypadku argumentem jest nasze zdanie, które wyświetlamy.

### Cholerne dzielenie

No dobra, my tu się bawimy w liczby całkowite, a co gdy na przykład chcę sobie podzielić 1 na 2?

```
int wynik = 1/2;

```

Niestety, wynik wynosi 0. Dlaczego? Ponieważ 1 podzielić na 2 to 0,5, a int to typ całkowity. Odrzuci więc wszystko, co znajduje się po przecinku.

Radą na to jest typ zmiennoprzecinkowy. Po zamianie int na double wszystko będzie się zgadzać.

### Cholerne typy

Piszesz długi program. Już wielokrotnie użyłeś long, short, int, double, mikrofalówki i wiele więcej typów i już ci się wszystkie mieszają. Może ci się zdarzyć, że zrobisz coś takiego

```
int dwa = 2;
double trzy = dwa + 1;

```

Co w takim razie się stanie? Zupełnie nic złego! To są typy podstawowe, jak już je nazwałem. Są ze sobą zgodne, bo to wszystko liczby. Jednak licz się z tym, że przypisując wartość większego typu do mniejszego (np. long do int) lub zmiennoprzecinkowego do całkowitego (np, double do int) stracisz informacje. W pierwszym przypadku, gdy przekroczysz liczbę 2147483647 otrzymasz ją samą, a w drugim przypadku stracisz wszystko po przecinku.