Wykład 2: Podstawy Języka

advertisement
Wykład 2: Podstawy Języka
1.wprowadzenie
8.obsługa błędów
2.podstawy języka
9.kolekcje obiektów
3.sterowanie
10.wejście i wyjście
4.inicjacja i sprzątanie
11.równoległość
5.kontrola dostępu
12.interfejs graficzny
6.dziedziczenie
13.programy sieciowe
7.polimorfizm
14.obsługa baz danych
15.obsługa serwerów
Wykład 2: Zagadnienia
●
obiekty: deklaracja, tworzenie,
usuwanie
●
typy podstawowe, tablice
●
pola i metody klas
●
pola i metody statyczne
●
●
pierwszy program: kompilacja i
interpretacja
typowe zadania programistyczne
Deklaracja Obiektu
Wszystko w Javie jest obiektem.
Deklaracja tworzy odwołanie do obiektu s
typu/klasy String:
String s
Obiekt wskazywany przez s nie istnieje:
s.length()
Stworzenie Obiektu
Deklaracja oraz inicjacja odwołania do
obiektu s typu/klasy String:
String s = new String(“abc”);
Teraz s wskazuje na konkrety obiekt
utworzony w pamięci, o wartości “abc”.
s.length()
Przechowywanie Danych
1.rejestry – szybka pamięć wewnątrz
procesora, ograniczona liczba,
niedostępne z programu
2.stos - część RAM, szybki dostęp,
rozmiar i czas życia danych znane w
czasie kompilacji, odwołania do
obiektów
3.sterta – część RAM, rozmiar i czas życia
danych nieznane w czasie kompilacji,
składowanie obiektów, wolniejszy dostęp
Przechowywanie Danych
4.obszar statyczny: część RAM, dane
dostępne w dowolnym momencie z
programu, słowo kluczowe static
5.obszar stałych: w kodzie programu,
ewentualnie w pamięci ROM
6.obszar spoza RAM: obiekty trwałe
(zachowują stan między wywołaniami
programu), zamiana obiektów w
strumień bajtów (do przesłania/zapisu).
Typy Podstawowe: Powód
Tworzenie obiektów “małych” na stercie
(przez new) nie jest efektywne.
Integer i = new Integer(1);
Typ podstawowy:
int i = 1;
Tworzy się zmienna która nie jest
odwołaniem do obiektu, a wartością.
Typy Podstawowe: Lista
typ
rozmiar
boolean
klasa
Boolean
char
16
Character
byte
8
Byte
short
16
Short
int
32
Integer
long
64
Long
float
32
Float
double
64
Double
void
Void
Typy Podstawowe: Własności
Rozmiar każdego typu jest niezmienny –
programy są przenośne.
Wszystkie typy numeryczne są ze
znakiem.
Klasa opakowująca typ podstawowy
pozwala umieszczać dane na stercie:
Integer i = new Integer(1);
Zasięg Zmiennych
Zasięg przez położenie nawiasów:
{
int i = 1;
// dostepny i
{
int j = 2; // dostepne i, j
}
i = j
}
// dostepny i
Przesłanianie Niedozwolone
Komunikat błędu – zmienna już istnieje:
{
int i = 1;
{
int i = 2; // niedozwolone
}
}
Zasięg Obiektów
Życie obiektów jest inne od życie
zmiennych typów podstawowych.
{
String s = new String(“abc”);
}
Odwołanie s nie istnieje poza zasięgiem
deklaracji, natomiast obiekt wskazany
przez s będzie nadal istniał.
Niszczenie Obiektów
Obiekty utworzone przez new istnieją tak
długo jak są potrzebne.
Co nas chroni przed przepełnieniem
pamięci i zablokowaniem programu?
Odśmiecacz pamięci sprawdza obiekty
utworzone przez new i wykrywa te, do
których nie ma więcej odwołań.
Tworzenie Typów: Klasy
Nowe typy obiektów zawarte są w klasach.
Deklaracja klasy:
class NazwaTypu { ... }
Utworzenie obiektów klasy:
NazwaTypu a = new NazwaTypu();
Definicja Klasy
Klasa zawiera dwa rodzaje elementów:
1.pola – obiekty dowolnego typu lub
zmienne typów podstawowych
2.metody – komunikaty które może
otrzymać dany obiekt
Pola Klas
Każdy obiekt uzyskuje własny obszar
pamięci dla swoich zmiennych:
class TylkoDane {
int i;
float f;
Double d;
}
Obiekty nie dzielą zmiennych między sobą.
Odwołania do Pól
Utworzenie obiektu klasy:
TylkoDane d = new TylkoDane();
Odwołanie do pól obiektu d:
d.i = 47;
d.f = 1.1f;
d.d = new Double(1.0d);
Wartości Domyślne Pól
Gdy pole jest typu podstawowego, jeśli nie
zainicjowane, to otrzyma wartość
domyślną:
boolean false
char
'\u0000'
byte
(byte)0
short
(short)0
int
0
long
0L
float
0.0f
Wartości Domyślne Pól
Inicjalizacja jest gwarantowana dla
zmiennych:
typu podstawowego
✔ deklarowanych jako składowe klas
Inicjalizacja nie dotyczy zmiennych
lokalnych – które nie są polami w klasie.
int i;
✔
Metody Klas
Metoda określa komunikat które może
otrzymać dany obiekt:
typZwracany nazwa(/*argumenty*/) {
ciało metody
}
Deklarowane tylko jako części składowe
klas, i wywoływane na rzecz obiektu.
Deklaracja Metody
typZwracany to typ wartości zwracanych
przez metodę.
argumenty to typy i nazwy lista
argumentów przekazywanych metodzie.
ciało metody to definicja metody.
Wywołanie Metody
Podanie nazwy obiektu, kropki, nazwy
metody, i jej listy argumentów:
nazwaObiektu.nazwaMetody
(arg1,arg2)
Inaczej wysyłanie komunikatu do obiektu.
Obiekt musi być upoważniony:
nazwaObiektu.nieIstnieje()
Argumenty Metody
Lista obiektów i ich klas które mogą być
przekazane metodzie:
int pamiec(String s) {
return s.length()*2;
}
s jest referencją do obiektu.
length jest jedną z metod łańcucha s.
Wynik Metody
return pełni dwie funkcje:
1.określa opuszczenie metody
2.określa wartość zwracaną (jeśli jest)
Typ void - metoda nie zwraca wartości:
void nic1() { return; }
void nic2() {}
Wykorzystanie Innych Klas
Gdzie znajduje się klasa?
✔
✔
w tym samy pliku źródłowym – użyć
użyj klase ArrayList:
import java.util.ArrayList;
✔
wszystkie w pakiecie java.util:
import java.util.*;
Pola Statyczne
Deklaracja pól statycznych:
class StaticTest {
static int i = 47;
}
st1.i i st2.i są te same:
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
Odwołania do Pól Statycznych
Odwołanie przez obiekty klasy:
st1.i++
Odwołanie bez obiektu klasy:
StaticTest.i++
Metody Statyczne
Możliwość wywołania metody bez
konieczności tworzenia obiektu (np. main):
class StaticFun {
static void incr() {
StaticTest.i++
}
}
Wywołanie Metod Statycznych
Przez obiekt:
StaticFun sf = new StaticFun();
sf.incr();
Przez klasę:
StaticFun.incr();
Pierwszy Program
Program wyświetla na ekranie bieżącą
datę:
//HelloDate.java
import java.util.*;
public class HelloDate {
public static void main(String [] args) {
System.out.println(“Dzisiaj jest: “);
System.out.println(new Date());
}
Komentarze
komentarz:
//HelloDate.java
inny rodzaj komentarza to:
/* To jest komentarz,
* który rozciąga sie na
* wiele wierszy */
Pakiety
dodatkowe klasy/pakiety które będą
potrzebne w kodzie programu:
import java.util.*;
Pakiet który jest włączany automatycznie
do każdego pliku Java:
java.lang
Pakiet java.lang
Pakiet java.lang zawiera klasę System.
Klasa System zawiera pole:
static PrintStream out;
Klasa PrintStream zawiera metodę:
void println(String x)
Pierwszy Program
deklaracja klasy HelloDate:
public class HelloDate {
deklaracja funkcji main:
public static void main(String [] args) {
Pierwszy Program
wyświetlenie tekstu na ekranie:
System.out.println(“Dzisiaj jest: “);
uzyskanie i wyświetlenie bieżącej daty:
System.out.println(new Date());
Kompilacja i Uruchomienie
Kompilacja programu:
javac HelloDate.java
Uruchomienie programu:
java HelloDate
Nazewnictwo
Nazwy klas rozpoczynają się od dużej
litery, każdy kolejny wyraz też z dużej
litery:
HelloDate
Nazwy zmiennych/pól/metod podobnie,
ale pierwsza litera jest mała:
liczbaCalkowitaKolorow
Typowe Zadania
1.Wyświetlanie danych na ekranie
2.Przyjmowanie danych z klawiatury
Wyświetlanie Danych
class Wyswietl {
public static void main(String args[]) {
String s = “1 mila to ”;
double d = 1.609;
System.out.print(s);
System.out.print(d);
System.out.print(“ kilometrow\n”);
}
}
Wyświetlanie Danych
definicja klasy Wyswietl:
class Wyswietl {
Klasa musi być zapisana w pliku o tej
samej nazwie: Wyswietl.java
Wyświetlanie Danych
definicja funkcji main: args jest tablicą
argumentów z linii poleceń:
public static void main(String args[]) {
public - dostępność funkcji
static - przypisanie funkcji do klasy
void
- typ zwracany przez funkcję
Wyświetlanie Danych
s to zmienna typu String
d to zmienna typu double
obie zmienne są inicjowane
String s = “1 mila to ”;
double d = 1.609;
Wyświetlanie Danych
zmienna s zostaje wyświetlona
zmienna d zostaje wyświetlona
tekst “ kilometrow\n” zostaje wyświetlony
ze zmianą nowej linii:
System.out.print(s);
System.out.print(d);
System.out.print(“ kilometrow\n”);
Przyjmowanie Danych
import java.io.*;
class Przyjmowanie {
public static void main(String args[]) {
String input = “”;
BufferedReader in = new BufferedReader
(new InputStreamReader(System.in));
System.out.println(“Wpisz tekst: “);
Przyjmowanie Danych
try {
input = in.readLine();
} catch(IOException e) {
System.out.println(e);
}
System.out.print(“Wpisales: “);
System.out.println(input);
}
}
Przyjmowanie Danych
Importujemy pakiet biblioteczny java.io:
import java.io.*;
Deklaracja klasy Przyjmowanie:
class Przyjmowanie {
Przyjmowanie Danych
Deklaracja funkcji main:
public static void main(String args[]) {
Deklaracja zmiennej input typu String:
String input = “”;
Przyjmowanie Danych
Deklaracja strumienia wejściowego in:
BufferedReader in =
new BufferedReader
(new InputStreamReader(System.in));
in to obiekt klasy BufferedReader który
buforuje operacje odczytu danych.
Przyjmowanie Danych
Wypisanie tekstu ze zmianą linii:
System.out.println(“Wpisz tekst: “);
Przyjmowanie Danych
Wywołanie funkcji czytającej readLine:
try {
input = in.readLine();
} catch(IOException e) {
System.out.println(e);
}
Wyjątek IOException, prowadzi do
wyświetlenia komunikatu błędu.
Przyjmowanie Danych
Wyświetlenie tekstu i wartości zmiennej
input wpisanej przez użytkownika:
System.out.print(“Wpisales: “);
System.out.println(input);
Download