Bölüm 12 Alıştırmalar

12.1 Hatalı durumu işleme (Exception Handling) kullanmanın faydası nedir?

12.2 Aşağıdaki ifadelerden hangileri exception fırlatır?

System.out.println(1 / 0);

System.out.println(1.0 / 0);

12.3 Aşağıdaki kodda bulunan hatayı gösteriniz. Bu kodun yürütülmesi sırasında bir exception fırlatılır mı?

long value = Long.MAX_VALUE + 1;

System.out.println(value);

12.4 Bir exception oluştuğunda JVM ne yapar? Bir exception’ı nasıl yakalarsınız?

12.5 Aşağıdaki kodun çıktısı nedir?

public class Test {

public static void main(String[] args) {

try {

int value = 30;

if (value < 40)

throw new Exception(”value değişkenin değeri çok küçük");

}

catch (Exception ex) {

System.out.println(ex.getMessage());

}

System.out.println(” catch bloğundan sonra devam edin");

}

}

Eğer aşağıdaki satırda value değeri 50 olarak değiştirilseydi, çıktı ne olurdu?

int value = 30;

yerine

int value = 50;

12.6 Aşağıdaki kodların çıktıları nedir?

12.7 Java Throwable sınıfını, bu sınıftan türetilmiş sınıfları ve exception türlerini açıklayınız.

12.8 Eğer oluşursa, aşağıdaki programlar hangi RuntimeException‘ı fırlatır?

12.9 Exception’ları bildirmenin amacı nedir? Bir exception nasıl ve nerede bildirilir? Metot başlığında çoklu exception bildirimi yapılabilir mi?

12.10 checked exception ve unchecked exception nedir?

12.11 Bir exception nasıl fırlatılır? Bir throw ifadesinde birden çok exception fırlatabilir misiniz?

12.12  throw anahtar sözcüğü ne için kullanılır?  throws anahtar sözcüğü ne için kullanılır?

Aşağıdaki try-catch bloğunda statement2‘nin bir exception’a neden olduğunu varsayalım:

try {

statement1;

statement2;

statement3;

}

catch (Exception1 ex1) {

}

catch (Exception2 ex2) {

}

statement4;

Aşağıdaki soruları cevaplayınız:

statement3 yürütülür mü?

Eğer exception yakalanmazsa statement4 yürütülür mü?

catch bloğunda exception yakalanırsa, statement4 yürütülür mü?

12.14 Aşağıdaki program çalıştırıldığında ekranda ne görünür?

public class Test {

public static void main(String[] args) {

try {

int[] list = new int[10];

System.out.println("list[10] is " + list[10]);

}

catch (ArithmeticException ex) {

System.out.println("ArithmeticException");

}

catch (RuntimeException ex) {

System.out.println("RuntimeException");

}

catch (Exception ex) {

System.out.println("Exception");

}

}

}

12.15 Aşağıdaki program çalıştırıldığında ekranda ne görünür?

public class Test {

public static void main(String[] args) {

try {

method();

System.out.println(”metot çağrısından sonra");

}

catch (ArithmeticException ex) {

System.out.println("ArithmeticException");

}

catch (RuntimeException ex) {

System.out.println("RuntimeException");

}

catch (Exception e) {

System.out.println("Exception");

}

}

static void method() throws Exception {

System.out.println(1 / 0);

}

}

12.16 Aşağıdaki program çalıştırıldığında ekranda ne görünür?

public class Test {

public static void main(String[] args) {

try {

method();

System.out.println(”metot çağrısından sonra");

}

catch (RuntimeException ex) {

System.out.println(”main metodunda RuntimeException");

}

catch (Exception ex) {

System.out.println(”main metodunda Exception");

}

}

static void method() throws Exception {

try {

String s = "abc";

System.out.println(s.charAt(3));

}

catch (RuntimeException ex) {

System.out.println(”method() metodunda RuntimeException");

}

catch (Exception ex) {

System.out.println(”method() metodunda Exception");

}

}

}

12.17 getMessage() metodu ne için kullanılır?

12.18 printStackTrace() metodu ne için kullanılır?

12.19 try-catch bloğunun olması, herhangi bir exception oluşmadığında ek bir yük getirir mi?

12.20 Aşağıdaki kodda bulunan derleme hatalarını düzeltiniz:

public void m(int value) {

if (value < 40)

throw new Exception(”value değişkenin değeri küçük");

}

12.22 Aşağıdaki metot bir string’in sayısal bir string olup olmadığını kontrol eder:

public static boolean isNumeric(String token) {

try {

Double.parseDouble(token);

return true;

}

catch (java.lang.NumberFormatException ex) {

return false;

}

}

Bu doğru mudur? Exception kullanmadan tekrar yazınız.

12.23 Aşağıdaki ifadede statement2 ‘nin bir exception’a neden olduğunu varsayalım:

try {

statement1;

statement2;

statement3;

}

catch (Exception1 ex1) {

}

catch (Exception2 ex2) {

throw ex2;

}

finally {

statement4;

}

statement5;

Aşağıdaki soruları cevaplayınız:

Eğer herhangi bir exception oluşmazsa, statement4 ve statement5 yürütülür mü?

 Exception1 türünden bir exception oluşursa, statement4 ve statement5 yürütülür mü?

 Exception2 türünden bir exception oluşursa, statement4 ve statement5 yürütülür mü?

 Exception1 türünden de Exception2 türünden de bir exception oluşmazsa, statement4 ve statement5 yürütülür mü?

12.24 Eğer 16. satır aşağıdaki satır ile değiştirilirse programın çıktısı ne olur?

throw new Exception(“method1’den yeni bilgi”);

12.25 Özelleştirilmiş bir exception sınıfı nasıl tanımlanır?

12.26 setRadius metodunun Madde 12.10’da tanımlanmış olan InValidRadiusException fırlattığını varsayalım. Aşağıdaki program çalıştırıldığında ekranda ne görünür?

public class Test {

public static void main(String[] args) {

try {

method();

System.out.println(”metot çağrısından sonra");

}

catch (RuntimeException ex) {

System.out.println(”main metodunda RuntimeException");

}

catch (Exception ex) {

System.out.println(”main metodunda Exception");

}

}

static void method() throws Exception {

try {

Circle c1 = new Circle(1);

c1.setRadius(-1);

System.out.println(c1.getRadius());

}

catch (RuntimeException ex) {

System.out.println(”method() metodunda RuntimeException");

}

catch (Exception ex) {

System.out.println(”method() metodunda Exception");

throw ex;

}

}

}

12.27 Aşağıdaki ifadede olduğu gibi bir File nesnesi yaratılırsa ne gibi bir hata oluşturur?

new File("c:\book\test.dat");

12.28 Bir dosyanın daha önceden var olup olmadığını nasıl kontrol edebilirsiniz? Bir dosyayı nasıl silebilirsiniz? Bir dosyayı nasıl yeniden adlandırabilirsiniz? File sınıfını kullanarak dosya boyutunu (byte olarak) bulabilir misiniz? Bir dizin nasıl yaratılır?

12.29  File sınıfını I/O işlemleri için kullanabilir misiniz? Bir File nesnesi oluşturmak, diskte bir dosya yaratmak mıdır?

12.30 Verileri dosyaya yazmak için bir PrintWriter nesnesi nasıl yaratılır? Madde 12.13, WriteData.java’da bulunan main metodunda  throws Exception bildiriminin yapılmasının nedeni nedir?

Madde 12.13’de close() metodu çağrılmazsa ne olur?

12.31 Aşağıdaki program yürütüldükten sonra,  temp.txt dosyasının içeriğini gösteriniz.

public class Test {

public static void main(String[] args) throws Exception {

java.io.PrintWriter output = new java.io.PrintWriter("temp.txt");

output.printf(”miktar %f %e\r\n", 32.32, 32.32);

output.printf(”miktar %5.4f %5.4e\r\n", 32.32, 32.32);

output.printf("%6b\r\n", (1 > 2));

output.printf("%6s\r\n", "Java");

output.close();

}

}

12.32 try-with-resources sentaksını kullanarak bir önceki sorudaki kodu yeniden yazınız.

12.33 Dosyadan veri okumak için bir Scanner nesnesi nasıl yaratılır? Madde 12.15, ReadData.java’da bulunan main metodunda  throws Exception tanımının yapılmasının nedeni nedir? Madde 12.15’de close() metodu çağrılmazsa ne olur?

12.34 Var olmayan bir dosya için bir Scanner yaratılmaya çalışılırsa ne olur? Var olan bir dosya için bir PrintWriter  yaratılmaya çalışılırsa ne olur?

12.35 Satır ayırıcı tüm platformlarda aynı mıdır? Windows’ta hangi satır ayırıcı kullanılır?

12.36  45 57.8 789, yazıp, Enter tuşuna basmış olun. Aşağıdaki kod çalıştıktan sonra değişkenlerin değerlerini gösteriniz.

Scanner input = new Scanner(System.in);

int intValue = input.nextInt();

double doubleValue = input.nextDouble();

String line = input.nextLine();

12.37 Sırasıyla 45, Enter, 57.8, Enter,  789, Enter girdiğinizi varsayalım. Aşağıdaki kod çalıştıktan sonra değişkenlerin değerlerini gösteriniz.

Scanner input = new Scanner(System.in);

int intValue = input.nextInt();

double doubleValue = input.nextDouble();

String line = input.nextLine();

12.38 Bir URL’den metin okumak için bir Scanner nesnesi nasıl yaratırsınız?

12.39 Madde12.18 WebCrawler.java programının 25. satırında bir URL’in listOfPendingURLs’e eklenmeden önce bağlantıya gidilip gidilmediği kontrol ediliyor. listOfPendingURLs ‘ın aynı URL’leri içermesi mümkün müdür? Eğer öyleyse, bir örnek veriniz.