Java 7 – Birden Fazla Exception Aynı Alanda

Daha önceki Java versiyonlarında, bir try blogundan veya bir metottan birden fazla farklı exception atıldığında, her bir exceptionı ayrı catch bloğunda yakalamamız gerekiyordu.

public void throwTestMethod() 
        throws IllegalArgumentException, FileNotFoundException, NullPointerException
{
	// ...
}

public void throwTest() {
	try {
		throwTestMethod();
	} catch (IllegalArgumentException e) {
		// Do special process for IllegalArgumentException 
	} catch (FileNotFoundException e) {
		// Do special process for FileNotFoundException 
	} catch (NullPointerException e) {
		// Do special process for NullPointerException 
	}
}

Aynı catch bloğunu kullanmanın yolu vardı;

public void throwTest() {
	try {
		throwTestMethod();
	} catch (Exception e) {
		// Do special process for all Exceptions
	} 
}

Ancak, burada gördüğünüz üzere tüm exceptionları aynı blokta kullanmamız gerekiyordu. Örneğin, 3 exception atılan bir metod için sadece 2 exceptiona özel bir blok oluşturamıyorduk (aynı interface’i kullanmak gibi dolambaçlı yöntemler var tabii ki).

Java 7 ile birlikte exceptionları catch bloklarında gruplayabilme özelliği gelmiş oldu. Artık,

public void throwTest() {
	try {
		throwTestMethod();
	} catch (IllegalArgumentException e) {
		// Do special process for IllegalArgumentException 
	} catch (FileNotFoundException | NullPointerException e) {
		// Do special process for FileNotFoundException and NullPointerException 
	}
}

şeklinde bir kullanım gerçekleştirebiliyoruz. Kod yeniden kullanılabilirliği için gayet faydalı bir geliştirme olmuş.

Java 7 – switch İfadelerinde String Nesnesi Kullanımı

Java’nın 7 versiyonundan önce switch ifadelerinde sadece primitive tipler (char, int, byte, short), bunların wrapper sınıfları (Character, Integer, Byte, Short) ve enumareted tipler (enum) kullanılabiliyordu. Java 7 ile birlikte switch ifadelerinde artık String nesneleri de kullanılabiliyor.

Eski usül bir örnek verecek olursak;

public static final int MONTH_JAN = 1;
public static final int MONTH_FEB = 2;
// ...

public void monthProcess (int month)
{
    switch (month) {
        case MONTH_JAN:
        // ...
        break;
        case MONTH_FEB:
        // ...
        break;
        // ...
    }
}

Şimdi de aynı örneğin Java 7’de String nesneleriyle kullanımına bakalım;

public void monthProcess(String month) {
    switch (month) {
        case "Jan":
        // ...
        break;
        case "Feb":
        // ...
        break;
        // ...
    }
}

Java 7’den önce bu örneği if-else if yapısıyla kullanıyorduk.

public void monthProcessWithIf(String month) {
    if (month.equals("Jan")) {
        // ...
    } 
    else if (month.equals("Feb")) {
        // ...
    }
    // ...
}

Artık doğrudan switch ifadelerinde kullanabiliyoruz. Ayrıca burada belirtildiğine göre Java derleyicisi switch ifadelerinde String kullanınca if-else if yapısına göre daha efektif byte-code üretiyor.

Son olarak, switch ifadelerinde kullandığımız String ifadeleri büyük küçük harf duyarlı. Gözden kaçmasın.

Ayrıca, Netbeans ve Eclipse (kullanıyorsanız) IDE’lerinin son versiyonlarını yüklemeyi unutmayın. Eski versiyonlar Java 7 desteği vermiyor.  Doğrudan java derleyicisi kullananlar için bu açıdan sorun yok.