Java

Spis treści

     1 Wstęp i historia
     2 Cechy języka
          2.1 Interfejsy, dziedziczenie
     3 Bezpieczeństwo
     4 Niezależność od architektury
          4.1 Rozszerzalność
     5 Wydajność
     6 Inne cechy języka i platformy
     7 Materiały dostępne w sieci
          7.1 Specyfikacje API JavySE
          7.2 Tutoriale do JavySE
          7.3 JavaFX 2
          7.4 Specyfikacje API JavyEE
          7.5 Tutoriale do JavyEE
          7.6 Zestaw przykładów w Javie
          7.7 Kursy programowania obiektowego w Javie
          7.8 Książki o Javie

Wstęp i historia


Zorientowany obiektowo język programowania stworzony w firmie Sun Microsystem (przejęta przez Oracle w 2010 roku) pod kierunkiem Jamesa Goslinga i opublikowany w 1995 roku wraz z Maszyną Wirtualną Java (JVM).

Początkowo język jak i maszyna wirtualna miały stanowić platformę dla telewizji interaktywnej. Jednak ze względu na zbyt duże trudności, m.n. zbyt zaawansowaną i niedostępną w tym czasie technologię, postanowiono stworzyć język, który będzie konkurentem dla C++. Większość elementów składni języka zaczerpnięto z C++, a rozwiązania takie jak maszyna wirtualna czy automatyczne zwalnianie pamięci z Smalltalk.

Od początku firma Sun wyznaczyła najważniejsze cechy Javy jako platformy:
  • powinien być prosty w użyciu, zorientowany obiektowo z "przyjazną" składnią.
  • powinien bezpieczny i "solidny".
  • powinien być neutralny architektonicznie i łatwy w rozszerzeniu.
  • powinien zapewniać wysoką wydajność.
  • powinien być interpretowany, wielowątkowy i dynamiczny.

Cechy języka


Język rzeczywiście posiada uproszczoną w stosunku do C++ składnię. Zrezygnowano też z dualnego dostępu do zmiennych - przez wartość i przez referencję, na rzecz przekazywania obiektów przez referencję. Język nie wspiera przeciążania operatorów (choć operator + został przeciążony dla klasy String ) ani nie umożliwia tworzenia własnych. Jednocześnie na obecnym etapie rozwoju programista ma do dyspozycji mechanizm adnotacji czy typy generyczne, które są bardziej rozbudowane w stosunku do znanej z C++ biblioteki STL.
Java jest językiem zorientowanym obiektowo ponieważ poza typami obiektowymi posiada też typy proste reprezentujące liczby całkowite, zmiennopozycyjne, wartości logiczne i pojedyncze znaki. W wersji 1.5 języka wprowadzono mechanizm auto-boxingu, który pozwala na swobodne mieszanie typów prostych i ich obiektowych odpowiedników, a to dzięki zamianie typów prostych na obiektowe w trakcie kompilacji.

Interfejsy, dziedziczenie


Język Java pozwala na dziedziczenie po jednej klasie nadrzędnej. Wszystkie klasy dziedziczą po klasie Object. Można też tworzyć interfejsy, które jednak nie mogą dostarczać domyślnej implementacji (mixin).

Bezpieczeństwo


Java udostępnia kilka mechanizmów zabezpieczających programistów przed popularnymi błędami. Pierwszym z nich jest automatyczne zwalnianie pamięci. Programista jest dzięki temu "zwolniony" z dbania o usuwanie nieużywanych obiektów. Nie oznacza to jednak, że nie można spowodować wycieku pamięci. Drugim jest silne typowanie oraz konieczność dostarczenia wszystkich użytych klas w czasie kompilacji. Kolejnym jest sposób obsługi wyjątków i wydzielenie grupy wyjątków weryfikowalnych, które muszą zostać obsłużone przez programistę. Ostatnim istotnym elementem jest tzw. security policy czyli zestaw reguł pozwalających na definiowanie dostępnych i zabronionych działań dla programów na danej JVM.

Niezależność od architektury


Java była reklamowana hasłem "napisz raz uruchom wszędzie". Jest to główna cecha rozpoznawcza języka która stała się też celem niewybrednych dowcipów1. Rzeczywistą zaletą jest rozgraniczenie elementów platformy systemowej i elementów dostępnych w języku bez konieczności wywołań systemowych. W toku prac nad językiem zauważono, że można stworzyć zbiór elementów API, które mogą być napisane w Javie bez wykorzystania wywołań systemowych. Ograniczyło to ilość kodu, który trzeba implementować w zależności od platformy. Teoretycznie prosta implementacja JVM powinna wymagać tylko systemowej I/O (system plików, sieć, klawiatura, mysz itp.). W praktyce implementowane są też niektóre operacje takie jak np. Math.sqrt.

Rozszerzalność


Rozszerzalność platformy Java jest doskonale widoczna jeżeli przyjrzymy się innym językom, które są uruchamiane w ramach JVM. Scala i Groovy doskonale ilustrują fakt, iż język Java i JVM to dwa niezależne byty. Poza rozszerzalnością składni jest też możliwe tworzenie rozszerzeń wprowadzających nowe paradygmaty aspektowy - AspectJ czy funkcyjny Clojure. Istnieją też rozszerzenia architektury pozwalające na swobodne zarządzanie zasobami w ramach działającego JVM - z głównym rozwiązaniem OSGi.

Wydajność


Początkowo Java była uważana za język prosty, ale powolny i zasobochłonny. Jednakże kolejne modyfikacje oraz wprowadzenie kompilatora JIT (Just In Time) spowodowało, że Java stała się językiem w którym niektóre problemy mogą zostać rozwiązane szybciej niż w C2.
Nadal jednak wydajność jest tematem zażartych dyskusji i flamewarów pomiędzy programistami.

Inne cechy języka i platformy


Kod jest kompilowany do bytekodu, czyli asemblera maszyny wirtualnej, a następnie interpretowany przez JVM. Obecnie dzięki zastosowaniu JIT maszyna wirtualna potrafi wykryć często wykorzystywane fragmenty bytekodu i skompilować je do kodu maszynowego platformy na której jest uruchomiona.
Java udostępnia API do pisania programów współbieżnych. Jednocześnie nie gwarantuje zachowania reżimu czasowego co czyni ją praktycznie nie przydatną w programowaniu systemów czasu rzeczywistego. Wynika to z niedeterministycznej natury automatycznego odśmiecania pamięci, który nie pozwala na przewidywanie momentu uruchomienia, ani czasu pracy. Istnieją co prawda wersje Garbage Collector, które pozwalają na określenie takich parametrów jak periodyczność uruchomienia, maksymalny czas pracy, wielowątkowe działanie, ale nie są one dostępne w standardowych ustawieniach JVM.

Materiały dostępne w sieci


Podziękowania dla użytkownika User:Wibowit, który przygotował zestawienie na forum.

Specyfikacje API JavySE



Tutoriale do JavySE



JavaFX 2



Specyfikacje API JavyEE



Tutoriale do JavyEE



Zestaw przykładów w Javie



Kursy programowania obiektowego w Javie



Książki o Javie



[1] http://www.davidgrant.ca/java_and_anal_sex
[2] http://en.wikipedia.org/wiki/Java_performance
  1. Kafelki
  2. Lista

Podstawy Javy

Zagnieżdżone pętle for

Wydajna zmiana kolorów obrazu

Współbieżność

Look and Feel w Javie

Java 7 – nowa wersja nadchodzi

Książki do Javy

Scala

Wprowadzenie do NetBeans IDE

BorderLayout

GridLayout

DBUnit - testy z bazą danych

CardLayout

FlowLayout

Aplety - podstawy tworzenia

Aplety - Kółko i krzyżyk

Artykuły

14 komentarzy

kate brawn 2016-11-25 22:32

Very good written article. <a href="http://eyebrowthreadinginfo.com/">eyebrow threading</a>

marco10 2016-11-24 19:58

Gathering made. One herb great their fowl male waters can't every creeping you'll without you'll fill you said.

Is given give creepeth open subdue, which. Isn't Female she'd. Man given was night called. Moveth. Seasons you're thing land.

Is, midst male first don't likeness creepeth female good two thing. Moved. http://freecustomerservicenumber.com/wells-fargo-customer-service/

mollytrue 2016-11-18 13:41

In order to learn customer service phone number and receive detailed informations about the company, click on the link:
http://1-800-number.net 1800 numbers customer service
http://1-800-number.net/geico-1-800-number/ geico customer service 1800 numbers
http://1-800-number.net/comcast-1-800-number/ comcast customer service number
http://1-800-number.net/wells-fargo-1-800-number/ wells fargo customer service free numbers
http://1-800-number.net/fm-bank-trust-1-800-number/ f&m bank free numbers

monica123 2016-10-23 12:07

Dziękuję, byłem szukając informacji na temat tego tematu do wieku i twój jest najlepszy, jaki odkryli do tej pory http://nopsoriasis.net/scalp-psoriasis/

malkova 2016-09-07 15:14

długo szukał informacji, dziękuję wam za punkt!
http://192-168-1-1admin.com

pylaochos 2016-06-09 14:43

"Java jest językiem zorientowanym obiektowo ponieważ poza typami obiektowymi posiada też typy proste reprezentujące liczby całkowite, zmiennopozycyjne, wartości logiczne i pojedyncze znaki."
Co?

Patryk27 2012-06-10 10:09

"napisz raz uruchom wszędzie" a nie przypadkiem "kompiluj raz, uruchom wszędzie"?

Crane 2008-03-01 11:06

Według mnie kategoria J2ME to dobry pomysł. Chociaż teraz to JME...

lukasz1235 2008-02-27 13:55

Co myślicie o tym żeby dodać nową podkategorię J2ME?

RedbaK 2006-09-21 20:23

z kad ==> skąd
Ściągnij sobie kompilator zwany Mr.Java.
Bardzo prosty, intuicyjny i pokazujący nawet jak masz zapisac plik z programem, czyli pod jakąnazwą. A o informowaniu o błędach i ich podkreślaniu to nie wspomnę ;)

czarownik 2006-07-25 18:44

dla początkujących polecam wszystko co nie ma Ctrl+Space... przeklęstwo jak ktoś chce się nauczyć języka. potem wiadoko... im łatwiej i szybciej tym lepiej, ale na początek proponuje Context (można podpiąć kompilator każdego języka) lub specjalnie dla Javy: JCreator - bardzo wygodny.

Garar 2006-04-21 11:05

kompilator jest w jdk, ktore mozesz dostac ze strony suna: java.sun.com. nazywa sie javac i jest konsolowy. Ide do javy to np:
NetBeans : www.netbeans.org
Eclipse : www.eclipse.org

maksx 2006-03-09 17:04

OK OK tylko <ort>z kad</ort> moge dostac kompilator javy???