Java Course (c)2001 Haluk Bingol

advertisement
Java Programlama Dili - 01
Tek Class ile Programlama
BU-SWE 510
Fall 2003
Dr. Haluk Bingöl
BÜ - CmpE
bingol@boun.edu.tr
meraklisina.com
© 2000-2003 Haluk Bingöl v2.23
İçerik
• Kaynaklar
• Java genel bakış
• Tek Class ile Java programlama
– Temel Tipler
– Operatörler
– Değişkenler
– Akış kontrolu
– Temel Nesneler
meraklisina.com
3
Java
Genel Bakış
meraklisina.com
4
Java nedir?
Java is a
•
•
•
•
•
simple,
object oriented,
distributed,
interpreted,
robust,
•
•
•
•
•
•
secure,
architecture natural,
portable,
high-performance,
multithreaded,
dynamic
language.
meraklisina.com
5
Java nedir? ...
• Sun geliştirdi (James Gosling)
– 1991 Embedded sistemler
– 1995 web
• Bir programlama dili
– Nesneye dayalı
– Concurrent
• Thread
• Synchronization
• Standart class kütüphaneleri
• JVM-Java Virtual Machine
meraklisina.com
6
çalışma
geliştirme
Java Çalışma Ortamı
Java
Kaynak Kodu
Java
Byte-Code
JVM
İşletim Sistemi
javac
Java
Byte-Code
Java
Byte-Code
JVM
Browser
meraklisina.com
7
Java Artılar
• Platformdan bağımsız
– Windows, Unix, Mac
– Internet Explorer, Netscape Navigator
• Standart kütüphaneler
– Grafik Kullanıcı Arayüzü
– Resim ve ses
– JDBC
– Network
– ...
meraklisina.com
8
Java Artılar ...
• Tasarım olarak internete hazır
– "Canlı" Web sayfaları
– FTP clients, POP mail clients
– HTTP
– RMI-Remote Method Invocation
– Güvenlik
– ...
meraklisina.com
9
JIT Derleyiciler
• Just In Time (JIT)
– byte-code -> makine kodu
– istemci tarafında derleme
– sadece kullanılan kısmın derlenmesi
Java
Byte-Code
JVM
Makine Kodu
meraklisina.com
10
Java ve C++ Karşılaştırması
• pointer
• struct, union, enum
• çoklu kalıtım
• preprocessor
meraklisina.com
11
Java ve C++ Karşılaştırması ...
• Byte-code
• String ve diziler birer nesne
• otomatik garbage collection
meraklisina.com
12
JDK Araçları
• Java Development Kit (JDK)
– javac
• Java derleyicisi
– appletViewer
• appletlerin çalıştığı ortam
– java
• uygulamaların çalıştığı ortam
– javadoc
• /** … */ belgelemesi
www.java.sun.com
meraklisina.com
13
Entegre Geliştirme Ortamları
• eclipse (www.eclipse.org)
• JEdit (www.jedit.org)
• Visual Age for Java -> WebSphere
• Forte -> SunONE
• JBuilder
• ...
meraklisina.com
14
Tek Class ile
Java Programlama
meraklisina.com
15
Merhaba Dünya
public class HelloWorld {
public static void main(java.lang.String[] args) {
System.out.println("Merhaba Dunya");
}
}
Kernighan & Ritchie
The C Programming
Language
1978
• Unicode
Merhaba Dunya
– 16 bit
– www.unicode
.org
out
meraklisina.com
16
Consol I/O
public class ConsolIO {
•
public static void main(java.lang.String[] args) throws
java.io.IOException {
•
System.out.println("Lütfen bir sayı girin: ");
•
int i = System.in.read();
•
System.out.println("i: " + i);
•
}
}
Kernighan & Ritchie
The C Programming
Language
1978
• Unicode
Lütfen bir sayı
girin:
34
i: 51
– 16 bit
– www.unicode
.org
consol
meraklisina.com
17
Comment
/* Bu bir açıklamadır */
/* Şimdi diziyi ters çevirelim
* Son değere dikkat
*/
/** Bu bir belgeleme açıklamasıdır */
/**
* Geçilebilir
*/
static final int GEÇ = 1;
• çok satır
• tek satır
• belgeleme
– javadoc
// Bu bir açıklamadır
int sayı = 0; // ilk değeri koy
meraklisina.com
18
Comment ...
/**
* Fibonacci serisi
* f(0) = 1
* f(1) = 1
* f(n) = f(n-1) + f(n-2)
*/
public class Fibonacci {
static final int MAX=9;
public static void main(String[] args) {
// başlangıç değerler
int nm2 = 1;
/*
int nm1 = 1;
• // ve /* kullanımı
// diğer değerler
System.out.println("1: " + nm2);
for (int i = 2; i <= MAX; i++) {
System.out.println(i + ": " + nm1);
nm1 = nm2 + nm1;
nm2 = nm1 - nm2;
}
*/
}
}
meraklisina.com
19
Temel Tipler
meraklisina.com
20
Temel Veri Tipleri
public void initVariables() {
byte byA;
byA = 5;
short shA;
shA = 7;
int intA;
long lgA;
lgA = 45L;
float ftA;
ftA = 1.2F;
ftA = 1.2f;
•
•
•
•
byte
short
int
long
double dbA;
dbA = 1.2D;
dbA = 1.2d;
dbA = 1.2;
dbA = .12e1;
dbA = .12E1;
• float
• double
char chA;
chA = '\n'; // diger \b, \t, \n, \f, \r, \", \', \\
chA = '\uffff'; // ffff hex
chA = 'A';
• char
• boolean
boolean boA;
boA = true;
boA = false;
}
meraklisina.com
21
Temel Veri Tipleri …
Büyüklükler
Tip
integer
byte
short
int
long
Uzunluk
(bit)
8-bit 2's
16-bit 2's
32-bit 2's
64-bit 2's
Varsayılan
Değer
0
0
0
0
reel
float
double
32-bit IEEE754
64-bit IEEE754
0
0
diğer
char
boolean
16-bit unicode
true/false
\u0000
False
•
•
•
•
byte
short
int
long
• float
• double
• char
• boolean
meraklisina.com
22
Temel Veri Tipleri …
Type Wrappes
•
•
•
•
byte
short
int
long
•
•
•
•
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
• float
• double
• java.lang.Float
• java.lang.Double
• char
• boolean
• java.lang.Character
• java.lang.Boolean
meraklisina.com
23
Temel Veri Tipleri …
Tipler Arası Çevrim
public void casting() {
System.out.println("\nTipler arasi cevrim");
double dbD = 7.99;
long lgL = (long) dbD;
System.out.println("dbD: " + dbD + "\tlgL: " + lgL);
short shS = -134;
byte byB = (byte) shS;
System.out.println("shS: " + shS + "\tbyB: " + byB);
String strI = "-134";
int intI = Integer.parseInt(strI);
System.out.println("strI: " + strI + "\tintI: " + intI);
Tipler arasi cevrim
dbD: 7.99 lgL: 7
shS: -134 byB: 122
strI: -134 intI: -134
strF: 7.99 flF: 7.99
String strF = "7.99";
float flF = Float.parseFloat(strF);
System.out.println("strF: " + strF + "\tflF: " + flF);
}
out
meraklisina.com
24
Operatörler
ve
İşlem Sırası
meraklisina.com
25
Operatorler ve İşlem Sırası
Gruplama
Postfix
Unary
Creation, cast
Multiplicative
Additive
Shift
Relational
Equality
Bitwise AND
Bitwise EXOR
Bitwise OR
Logical AND
Logical OR
Conditional
Assignment
Operatorler
[] . (params) exp++ exp-++exp --exp +exp -exp ~ !
new (type)exp
* / %
+ << >> >>>
< > <= >= instanceof
== !=
&
^
|
&&
||
?:
= *= /= %= += -= >>= <<= >>>=
meraklisina.com
&= ^= |=
26
Operatorler ve İşlem Sırası …
Postfix ve Prefix
public void operators() {
int count = 0;
// postfix
System.out.println("postfix ");
count = 0;
do {
System.out.println(count);
} while (count++ < 4);
// prefix
System.out.println("prefix ");
count = 0;
do {
System.out.println(count);
} while (++count < 4);
}
int j = 16;
System.out.println(++j + " " + j++ + " " + j);
meraklisina.com
27
Operatorler ve İşlem Sırası …
Postfix ve Prefix ...
public void operators() {
int count = 0;
// postfix
System.out.println("postfix ");
count = 0;
do {
System.out.println(count);
} while (count++ < 4);
// prefix
System.out.println("prefix ");
count = 0;
do {
System.out.println(count);
} while (++count < 4);
}
int j = 16;
postfix
System.out.println(++j
+ " " + j++ + " " + j);
0
1
2
3
4
prefix
0
1
2
3
out
meraklisina.com
28
Operatorler ve İşlem Sırası …
Postfix ve Prefix ...
public void operators() {
int count = 0;
// postfix
System.out.println("postfix ");
count = 0;
do {
System.out.println(count);
} while (count++ < 4);
// prefix
System.out.println("prefix ");
count = 0;
do {
System.out.println(count);
} while (++count < 4);
}
int j = 16;
System.out.println(++j + " " + j++ + " " + j);
meraklisina.com
29
Operatorler ve İşlem Sırası …
Postfix ve Prefix ...
public void operators() {
int count = 0;
// postfix
System.out.println("postfix ");
count = 0;
do {
System.out.println(count);
} while (count++ < 4);
// prefix
System.out.println("prefix ");
count = 0;
do {
System.out.println(count);
} while (++count < 4);
17 17 18
}
int j = 16;
System.out.println(++j + " " + j++ + " " + j);
out
meraklisina.com
30
Örnek
/**
* Fibonacci serisi
* f(0) = 1
* f(1) = 1
* f(n) = f(n-1) + f(n-2)
*/
public class Fibonacci {
static final int MAX=9;
public static void main(String[] args) {
int nm2 = 1;
int nm1 = 1;
System.out.println("1: " + nm2);
for (int i = 2; i <= MAX; i++) {
System.out.println(i + ": " + nm1);
nm1 = nm2 + nm1;
nm2 = nm1 - nm2;
}
1: 1
}
2: 1
}
3: 2
4: 3
5: 5
6: 8
7: 13
8: 21
9: 34
out
meraklisina.com
31
Değişkenler
meraklisina.com
32
İdentifiers
• Adlandırma
– başlangıç
• harf
• _
• para: $,£,¥
• Tanımlanmış
– değişken
– sabit
– etiket
– geri kalan
• harf
• rakam
• Örnek
counter
String
açı_2
çarpışmaKatsayısı
meraklisina.com
33
Değişkenler
• İçeriği
• Saklama
– basit tipin değeri
– local değişken
– nesne referansı
– instance değişkeni
– class değişkeni
• Otomatik garbage
collection
meraklisina.com
34
Değişkenler ...
Adlandırma
• Değişken adı
– unicode dizisi
– keyword olmamalı
– aynı scope da aynı ad olmamalı
• Convansiyon
– küçük harfle başla
isVisible
meraklisina.com
35
Değişkenler ...
Scope
• Member
• Yerel
• Metod
• Exception
meraklisina.com
36
Değişkenler ...
Ad Uzayı
// The Java Programming Language, 3ed
// Arnold, Gosling, Holmes
// pp.153
package Reuse;
class Reuse {
Reuse Reuse(Reuse Reuse) {
Reuse:
for (;;) {
if (Reuse.Reuse(Reuse) == Reuse)
break Reuse;
}
return Reuse;
}
}
• Sıralama
–
–
–
–
–
–
package
type
field
method
local variable
label
• Java da da
okunmaz kod
yazılabılır
meraklisina.com
37
Değişkenler ...
İlk değer
Değişken
Member
Local
Method
Exception
İlk değer
varsayılan / atanan
varsayılan / atanan
yok
yok
• Derleyici değişkenin değer verilmeden
kullanılmasını engeller
// hatalı
int a, b;
boolean flag = true;
if (flag ){
a = 2;
}
b = a;
meraklisina.com
38
Akış Kontrolu
meraklisina.com
39
Akış Kontrolu …
if
Karar
/* ***********
* if
*/
boolean flagKapi = true;
boolean girilebilir = false, girilemez = false;
// giriş kontrol
if (flagKapi == ACIK) {
girilebilir = true;
}
if (flagKapi == ACIK) {
girilebilir = true;
} else {
girilemez = true;
}
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
meraklisina.com
40
Akış Kontrolu … Karar ...
switch
/* ***********
* switch
*/
// asansör hangi katta
int asansorunOlduguKat = 2;
String kat;
switch (asansorunOlduguKat) {
case 1 :
kat = "Giriş Katı";
break;
case 2 :
kat = "Satış Katı";
break;
case 4 :
case 5 :
kat = "Muhasebe Katı";
break;
default :
kat = "Girilmez";
break;
}
switch (value) {
case value1:
statements;
break;
case value2:
statements;
break;
default:
statements;
break;
}
meraklisina.com
41
Akış Kontrolu …
for
Döngü
/* ***********
* for
*/
// 1'den 100'e kadar sayıları topla
int toplam = 0;
for (int i = 0; i <= 100; i++) {
toplam += i;
}
for (initialize; test; increment) {
statements;
}
meraklisina.com
42
Akış Kontrolu … Döngü ...
do
/* ***********
* do
*/
// adım atarak yaklaş
int araMesafe = 20;
do {
//etrafaBak();
araMesafe -= 10;
} while (araMesafe != 0);
do {
statements;
} while(condition);
meraklisina.com
43
Akış Kontrolu … Döngü ...
while
// tartı
while(terazi.dengelendimi()) {
terazi.agirlikEkle(10);
}
while(condition){
statements;
}
meraklisina.com
44
Diğer
break, continue
Akış Kontrolu …
atla:
while(ulasilmadi) {
mesafe++;
if (cokHafif) {
continue atla;
}
if (cokAgir) {
break disari;
}
agirlik += 10;
disari:
tamam = true;
}
• break, goto
değil
break label;
continue label;
meraklisina.com
45
Temel Nesneler
meraklisina.com
46
Temel Nesneler ...
Diziler
// basit tiplerin dizileri
int[] aylar = new int[12];
for (int i = 0; i < 12; i++) {
aylar[i] = i;
}
// Nesne dizileri
Hesap[] musteriler = new Hesap[200];
for (int i = 0; i < musteriler.length; i++) {
musteriler[i].setBakiye(0D);
}
• Diziler nesne
olarak kabul
edilir
– Basit tiplerin
dizisi
– Nesnelerin
dizisi
• Dizi sınırları
kontrol edilir
• .length
• indexler
– ilk 0
– son length-1
meraklisina.com
47
Temel Nesneler ...
Dizi dizileri
// matrix
float[][] mat;
mat = new float[4][5];
setupMatrix(mat);
for (int y = 0; y < mat.length; y++){
for (int x = 0; x < mat[y].length; x++){
System.out.print(mat[y][x] + " ");
}
System.out.println();
}
• En sol boyut
mutlaka
tanımlanmalı
// çok boyutlu diziler
float[][] mat = new float[4][];
mat[0] = new float[2];
mat[1] = new float[10];
mat[2] = new float[300];
mat[3] = new float[5];
// ilk değerler
String[] tatilGünleri = { "Cumartesi", "Pazar"};
// paskal üçgeni
int[][] pascalsTriangle = {
{1},
{1, 1},
{1, 2, 1},
{1, 3, 3, 1}
};
meraklisina.com
48
Temel Nesneler ...
String
// tanımla
String sA = "Ali";
• String bir
nesnedir
// uzunluğu
int uzunluk = sA.length;
// birleştir
String sB = sA + " topu at";
// karşılaştırma
if ( sA == sB) {
// aynı nesneyi gösteriyorlarsa
}
if ( sA.equals(sB)) {
// eşit içerikleri gösteriyorlarsa
}
int i = 3;
System.out.println("i= " + i);
meraklisina.com
49
Örnek
Muhasebe Hesabı
public class Hesap {
private double bakiye;
private long ID;
private static long lastID = 0;
/* default constructor */
public Hesap() {
this(0.0);
}
public Hesap(double acilisBakiyesi) {
bakiye = acilisBakiyesi;
ID = newID();
}
/* para yatti */
public void bakiyeArttir(double yatan) {
bakiye += yatan;
}
/* para cekildi */
public void bakiyeAzalt(double cekilen) {
bakiye -= cekilen;
}
/* para cekildi */
public double getBakiye() {
return (bakiye);
}
/* use static variable for ID */
public long newID() {
lastID++;
return (lastID);
}
}
• İlk program
segmenti
meraklisina.com
50
Özet
• Java genel
• Değişkenler
• Java - C++
• Dizi
• Consol I/O
• String
• Comment
• Akış kontrol
• Temel veri tipleri
• Operatörler ve İşlem
Sırası
• Lab
Tek class (+ dizi + String) ile program
yazabilir hale geldik
meraklisina.com
51
Kaynaklar
• The Java Programming Language, 3e
Arnold, Gosling, Holmes
Addison-Wesley, 2000
• The Java Tutorial
Object-Oriented Programming for the Internet
Campione, Walrath
Addison-Wesley, 1996
• The Java Tutorial, 3e
A Short COurse on the Basics
Campione, Walrath
Addison-Wesley, 2001
• Java How to Program, 4e
Dietel & Dietel
Prentice Hall, 2002
• www.java.sun.com/docs/books/tutorial
meraklisina.com
52
Download