Wprowadzenie
Język JAVA jest niewątpliwie jednym z najbardziej rozwijających się obecnie języków programowania. Czerpie on to co najlepsze z takich języków jak C++ czy Smaltalk przy zdecydowanie prostszej i bardziej czytelnej składni (konstrukcji) programów. Zawiera elementy programowania zarówno strukturalnego jak i obiektowego, zdarzeniowego jak i współbieżnego. Poprzez standardowe jak i rozszerzone biblioteki wkracza w różnorodne rejony zastosowań takie jak np. karty inteligentne i elektronika, systemy zarządzania bazami danych, obsługa multimediów, Internet, grafika 3D, kryptografia, itd. Co więcej JAVA jest bezpiecznym środowiskiem i umożliwia w znaczny sposób kontrolę i sterowanie bezpieczeństwem. Zdecydowanie różni się od innych języków trzeciej generacji tym, że jest językiem interpretowanym a nie kompilowanym. Powstały w wyniku kompilacji kod wynikowy nie jest programem jaki można niezależnie uruchomić lecz stanowi tzw. Beta-kod, który jest interpretowany przez Maszynę Wirtualną (JavaVM) pracującą w określonym środowisku. Ze względu na kod nie istotne jest na jakim sprzęcie będzie uruchamiana aplikacja. Ważna jest tylko Maszyna Wirtualna. Jest to ciekawy pomysł umożliwiający odcięcie się od wszystkich poziomów sprzętowo-programowych będących poniżej Maszyny Wirtualnej.
Beta-kod i maszyna wirtualna
Opis procesu tworzenia aplikacji
Proces tworzenia aplikacji w Javie można przedstawić następująco:
1. Napisanie za pomocą dowolnego edytora tekstu kodu źródłowego programu zawierającego klasę publiczną o nazwie takiej samej (dokładnie takiej samej z uwzględnieniem wielkości znaków) jak docelowa nazwa programu np. MyProgram.
2. Nagranie kodu źródłowego jako pliku o danej nazwie z rozszerzeniem .java, np. MyProgram.java
3. Kompilacja kodu źródłowego zawartego w pliku z rozszerzeniem .java do pliku
docelowego o rozszerzeniu .class zawierającego Beta-kod np.:
c:\javac MyProgram.java
javac - nazwa kompilatora programów Javy stworzonego przez firmę Sun (kompilator napisany w Javie)
MyProgram.java - kod źródłowy programu do kompilacji (UWAGA: podana nazwa pliku musi zawierać rozszerzenie .java).
W Wyniku kompilacji powstanie plik lub zestaw plików z tym samym trzonem nazwy o rozszerzeniu .class, np. MyProgram.class.
4. Uruchomienie w środowisku interpretatora Beta-kodu, np.
c:\java MyProgram
java - nazwa interpretatora Javy stworzonego przez firmę Sun,
MyProgram - nazwa pliku z Beta-kodem programu w Javie po kompilacji (UWAGA: podana nazwa pliku nie może zawierać rozszerzenia .class).
Struktura programu w języku Java
Klasę w Javie konstruuje się zaczynając od stworzenia ramy klasy:
class NazwaKlasy {
// pola
typ_zmiennej zmienna;
.
typ_zmiennej zmienna;
//konstruktor - metoda o tej samej nazwie co klasa - wywoływana automatycznie przy tworzeniu obiektu danej klasy
NazwaKlasy(typ_argumentu nazwa_argumentu){
treść_konstruktora;
}
//metody
typ_wartości_zwracanej nazwa_metody(typ_argumentu nazwa_argumentu){
treść_metody;
}
}// koniec class NazwaKlasy
Aplikacje
Aplikacja w języku Java to zdefiniowana klasa publiczna wraz z jedną ściśle określoną metodą statyczną o formie:
public static void main(String args[]){
treść_metody;
}// koniec public static void main
Tablica “args[]” będąca argumentem metody main() jest zbiorem argumentów wywołania aplikacji w ciele której znajduje się metoda. Kolejność argumentów jest następująca: argument 1 wywołania umieszczany jest w args[0], argument 2 wywołania umieszczany jest w args[1], itd. Występująca nazwa “args” oznacza dynamicznie tworzony obiekt, który zawiera args.length elementów typu łańcuch znaków. Pole “length” oznacz więc liczbę elementów tablicy. Łatwo jest więc określić argumenty oraz ich liczbę korzystając z obiektu “args”. Warto zwrócić uwagę na to, że oznaczenie “length” jest własnością tablicy (ukrytym polem każdej tablicy) a nie metodą obiektu args. Istnieje metoda klasy String o nazwie “length()” (metody zawsze są zakończone nawiasami pustymi lub przechowującymi argumenty), łatwo więc się pomylić. Dla zapamiętania różnicy posłużmy się prostym przykładem wywołania:
args.length - oznacz ilość elementów tablicy “args”;
args[0].length() -oznacza rozmiar zmiennej tekstowej o indeksie 0 w tablicy "args".
Stąd najprostsza aplikacja w języku Java może wyglądać następująco:
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); //Display the string.
}
}
Narzędzia
Javac oraz Java
W celu kompilacji i uruchomienia programu napisanego w języku Java użyto w powyższym przykładzie dwóch podstawowych narzędzi pakietu Java 2 SDK: Javac oraz java. Kompilator „javac” jest nieodzowną częścią pakietu SDK, podczas gdy interpretator „java” stanowi specyficzną dla danej platformy część pakietu środowiska uruchomieniowego Java Runtime Engine. Wynika stąd, że po instalacji pakietu Java SDK interpretator „java” będzie znajdował się zarówno w części JRE (niezależnej od tworzenia aplikacji) jak i w zbiorze narzędzi tworzenia aplikacji. Przykładowo katalog zawierający Java 2 SDK wygląda następująco:
<DIR> bin
<DIR> demo
<DIR> include
<DIR> include-old
<DIR> jre
<DIR> lib
W katalogu „bin” znajdują się liczne narzędzia obsługi aplikacji np:
javac - kompilator,
java - interpretator z konsolą ,
javaw - interpretator bez konsoli,
javadoc - generator dokumentacji API,
appletviewer - interpretator apletów,
jar - zarządzanie plikami archiwów (JAR),
jdb - debager,
Ze względu na to, że pisząc programy w Javie często korzysta się z narzędzi znajdujących się w katalogu „bin”, warto ustawić w środowisku ścieżkę dostępu do tego katalogu. Narzędzia dostępne w tym katalogu można wywoływać z licznymi opcjami. Praktycznie jednak najbardziej przydatne opcje to:
*javac:
-g ->wyświetl pełną informację debagera,
- verbose ->wyświetl wszystkie komunikaty w czasie kompilacji,
np. javac -g -verbose class HelloWorldApp.java
*java:
-cp -classpath -> gdzie -classpath katalog zawierający wykorzystywane klasy
użytkownika (lepiej ustawić zmienną środowiska CLASSPATH),
-version ->wyświetl wersję platformy Javy.
Drugim ważnym katalogiem jest katalog „jre”. Jak łatwo się domyślić w katalogu tym znajduje się Java Runtime Environment JRE - platforma Javy. Zgodnie z tym co powiedziano na początku platforma Javy składa się z Maszyny Wirtualnej oraz bibliotek API. Dlatego katalog „jre” podzielony jest na dwa podkatalogi: „bin” – w którym znajduje się interpretator „java” (ten sam co wcześniej) oraz : „lib” gdzie znajdują się spakowane biblioteki API oraz pliki konfiguracyjne i środowiskowe platformy (np. określające poziom bezpieczeństwa, czcionki, fonty, itp.).
http://download.oracle.com/javase/6/docs/api/
http://www.oracle.com/technetwork/java/javase/downloads/jdk6-jsp-136632.html
http://www.eclipse.org/downloads/
Komentarze:
//komentarz
/* komentarz */
Komentarze specjalne:
/**
*A class representing.......
*@author Jan Kowalski
*@see java.net.URL
*/
Modyfikatory klas:
public - klasa dostępna dla wszystkich innych klas (normalnie dostępna tylko w swoim pakiecie)
final - klasa "finalna", nie można po niej dziedziczyć
abstract - klasa abstrakcyjna z "pustymi" metodami
Dziedziczenie klas:
public class MojaKlasa extends KlasaNadrzędna {
int max=100;
public int getMax() {
return max;
}
}
Słowa kluczowe super i this:
super - odwołanie do klasy przodka (np. super.wykonaj_metoda())
this - odwołanie do obecnego obiektu klasy (np. this.a = a)
Tworzenie obiektów:
Do tworzenia obiektów używamy słowa kluczowego new.
np. i = new Integer(100);
obiekt = new MojaKlasa("Jan", Kowalski");
prost = new Trojkat(15,20,25);
Korzystanie z pakietów:
Posługiwanie się klasami pakietu bez jego importowania:
java.util.Vector v = new java.util.Vector();
Import wszystkich klas i interface'ów z pakietu:
import java.awt.*;
Import tylko jednej klasy:
import java.applet.Applet;
Standardowe pakiety:
java.applet - tworzenie appletów
java.awt - okienka
java.beans - uniwersalne komponenty
java.io - operacje wejścia/wyjścia
java.lang - podstawowe klasy
java.math - wielkie liczby
java.net - współpraca z siecią
java.rmi - przetwarzanie rozproszone
java.security - bezpieczeństwo
java.sql - zapytania do baz danych
java.text - operacje na tekście
java.util - klasy pomocnicze
Pętle, warunki, itp.:
for, while, if.....else, switch....case
Wyjątki:
Wyjątek to zdarzenie, które pojawia się podczas wykonywania programu i powoduje przerwanie normalnego przepływu sterowania (wykonywania kolejnych instrukcji). Wyjątki pojawiają się kiedy nastąpiła jakaś nieprawidłowa sytuacja (np. dzielenie przez 0)
Zalety wyjątków:
oddzielenie kodu obsługującego błędy
propagowanie błędu przez kolejne metody
możliwość grupowania błędów
throw - wysłanie wyjątku, przerwanie działania metody
throws - deklaracja możliwości wystąpienia w danej metodzie wyjątku
try - catch - blok służący przechwyceniu wyjątków
finally - blok ten wykonuje się bez względu na to czy wystąpił wyjątek czy nie
public int doSth(String str)
throws IOException {
try {
Integer.parseInt(str);
}catch (NumberFormatException e){
throw new IOException("wrong name");
}
FileStream fs = new FileStream(FN+str);
}
Przykłady:
Przykład 1
/**
* Klasa Example
* @author Andrzej Chabraszewski
* @version %1%
*/
public class Example{
/**
* Pole typu private - 8-bitowa liczba calkowita
*/
private byte fl;
/**
* Ustawia wartosc pola fl
*
*/
void setFl(int fl) {
this.fl=(byte)fl;
}
/**
* Zwraca wartosc pola fl
*
* @return wartosc pola fl
*/
public int getFl() {
return fl;
}
/**
* Glowna metoda. Tworzy obiekt klasy Example, ustawia wartosc pola fl
* na podstawie parametru z linii zlecen.
*/
public static void main(String[] argv){
Example e = new Example();
e.setFl(Integer.parseInt(argv[0]));
System.out.println(e.getFl());
}
}
Przykład 2
public class Wypelnianie{
public static void main(String[] argv){
int i;
int j;
Integer[] tab1 = new Integer[0];
for (i=0;i<argv.length;i++){
Integer[] tab2 = new Integer[i+1];
for (j=0;j<i;j++){
tab2[j]=tab1[j];
}
try {
tab2[i]=Integer.valueOf(argv[i]);
}catch(NumberFormatException e){
System.out.println("BLAD");
System.exit(0);
}
tab1=tab2;
}
for (i=0;i<argv.length;i++){
System.out.println(tab1[i]);
}
}
}
Bibliografia:
Jerzy Proficz, Kurs języka Java, skrypt do przedmiotu Języki programowania równoległego 1998-2000
Jacek Rumiński, Język Java, skrypt do przedmiotu Język Java, 1999
Dokumentacja języka Java na stronach java.sun.com