0% found this document useful (0 votes)
22 views37 pages

BilgeAdam Java 04

Uploaded by

Bilgi güneş
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views37 pages

BilgeAdam Java 04

Uploaded by

Bilgi güneş
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Java Eğitim

Hafta-03-01

Hasan Kadir Demircan


Java ile Temel Programlama
- Derleme Hataları
Genel bakış - Çalışma Zamanı Hataları
- Mantıksal Hatalar
Derleme Hataları
Nedir?
● Java'da programın çalışmasını durduran bir soruna hata denir.

● Java'da bazen sözdizimi(syntax) sorunları nedeniyle hatalar


meydana gelirken, bazen söz diziminde herhangi bir yanlışlık
yoktur, ancak yine de programın yürütülmesi sırasında bazı
hatalarla karşılaşıyoruz.

● Sözdizimi sorunları olan hatalar derleme zamanı hataları


olarak bilinirken, çalışma zamanında meydana gelenler
çalışma zamanı hataları olarak bilinir.
Derleme Hataları
Nedir?
● Hatalı söz dizimi nedeniyle oluşan hatalar, derleme zamanı
hataları olarak bilinir veya bazen Java'da sözdizimi hataları
olarak da adlandırılır.

● Derleme zamanı hatalarına örnekler arasında şunlar yer alır;


Derleme Hataları
● Java kaynak dosyası adı uyuşmazlığı (Java source file name
mismatch)

● Uygun olmayan kasa (Improper casing)

● Eşleşmeyen parantezler (Mismatched brackets)

● Eksik noktalı virgül (Missing semicolons)

● Yöntem tanımsız (Method is undefined)


Derleme Hataları
● Değişken önceden tanımlanmış (Variable already defined)

● Değişken başlatılmadı (Variable not initialized)

● Tür uyuşmazlığı: dönüştürülemez (Type mismatch: cannot


convert)

● İade türü gerekli (Return type required)

● Ulaşılamaz kod (Unreachable code)


Class and source file mismatch
● Dosya sisteminde bulunduğu şekliyle Java kaynak dosyasının
adı, sınıf bildiriminde tanımlandığı şekliyle genel Java sınıfının
adıyla tam olarak eşleşmelidir. Değilse, derleyici aşağıdaki
Java derleme zamanı hatasını üretir:

● The public type problemcode must be defined in its own


file
Class and source file mismatch
● Java burada hoşgörü göstermez - kaynak dosya adı, sınıf
bildiriminde kullanılan adla tam olarak eşleşmelidir. Dosyanın
ilk harfi küçük, ancak sınıf bildirimi büyükse, kod derlenmez.
Kaynak dosyanın adını fazladan bir harf veya sayı doldurursa,
kod derlenmez.
Class and source file mismatch
Improper casing
● Kodlamayı ilk öğrendiğimde kimse bana Java'nın büyük/küçük
harfe duyarlı olduğunu söylememişti.
● Bir çalışma kılavuzundan titizlikle kopyaladığım kodun neden
derlenmediğini anlamaya çalışırken anlatılmamış saatleri
harcadım.
● Harf büyüklüğünün derleyici başarısı ile kodlama hatası
arasındaki tek fark olabileceğini öğrendiğimde hayal kırıklığım
aşikardı.
Improper casing
● Java derleyicisi, büyük ve küçük harfleri tamamen farklı şekilde
ele alır. "Public", "public"dan farklı olan puBliC dan farklıdır.
Örneğin, bu kod derlenmez:

Int x = 10;
[Link](x);

● Sorunu çözmek için, "Integer"daki "I"yi küçük, "sistem"deki


"s"yi büyük harf yapın:

int x = 10;
[Link](x);
Mismatched brackets
● Uyumsuz bir ayraç veya parantez, her programcının belasıdır.
● Koddaki her açık parantez, köşeli parantez, kıvrık parantez veya
yuvarlak parantez olsun, eşleşen ve karşılık gelen bir kapalı
parantez gerektirir.
● Bazen bir programcı bir yöntemin kapanış parantezini unutur
veya bir yöntemin kapanış parantezini koymayı hatırlar ama
sınıfı kapatmayı unutur.
● Köşeli parantezlerin tümü eşleşmezse, sonuç bir derleme zamanı
hatasıdır.
Mismatched brackets
● Örneğin, aşağıdaki kod satırında println'den sonra yuvarlak parantez
eksik;

int x = 10;
[Link] x);

● Bu derleme hatasının düzeltilmesi, hatayı ortadan kaldırmak için


println'den sonra baştaki yuvarlak parantez eklemektir:

int x = 10;
[Link] (x);
Missing semicolons
● Bir Java programındaki her ifade noktalı virgülle bitmelidir.

[Link](x)

● Ve aşağıdaki kod, noktalı virgülün doğru eklendiğini gösterir:

[Link](x);
Method is undefined
● Method konusuna girince daha detaylı inceleyeceğiz.
● Fakat örnek vermek gerekirse;
● Bir değişkene yuvarlak parantezler eklenirse, derleyici kodun bir
methodu çağırmak istediğini düşünür.

int x();

● Yuvarlak parantezler değişkenler için değil methodlar içindir.

int x;
Variable is already defined
● Geliştiriciler, Java'da bir değişkenin değerini istedikleri kadar
değiştirebilirler.
● Bu yüzden değişken olarak adlandırılır. Ancak, yalnızca bir kez bir
veri türü bildirebilir ve atayabilirler.
int x = 10;
int x = 20;

● Geliştiriciler ayrıca "x" değişkenini kodda birden çok kez


kullanabilirler, ancak bunu yalnızca bir kez int olarak bildirebilirler.

int x = 10;
x = 20;
Local variable not initialized
● Aşağıdaki kodda neyin yanlış olduğunu söyleyebilir misiniz?
int x ;
[Link] (x);

● Java'daki sınıf ve örnek değişkenleri null veya sıfır olarak başlatılır.


Ancak, bir yöntem içinde bildirilen bir değişken, varsayılan bir
başlatma almaz.
● Bir değer atanmamış bir yöntem düzeyinde değişken kullanma
girişimi, "variable not initialized" hatasıyla sonuçlanacaktır.
● Değişken başlatma eksikliği aşağıdaki kodda giderilmiştir:
int x = 0;
[Link] (x);
Type mismatch
● Java güçlü bir şekilde yazılmış bir dildir. Bu, bir değişkenin bir
türden başka bir ara yönteme geçemeyeceği anlamına gelir.
Aşağıdaki kodu inceleyelim:

int x = 0;
String square = x * x;

● String değişkenine, kendisi ile çarpılan bir int sonucu atanır. Bir
int'nin çarpılması, bir String değil, bir int ile sonuçlanır. Sonuç
olarak, Java derleyicisi bir tür uyuşmazlığı bildirir.
Type mismatch
● Tür uyuşmazlığı derleme hatasını düzeltmek için, uygulamanız
boyunca veri türlerini tutarlı bir şekilde kullanamız gerekir.
Aşağıdaki kod doğru şekilde derlenir:

int x = 0;
int square = x * x;
Return type required
● Her method imzası, çağıran programa döndürülen veri türünü
belirtir.
● Bu örneğimizde String ifadesi ile String döneceğimizi belirttik fakat
return ifadesi koymadık. Bu derleme hatasına yol açacaktır.

public String pointOfNoReturn()


{
"abcdefu";
}
Return type required
● Method gövdesi(body), çağıran programa uygun türü geri
döndürmezse(return), bu bir hatayla sonuçlanır:
● "Bu yöntem, bir türün sonucunu döndürmelidir." ("This method
must return the result of a type.") şeklinde bir hata alır.
● Bu hatanın iki hızlı düzeltmesi vardır;
● Methodda hiçbir şey döndürmemek için bir void dönüş türü belirtin.
● Alternatif olarak, yöntem imzasında bir dönüş türü belirtmek için
methodun sonunda bir dönüş ifadesi(return type) bulunduğundan
emin olun.
Return type required
● Yukarıda belirttiğimiz yöntemlerden ilkini kullanırsak ve void
yapacak olursak;

public void
pointOfNoReturn() {

İkinci yöntem olarak return ifadesi eklersek, yine sorunu çözmüş olacağız.

public String pointOfNoReturn() {


return "abcdefu";
}
Unreachable code
● Bir method içinde kötü planlanmış boolean mantığı bazen
derleyicinin asla son kod satırlarına ulaşamadığı bir duruma neden
olabilir.
● İşte bir örnek:

int x = 10;
if ( x < 10 ) {
return true;
}
else {
return false;
}
[Link]("done!");
Unreachable code
● Mantık yoluyla mümkün olan her yolun if veya else bloğu aracılığıyla
tükeneceğine dikkat edin. Son kod satırı ulaşılamaz hale gelir.
● Bu Java derleyici hatasını çözmek için, erişilemeyen kodu, koddaki
her mantıksal yol tükenmeden çalıştırılabileceği bir konuma
yerleştirin.
● Kodun aşağıdaki revizyonu hatasız derlenecektir:

int x = 10;
if ( x < 10 ) {
[Link]("done!");
return true;
}
else {
[Link]("done!");
return false;
}
Be Patient :)

● Java derleme hatalarına karşı sabırlı olun

● Bir geliştiricinin özellikler ve geliştirmelerle ilerlemesi her


zaman sinir bozucudur, ancak beklenmedik Java derleme
hataları nedeniyle ilerleme engellenir. Biraz sabır ve özen - ve
bu Java derleme zamanı hataları ve düzeltmeleri listesi -
sorun gidermeyi en aza indirecek ve geliştiricilerin yazılım
özelliklerini daha verimli bir şekilde geliştirmelerini ve
iyileştirmelerini sağlayacaktır.
Çalışma Zamanı Hataları

● Java'da çalışma zamanı hatası, bir programın yürütülmesi sırasında


oluşan bir uygulama hatasıdır.

● Bir program sözdizimsel olarak doğruysa ancak yalnızca programın


yürütülmesi sırasında algılanan bir sorun içeriyorsa çalışma zamanı
hatası oluşur. Bu sorunlar derleme sırasında Java derleyicisi
tarafından yakalanamaz ve yalnızca uygulama çalışırken Java Sanal
Makinesi (JVM) tarafından algılanır.

● Çalışma zamanı hataları, birkaç daha spesifik hata türü içeren bir
istisna kategorisidir. En yaygın çalışma zamanı hatası türlerinden
bazıları şunlardır:
Çalışma Zamanı Hataları

● Çalışma zamanı hataları, birkaç daha spesifik hata türü içeren bir
istisna kategorisidir. En yaygın çalışma zamanı hatası türlerinden
bazıları şunlardır:

● IO errors (Input Output)

● Division by zero errors (Sıfır’a bölme hatası)

● Out of range errors (Bir dizi de aralık dışı hatalar)

● Undefined object errors (Tanımsız nesne hataları)


Division by zero errors
public class ArithmeticExceptionExample {
public static void main(String[] args) {
int a = 10, b = 0;
[Link]("Result: "+ a/b);
}
}

Hata ise;

Exception in thread "main" [Link]: /


by zero
at
[Link](ArithmeticExceptionExample.j
ava:4)
Hata Çözümü
● Çalışma zamanı hataları, Java'da aşağıdaki adımlarla try-catch
blokları kullanılarak işlenebilir:
● Try-catch bloklarında çalışma zamanı hatası oluşturabilecek ifadeleri
çevreleyin.
● Hatayı yakalayın.
● Uygulamanın gereksinimlerine bağlı olarak gerekli işlemleri yapın.
Örneğin, istisnayı uygun bir mesajla günlüğe kaydedin.
Hata Çözümü
public class ArithmeticExceptionExample {
public static void main(String[] args) {
try {
int a = 10, b = 0;
[Link]("Result: " + a/b);
} catch (ArithmeticException ae) {
[Link]("Arithmetic Exception: cannot divide by 0");
}
[Link]("Continuing execution...");
}
}
Accessing an out of range value in an array
public class ValueOutOfRangeErrorExample {
public static void main(String[] args) {
int arr[] = new int[5];
[Link]("5th element in array: " + arr[5]);
}
}

● Bu örnekte, bir dizi 5 öğe ile başlatılmıştır. Daha sonra dizide 5.


konumdaki bir öğeye erişilmeye çalışılır,
● Bu da bir [Link]
çalışma zamanı hatasına yol açar:
Mantıksal Hatalar

● Java programlamasındaki mantıksal hataların bulunması son derece zor


olabilir, çünkü herhangi bir kodlama sorununun veya Java dil
elemanlarının kullanımındaki bir hatayı yansıtmazlar. Kod yazılmış
olduğu gibi kusursuzca çalışır - gerçekleştirmesini beklediğiniz görevi
yerine getirmez.

● Sonuç olarak, mantıksal hatalar en zor hatalar olabilir. Hata için kesin bir
neden aramak için kodunuzu incelemek için zaman harcamanız gerekir.
Mantıksal Hatalar
public class LogicalError {
public static void main(String[] args) {
int result1 = 5 + 4 * 3/2;
int result2 = (5 + 4) * 3/2;
int result3 = (5 + 4) * (3/2);
int result4 = (5 + (4 * 3)) / 2;
[Link](("result1:" + result1 + "result12:" + result2 + "result13:" + result3 +
"result14:" + result4));
}
}
Mantıksal Hatalar
Buradaki hatayı görebildiniz mi? :)

public class ForLoopError


{
public static void main(String[] args)
{
// Declare the variable.
int count;
// Create the loop.
for (count=1; count<=10; count++) ;
{
// Output the result.
[Link]("Count is " + count);
}
}
}
Mantıksal Hatalar
Burada ekrana Equal yazar ama bir mantık hatası vardır.
Nedir bu hata? Bir sonraki slayta bakalım :)

public class CompareStrings {

public static void main(String[] args) {

String style = "Bold";


String style2 = "Bold";

if(style == style2) {
[Link]("Equal");
} else {
[Link]("Not Equal");
}
}
}
Mantıksal Hatalar
Buradaki hatayı görebildiniz mi? :)
public class CompareStrings {

public static void main(String[] args) {

String style = new String("Bold");


String style2 = new String("Bold");

if(style == style2) {
[Link]("Equal");
} else {
[Link]("Not Equal");
}
}
}
Bir sonraki
toplantı için 1. Karar Yapıları

belirlenen
hedefler

You might also like