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
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
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.
[1] http://www.davidgrant.ca/java_and_anal_sex
[2] http://en.wikipedia.org/wiki/Java_performance
7 komentarzy
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ę ;)
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.
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
Według mnie kategoria J2ME to dobry pomysł. Chociaż teraz to JME...