Java – język powstały do tworzenia
aktywnych stron internetowych we wczesnych latach
90-tych.
Dlaczego
Java?
- Uproszczony C++, jednak wolny od niektórych jego
mankamentów (brak wielokrotnego dziedziczenia, brak
struktur (tylko klasy), niemożność przedefiniowywania
operatorów, brak arytmetyki wskaźnikowej).
-
- Elegancki język programowania
zorientowanego obiektowo z wbudowaną (bardzo
dużą) biblioteką klas.
- Kontrola typów na etapie kompilacji,
mechanizm obsługi wyjątków, wbudowane w język
elementy współbieżności.
-
-
- Dostępność (darmowe!),
przenośność (Linux, Unix,
Windows, MacOS, Android,...).
- Standardowo wyposażona w procedury
graficzne (AWT, Swing,
Java Foundation Classes), dźwiękowe (które są
przenośne!). Rozszerzenia: Java3D, Java Media Framework (np.filmy).
- Zawiera pakiet Java
Database Connectivity API umożliwiający
łączenie się aplikacji i apletów z relacyjnymi bazami
danych. Pakiet ten oparty jest na powszechnym standardzie
w programowaniu baz danych - SQL.
- Uniwersalne środowisko programowania w sieci
klient-serwer: aplety - programy wykonujące się w
środowisku przeglądarki; serwlety - zapewniaja obsługę i
zarządzanie transakcjami po stronie servera (Java Servlet API);
aplikacji - mogących sięgać do Internetu (lub intranetu)
za pomocą wbudowanych bibliotek sieciwych.
- Język do tworzenie tzw. middleware - oprogramowania
pośredniczącego i integrującego działanie aplikacji
napisanych w różnych językach oraz działających (nawet
jednocześnie) na różnych platformach systemowych i
sprzętowych. Jednym z projektów jest CORBA - Common Object
Request Broker Architecture).
- Język do przetwarzania dokumentów XML (Extended Markup Language
- biznesowo zorientowana wersja HTML)
- Standardowo wyposażona w arytmetykę dowolnej precyzji.
-
- 'Kompilator' tłumaczy kod źródłowy na tzw. kod bajtowy
(kod pośredni między kodem maszynowym a kodem źródłowym)
Zaletą kodu bajtowego jest jego systemowa niezależność.
Kod bajtowy uruchamiany jest przez interpreter
(spowolnienie, jednak nieznaczne).
Większą szybkość zapewnia 'just in time compilation' lub
kompilacja do kodu maszynowego (za cenę przenośności!).
-
- Dynamiczność, niezależność od architektury, odśmiecacz
pamięci,...(http://www.javagrande.org).
- Bezpieczeństwo. Applety mają tylko ograniczony dostęp do
komputera klienta: nie mają dostępu do operacji
wejścia/wyjścia, ani do pamięci przydzielonej innym
programom (menadżerem bezpieczeństwa może to zmienić).
Aplikacje mają jednak pełne możliwości.
Java
zawiera standardowe środki do realizacji niemal
wszystkich zadań informatycznych
Literatura:
-K.Walczak Java - nauka
programowania dla początkujących
(W&W, 2002)
-P.K.McBride Java to proste (Read Me, 2002)
-K.Barteczko, Ćwiczenia z Java. Wykłady i
ćwiczenia (MIKOM,
2000)
S.Potts, Java w
zadaniach (Robomatic 2001)
-B.Eckel Thinking in Java (Helion, 2003)
-S.N.Kamin,
M.D.Mickunas, and E.M.Reingold, ‘An introduction to
computer computer science using
Java’ (MCGraw-Hill, 1998).
R.J.Davies, 'Introductory
Java for Scientists and Engineers'
(Addison-Wesley)
-D.J.Eck, ‘Introduction to
Programming Using Java’
-(tylko w wersji
elektronicznej:http://math.hws.edu/javanotes
Najprostsze
programy
Program 1.
class Hello {
// Autor
AL, 01 luty 2004
public static
void main (String [] args) {
//
Drukuje ‘Hello’
System.out.println("Hello");
}
}
Program ten musi być w zbiorze Hello.java
Kompilacja: javac
Hello.java
Uruchomienie: java Hello
Wydruk na terminalu:
Hello
Program 2.
class
Temperature {
// Autor
AL, 01 luty 2004
// Zamienia stopnie Fahrenheita na
Celsjusza
public static
void main (String [] args) {
int
temperature; //
temperatura w stopniach Fahrenheita
System.out.print(« Please
type the temperature (deg F): »);
temperature = 36;
System.out.print(temperature);
System.out.print(« deg
F is »);
System.out.print(5.0*(temperature-32.0)/9.0);
System.out.print(«
deg C»);
}//
Koniec main
}// Koniec Temperature
Komentarze
// to jest komentarz
/* a to jest
trochę dłuższy
komentarz */
/* dłuższy komentarz
może zawierać
komentarz // to jest komentarz
jednolinijkowy
jednolinijkowy */
Wyznaczanie π metodą Monte
Carlo
π/4=M/N
M=liczba
punktów wewnątrz okręgu
N=całkowita
liczba punktów
// wyznaczanie p metodą Monte Carlo
// Autor
AL., 9 luty 2004
class Monte_Carlo {
public
static void main(String[] args) {
double r1,r2;
int i,m=0,n=10000;
for (i=1;i<=n;i++){
r2=Math.random()-0.5;
if(r1*r1+r2*r2<0.25) m++;
}
System.out.println(„Wynik=”+4.*m/n);
}
}
Typy
proste
Operatory


Deklaracje, łańcuchy, proste operacje
numeryczne
- Zmienne typów prostych są
automatycznie inicjowane w momencie
deklaracji. Przyjmują wartości 0 (0.0) lub
wskazane, np.,
int i=5;
- W momencie deklaracji zmiennej typu
obiektowego tworzona jest wyłącznie referencja
to tego obiektu. Tzn. wskazane jest
miejsce w pamięci gdzie może być przechowywany
ten obiekt. Obiekty tworzymy za pomocą słowa
kluczowego new:
Button b;
b=new Button();
- Typ łańcuchowy (obiektowy).
Zbudowanie obiektu typu string jest
możliwe za pomocą użycia literału łańcuchowego
(napis w cudzysłowie):
String s = "ala ma
kota";
Operator + dokonuje
konkatenacji łańcuchów:
String t1 = "To
be ",
t2
= "or not to be";
System.out.println(t1+t2);
// drukuje: To be or not to be
Operator + dokonuje
również konkatenacji łańcucha i zmiennej typu
prostego (po uprzedniej zamianie na łańcuch):
int i=5;
String
s = "12";
System.out.println(s+i); // drukuje: 125
System.out.println("4"+"5"); // drukuje:
45
System.out.println("4"+5);
// drukuje: 45
System.out.println(4+5); // drukuje: 9
System.out.println("4"+"005");
// drukuje: 4005
System.out.println("4"+005); // drukuje:
45
System.out.println("4"+5+1);
// drukuje: 451
System.out.println("4"+(5+1)); //
drukuje: 46
System.out.println("4"*5);
// błąd
-
Stałe.
final int iterations=100;
final double x=3.99;
- Prawa strona instrukcji
podstawienia wykonywana jest bez
uwzględnienia strony lewej
Przykład
double d;
d=1/2;
(W rezultacie d
przyjmuje wartość 0.0)
Natomiast podstawienia
d=1.0/2.0;
d=1/2.0;
d= ((double) 1)/2;
dają w każdym
przypadku 0.5
- Operatory unarne ++ i --.
i=j++;
// postfix operator: i=j; j=j+1;
i=++j; // prefix operator:
j=j+1; i=j;
- Funkcje
matematyczne
Lista metod
(public static) w klasie java.lang.Math:

Przykład
użycia:
double x,y=1.5,z;
x=Math.sin(y);
z=Math.sqrt(x*x+1.0);
Instrukcje
sterujące

Instrukcja
może składać się z kilku instrukcji elementarnych
zgrupowanych w blok
przez
ujęcie ich w nawias klamrowy:
If(a<b)
{c=a+b;
d=a*b;
e=a-b;}
Program 4 (BigNum)
Program zamienia liczby (debt i pop) w łańcuchy, dzieli
je na trójki liczb i wstawia przecinki między nimi.
public class BigNum {
public static void main
(String args[]) {
long
debt = 3965170506502L;
long
pop = 250410000;
print
("Dlug narodowy USA w 1992 roku: $", debt);
print
("Populacja USA w 1992 roku: ", pop);
/*
* metoda print
przeksztalca typ long w lancuch z przecinkami
* rozdzielajacymi
trojki cyfr.
*
String str etykieta poprzedzajĄca liczbe
*
long n liczba do
sformatowania i wyswietlenia
*/
public static void print
(String str,long n) {
System.out.print
(str);
//
drukuje etykiete
String
buf = String.valueOf (n); // zmienia
Integer w String
int
start, end, ncommas, i;
int
buflen = buf.length ();
ncommas
= buflen/3;
if
(ncommas * 3 == buflen) ncommas --;
start =
0;
end =
buflen-(3*ncommas);
System.out.print (buf.substring (start, end));
for
(i=0; i<ncommas; i++) {
start
= end;
end
= start+3;
System.out.print
(",");
System.out.print
(buf.substring (start, end));
}
System.out.println (""); // Ostatnia
nowa linia
}
}
Konwersja
łańcucha
w typ Int lub Double:
int i;
double x;
String s1="123",
s2="4.56";
i=Integer.parseInt(s1);
x=Double.parseDouble(s2);
/* Konwersje odwrotne */
String s3,s4;
s3=String.valueOf(i);
s4=String.valueOf(x);
Struktura
programu, uruchamianie
W Javie program jest zestawem klas
Struktura
programu:
import
... // deklaracje importu; zwykle, ale nie zawsze
potrzebne
public
class A{
...
}
// koniec definicji klasy A
class
B {
...
}//
koniec definicji klasy B
...
Klasa:
dane i operacje (metody), które można na nich
wykonać
Program
może być zapisany w jednym albo wielu plikach
źródłowych (*.java).
W
danym pliku może znajdować się tylko jedna klasa
publiczna (public).
Plik
z klasą publiczną musi mieć (dokładnie) taką
samą nazwę jak ta klasa (A.java).
Kompilacja
(javac A.java) tworzy pliki z rozszerzeniem
.class (A.class i B.class).
Istnieją
dwa
sposoby wykonywania programów w Javie:
1)
Jeżeli klasa publiczna (A) zawiera metodę public static void
main (String [] args)
wówczas
wykonanie aplikacji odbywa się za pomocą komendy
java A (nazwa klasy publicznej).
W
ten sposób klasa A zostaje załadowana do JVM
(Java Virtual Machine) i sterowanie
zostaje
przekazane do metody main tej klasy (tworzenie
obiektów, odwołania do innych klas, metod).
2)
Jedna z klas dziedziczy klasę Applet, np..:
class
MyApplet extends Applet {
...
}
.....
Po
kompilacji (javac MyApplet.java) powstaje
MyApplet.class.
Musi
istnieć jakis zbiór HTML, w którym występuje
znacznik:
<applet
code=MyApplet.class ...> plus ewentualne
parametry i opcje.
Po
napotkaniu tego znacznika przeglądarka ładuje
plik MyApplet.class.
Wywołany
zostaje konstruktor klasy MyApplet (metoda init()).
HTML (hypertext markup
language)
HTML to język, w którym
napisane są strony domowe. Komputer
klienta, który pobiera daną strone WWW,
wczytuje tekst dokumentu w HTML i używa go
do utworzenia obrazu, który jest następnie
wyświetlany przez przeglądarkę.
<HTML>
<HEAD>
<TITLE> My first home
page</TITLE>
</HEAD>
<BODY>
My name is Adam. I am a physicist.
</BODY>
</HTML>
Test
Plik Html z
osadzonym obrazem i hiperlinkiem
<html>
<head>
<title>My first home
page</title>
</head>
<body>
<center><H1>Home
page<H1></center>
<h2>My name is Adam. I am a
physicist.<br>
</h2>
<img src="my_photo.jpg" width=244
height=326><br>
<A
href="http://spin.amu.edu.pl/~lipowski"><h3>Here
is my Home Page</h3></A>
</body>
</html>
Test
Plik HTML z osadzonym
apletem
HelloApplet.java
import
java.awt.*;
import
java.applet.*;
import
java.awt.event.*;
public
class HelloApplet extends Applet
{
public
void init(){
add (new Label(„Hello”));
}
}
Plik HTML
<HTML>
<HEAD>
<TITLE>
My
first home page</TITLE>
</HEAD>
<BODY>
My name
is Adam. I am a physicist.
I am
learning Java. Here is my first
applet.
<applet code=„HelloApplet.class”
width=200 height=200>
</applet>
</BODY>
</HTML>
Test
Aplet BigNum
import
java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class BigNum_a extends Applet
{
public void init(){
long debt =
3965170506502L;
String
wydruk="Dlug narodowy USA w 1992
roku: $";
String buf;
buf = String.valueOf
(debt); // zmienia
Integer w String
int start, end,
ncommas, i;
int buflen =
buf.length ();
ncommas =
buflen/3;
if (ncommas * 3
== buflen) ncommas -= 1;
start = 0;
end =
buflen-(3*ncommas);
wydruk=wydruk+buf.substring (start,
end);
for (i=0;
i<ncommas; i++) {
start = end;
end = start+3;
wydruk=wydruk+","+buf.substring
(start, end);
}
add (new
Label(wydruk));
}
}
Test