Pure Java – 96 – Development – Static Imports

Merhaba Arkadaslar,
Bu yazi OCP notlarimin son yazisi olacak. Bu boludme static import konusunu inceleyecegiz.
static anahtar kelimesinin suana kadar 4 yerde kullandik ;

  • static variable
  • static methods
  • static initialize block
  • static nested class

Bununla birlikte static anahtar kelimesini import anahtar kelimesi ile birlikte de kullanabiliriz. Static import’lar bir sinifin static member uyelerini import etmek icin kullanilabilir.

static import olmadan ;

public class TestStatic {
	public static void main(String[] args) {
		System.out.println(Integer.MAX_VALUE);
		System.out.println(Integer.toHexString(42));
	}
}

static import ile ;

import static java.lang.System.out; 
import static java.lang.Integer.*; 

public class TestStaticImport {
	public static void main(String[] args) {
		out.println(MAX_VALUE); 
		out.println(MIN_VALUE); 
		out.print(Integer.MAX_VALUE);
		out.println(toHexString(42)); 
	}
}

Bu ozellige “static import” denilmesine ragmen syntax olarak import static seklinde olmalidir. Bu anahtar kelimelerin yer degistirmesi compile error/derleme hatasina neden olur.
Burada java.lang.System sinifinda yer alan out static variable’i import ettik ;

public final static PrintStream out = nullPrintStream();

Eger birden fazla static member kullanacaksak bu durumda * wilcard’ini kullanabiliriz.
java.lang.Integer sinifinda yer alan tum static member’lari import ettik dolayisiyla java.lang.Integer sinifinda yer alan static degiken olan MAX_VALUE ve MIN_VALUE degiskenlerini direkt olarak kullanabiliriz.

public static final int MAX_VALUE = 0x7fffffff;
public static final int MIN_VALUE = 0x80000000;

static variable kullanabildigimiz gibi direkt olarak static method da kullanabiliriz.

public static String toHexString(int i) {
return toUnsignedString(i, 4);
}

Sinavda dikkat etmemiz gereken ;

  • Unutmayalim syntax olarak “import static” seklinde olacak “static import” derleme hatasi verir.
  • ambiguous/belirsiz/kararsiz kulanimlara dikkat edelim.

Ornegin java.lang.Integer ve java.lang.Long siniflarinda MAX_VALUE adinda static degiskenler mevcuttur.

public static final int MAX_VALUE = 0x7fffffff;
public static final long MAX_VALUE = 0x7fffffffffffffffL;

Bu durumda hem Integer hem Long sinifini static import yapisinda kullandigimizda ortaya ambiguous/belirsiz/kararsiz durum cikacaktir. Bu durumda kodumuz derleme hatasi verir.

import static java.lang.Integer.*;
import static java.lang.Long.*;
import static java.lang.System.*;

public class Ambiguous {
	public static void main(String[] args) {

		// out.print(MAX_VALUE);
		// The field MAX_VALUE is ambiguous
		// compile error/derleme hatasi
	}
}

Eger sadece MAX_VALUE degiskenini static import edecek olursak bu durumda import isleminde ambiguous problemi ortaya cikacak ve compile error/derleme hatasi verecektir;

import static java.lang.Integer.MAX_VALUE;
import static java.lang.Long.MAX_VALUE;
//The import java.lang.Long.MAX_VALUE collides with another import statement
  • static import ile ;  static variable , constant(static final variable) ya da static method’lari kullanabiliriz.
  • static import ile instance degiskenlere ve instance methodlara erisim saglanamaz.
import static java.lang.Integer.*;

public class StaticImportInstanceMethod {
	public static void main(String[] args) {
		
		//System.out.println(byteValue());
		//compile error
	}
}

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *