Monday, October 25, 2010

JSF Giris

Bu yazi asagindaki linkten kopyalanmistir Fatih Celk hocamizin elline emegine saglik Fatih hocanin yazilarini ve bu yaziyi su linkten bulabilirsiniz http://www.fatihcelik.org/2009/11/jsf-tutorial-1-giris/
Nedir?

JSF (JavaServer Faces) JEE uygulamalarının web arayüzünü inşa etmek için oluşturulan, Javanın standart web frameworküdür.JEE uygulamalarında web arayüzleri oluşturmak için Java servlet, java server pages(JSP) , Struts, Apache Wicket gibi çok sayıda framework bulunur(Tabi web uygulamalarında çığır açan java appletlerini de unutmamak lazım). JSF de bunlardan bir tanesidir.
JSF Mimarisi

JSF ,JSP ve Servlet’ların üzerine kurulmuştur.Bu var olan teknolojilerle MVC yaklaşımını birleştirir.

                                                               JSF Mimarisi

JSF MVC mimarisini de destekler.Hatta JSF’nin ortaya çıkmasındaki en büyük etkende JSP’nin MVC’yi kendi içerisinde destekleme konusundaki sıkıntılarıdır.MVC(Model-View-Controller) basitçe iş ve sunum mantığının birbirinden ayrılması olarak düşünülebilir.MVC hakkında daha fazla bilgi için buraya bakabilirsiniz.

                                                                   MVC yapısı

Sonraki resimde de JSF nin MVC’yi nasıl uyguladığı görülmektedir.



JSF'nin MVC'yi uygulaması
Neden JSF?

Yazının başında da belirttiğim gibi çok sayıda Java web frameworkü bulunmakta.Peki neden JSF?
             - Herşeyden önemlisi JSF bir Java standardıdır.
             - Sektördeki önemli firmaların (IBM, Oracle…) JSF’ye olan desteğide onu bir adım öne çıkarır.
             - Farklı JSF implementasyonları bulunur.(Sun Reference Implementation, Apache MyFAces..)Bu da bize projemizin gerekliliklerine göre seçim yapabilme özgürlüğü sağlar.
             - Bileşen yönelimlidir.
             - Çok sayıda 3. parti bileşen kütüphanesi bulunur(Richfaces, Icefaces, Primefaces,Trinidad,Tomahawk…).

Şu anda JSF’nin 2.0 versiyonu bulunmaktadır.Ancak ben bu tutorial serisinde JSF 1.2 yi anlatacağım.Çok derinlere inemeyeceğim için bunun çok problem olacağını zannetmiyorum.Daha ileriki makalelerde JSF 2.0 ile gelen yeniliklere de değineceğim.

Bu ilk makalem JSF ye basit bir giriş niteliğindeydi.Bir sonraki makalede geliştirme ortamının kurulumu ve ilk örneğimizi yapacağız.Herkese iyi çalışmalar.

Friday, October 22, 2010

Checked Exceptions And Runtime Exceptions.

Soru
Iyi gunler arkadaslar asagidaki soruyla karsilastiktan sonra exception'lar ile ilgili ogrenmem gereken birsey oldugunu gordum sorum su kontrol edilebilen hatalar ve calisma zamani verilen hatalar var. bir cok exception sinifi var ve ben hagisi runtime exception hangisi checked exception oldugunu nasil anlayabilirim mesala biiyorumki

FileInputStream fis= new FileInputStream("dememe.txt");

sinifi icin FileNotFoundException sinifi checked exception dir.

Yani benim bu Exception siniflarini tek tek bilmeliyimki hangisi checked exception hangisi runtime exception oldugunu yoksa ayird edilebilecek birsey varmi yardimci olabilirmisiniz

Which of the following are checked exceptions?

a) IllegalThreadStateException

b) IllegalMonitorStateException

c) ParseException

d) NumberFormatException

e) IOException

f) RuntimeException

g) ClassNotFoundException

cevap c , e , g



Hayirli gunler


Cevap veren Gökalp Gürbüzer JTPD sayfasindan
http://www.jtpd.org/talks/5378557

Java'daki aykırı durumları (exception) "kontrol edilebilir"/"çalışma zamanı" olarak ayırmak biraz kafa karıştırıcı geliyor; çünkü aykırı durumların tamamı çalışma zamanında geldiği aşikar. Aslında "Runtime Exception" olarak anılan aykırı durumlar java.lang.RuntimeException sınıfından türeyen aykırı durumlardır. "Runtime Exception"lar, JVM'in karşılaştığı aykırı durumlardır; daha doğrusu JVM ile işletim sistemi arasındaki iletişim sırasında ortaya çıkan aykırı durumlardır. RuntimeException sınıfından türemeyen ama Exception sınıfından türeyen bütün aykırı durumlar "Checked Exception" olarak adlandırılır ve JVM üzerinde çalışan program akışının denetiminde olan durumları kapsar.

Bu yüzden "Checked/Runtime Exception" ayrımı için belki de "Normal/JVM Aykırı Durumu" çevirmesi daha doğru olabilir.

Normal/JVM aykırı durumlarını genel olarak ayırabilmek için de aykırı durumun hangi durumda fırlatılabildiğini tahmin etmek bir yöntem olarak uygulanabilir. Örnek sorudaki "ParseException" verilen bir metnin ayıklanamadığı (parse) durumlarda fırlatıldığını biliyorsak "JVM ile ilgisi yoktur, o zaman normal aykırı durumdur" dememiz mümkün. Keza IOException da bir dosyanın bulunmaması ya da okunamaması, ya da bir sokete bağlanılamadığı zaman karşımıza çıktığına göre "JVM değildir, o zaman normal aykırı durumdur" diyebiliriz. Son olarak da ClassNotFoundException bir sınıfın adını verip sınıfı çağırmaya çalıştığımızda karşımıza geldiğine göre "JVM değildir, o zaman normal aykırı durumdur" denilebilir.

Diyeceksiniz ki "IOException'ın nasıl olur da JVM ile ilgisi olmaz?". Yanıtı şu: JVM, işletim sistemine "ben bu G/Ç işini yapacağım" demiş ve işletim sistemi "olmaz kardeşim, izin vermiyorum/yapamazsın" demiştir. Yani arada iletişim sağlanmış, ama JVM olumsuz yanıt almıştır. Bu bir JVM aykırı durumu değildir, JVM bu yanıtı bize bildirmektedir yalnızca. Eğer işletim sistem ile iletişim sağlayamasa idi bir JVM aykırı durumu fırlatılacaktı.

Aynı mantıkla diğer yanıtlardan IllegalThreadState ve IllegalMonitorState "JVM ile ilgilidir" diye düşünülüp JVM aykırı durumu olduğu söylenebilir. f şıkkında verilen RuntimeException zaten JVM aykırı durumlarının türediği nesne olduğu için en kolay ayırt edilebilecek şık.

Bu sorudaki asıl zor nokta d şıkkında: NumberFormatException. Bu aykırı durum RuntimeException'dan türeyen "IllegalArgumentException" sınıfından türer ve IllegalArgumenException da bir yordama normalde verilmemesi gereken bir parametre ile gidildiğinde alınan bir aykırı durumu belirtir. Bence IllegalArgumenException'un JVM aykırı durumu olduğu tahmin edilebilir, ancak NumberFormatException için durum böyle değil malesef.

Biraz uzun oldu sanırım ama, kıssadan hisse olarak ayrımı şöyle yapabiliriz:

Eğer aykırı durum JVM'e değen bir satırdan gelmiş ise JVM aykırı durumudur. Eğer aykırı durum JVM'in üst katmanlarında çalışan koddan geldiyse normal aykırı durumdur.

JVM'e değen satırlar ise bellek, iş (process) ve iplik (thread) ile ilgili satırlardır.

Bu açıdan bakıp biraz JavaDoc kurcalamak sanırım bu ayrımı gözümüz kapalı yapmayı sağlayacaktır.


Benim sonrada eklediklerim 
 

java.lang.RuntimeException sinifindan tureyan siniflar ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

java.lang.Exception sinifindan tureyan siniflar  
AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadLocationException, CertificateException, ClassNotFoundException, CloneNotSupportedException, DataFormatException, DestroyFailedException, ExpandVetoException, FontFormatException, GeneralSecurityException, GSSException, IllegalAccessException, InstantiationException, InterruptedException, IntrospectionException, InvalidMidiDataException, InvalidPreferencesFormatException, InvocationTargetException, IOException, LastOwnerException, LineUnavailableException, MidiUnavailableException, MimeTypeParseException, NamingException, NoninvertibleTransformException, NoSuchFieldException, NoSuchMethodException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, RefreshFailedException, RemarshalException, RuntimeException, SAXException, ServerNotActiveException, SQLException, TooManyListenersException, TransformerException, UnsupportedAudioFileException, UnsupportedCallbackException, UnsupportedFlavorException, UnsupportedLookAndFeelException, URISyntaxException, UserException, XAException 
 

Sunday, October 17, 2010

Garbage Collector nedir?

 Bu yazi http://www.cemkefeli.com/post/2009/10/02/JAVA-Garbage-Collector-nedir.aspx bu blogtan kopyalanmistir yazan hocamizin ellerine saglik...
JAVA - Garbage Collector nedir?
by Cem Kefeli
2. Ekim 2009 04:19

Herhalde birçoğumuz o meşhur "Segmentation Fault" hatası ile karşılaşmışızdır. Hatanın isminin zaten başlı başına can sıkıcı olması bir yana bir de üstüne üstlük hata nerede? hani ne oldu? nerede problem? gibi soruların bir çoğunu da oldukça canınız sıkıldıktan sonra cevaplamanız mümkün olabilecektir. Bu iş en çok da C/C++ kullanırken başınıza gelecektir. Çünkü C/C++ da bellek yönetimi tamamen uygulama geliştiricilerin tasarrufuna bırakılmıştır. Yani siz sisteminizin belleğinin bir byte'lık bir gözüne dahi istediğiniz gibi erişebilirsiniz. Bunun bizim için münkün olmasını sağlayan olay pointer(işaretçi) kavramıdır. İşaretçiler ile istediğimiz gibi istediğimiz her yere erişebiliriz. Zaten sorunlara yol açan olaylar da tam olarak burada başlıyor. İstediğimiz yerlere erişiyoruz ama bazen de erişmememiz gereken bir yere erişme imkanı da veriyor bize. Hiç bir kontrol de yapılmıyor derleyici tarafından. Yani 'arkadaşım sen buraya erişmeye çalışıyorsun ama bak burası başkası tarafından kullanılıyor, ya da senin sınırlarının dışında.' gibi bir hata ile bizi uyarmıyor. İşi tamamen bizim bilincimize bırakmış durumda. Çok bilinçli kullanılması gereken bir bellek yönetimine sahip olmak gerekiyor. Bir yandan güzel bir yandan kötü bir özellik. Olayın bir başka yönü ise oluşturduğumuz nesnelerin kullanılmadıkça bir kenarda birikmesi ve bir süre sonra bellek sızıntısı(Memory Leak)'na yol açması. Bu olay C/C++ kullanan bir çok yazılımda, işletim sistemleri dahil, sık görülen birşeydir. Nesneleri oluşturup önerildiği şekilde uygun yollar ile bellek alanlarını boşaltmazsanız sağda solda birikirler ve gereksiz yer kaplayıp işletim sistemini felakete sürükleyebilirler. Bu olay dinamik bellek yönetimi olarak adlandırılmaktadır.

Bu olaya seneler önce ilk olarak java el attı. Dedi ki: 'Ben nesneye yönelik bir yazılım dili olduğuma göre böyle şeyler ile ilgilenmem. İşaretçi kavramı filan benim için yoktur. Benim gözümde herşey nesnedir. Dolayısı ile bellekte nesneler tutulur. Bellek yönetimine gelince o konuda da yazılımcıların işini çok kolaylaştıracak birşey sunuyorum. O da Garbage Collector(Çöp Toplayıcı)...'. Bu fikir seneler sonra C# tarafından da hemen benimsendi tabi ki. Birçok örneği olduğu gibi Microsoft bu güzelliği gözden kaçırmadı ve kendi .NET Framework yapısı içerisine dahil etti.

Garbage Collector(GC)'ın yaptığı iş temel olarak; kullanımı son bulmuş, hiçbir nesne örneği tarafından referans gösterilmeyen, bellek bölgelerini tesipit edip o bölgelerdeki bellek alanını boşaltmaktır. GC sizin yerinize yazılımınızı takip eder ve kullanılmaya bellek bölgelerini sisteme iade eder. Bu Java'da asla bellek sızıntısı olmadığı anlamına gelmez tabi ki ama daha öncelerine göre çok da az oranlara indirgenmiş ve bellek sızıntısı hatalarının tedavisi daha kolay hale gelmiştir. Az önce de söylediğim gibi Java pointer kavramını kabul etmez ve herşeye nesne gözü ile bakar. GC ise bu nesnelerin aktif kullanımın bellek üzerindeki etkisi ile ilgilenir. Program çalıştığı sürece otomatik olarak bu işlemler gerçekleştirilebileceği gibi aşağıdaki biçimde manuel olarak da tetiklenebilmektedir.
1.
Runtime.getRuntime().gc();  
2.
//veya System.gc();

Friday, October 15, 2010

System.out.printf

Iyi gunler arkadaslar bugunku yazimda System.out.printf ne oldugunu ve nasil kullanildigini anlatacam. System.out.printf console yazilacak yazinin istenilen bir kalipta cikmasini sagliyor. yani System.out.print aynisi ama farki su sen benim yazacagim kaliba uygun olarak cik manasini tasiyor. Bir uygulama ile dediklerimi daha iyi anlayacaksiniz

Once bildigimiz bir System.out.print ornegini gosterecem sonra ikisi arasindaki farki anlayacagiz Birinci uygulamami yapacam

public class TestMain {
      public static void main(String args[]){
           System.out.print("Name : Abdulkadir Surname : Selcukoglu City : Mardin");
      }
}

//Console Output
Name : Abdulkadir Surname : Selcukoglu City : Mardin

Somdi ikinci uygulama System.out.printf halina bakalim

public class TestMain {
       public static void main(String args[]){
   System.out.printf("Name : %s Surname : %s City : %s","Abdulkadir","Selcukoglu","Mardin");
       }
}


//Console Output
 Name : Abdulkadir Surname : Selcukoglu City : : Mardin

Dikkat ettiyseniz  "Name : %s Surname : %s City : : %s " bu kisim ile kalibi hazirladim ve kalibin icinde %s ile yazdigim yerlere nelerin geleceginide daha sonraki parametrelerde belirledim "Name : %s" kismindaki %s ikinci yazdigim parametre "Abdulkadir" yazisi " Surname : %s" olana yere "Selcukoglu" ve son olarakta "City : : %s " olan yere "Mardin" yazilir.

Simdi biraz daha guzel bir uygulama ile daha iyi anlamamizi sagliyalim. Ilk uygulama klasik System.out.println ile yapalim.

public class TestMain {
      public static void main(String args[]) {
             String data[][] = {{"Abdulkadir", "Selcukoglu", "Mardin"},
                                          {"Ertugrul", "Aslan", "Gaziantep"},
                                          {"Rasim", "Imanov", "Baku"}};
             for (int i = 0; i < data.length; i++) {
                    String[] d = data[i];
                    System.out.println("Name : " + d[0] + " Surname : " + d[1] + " City : " + d[2] + "");
             }
      }
}

//Console Output
Name : Abdulkadir Surname : Selcukoglu City : Mardin
Name : Ertugrul Surname : Aslan City : Gaziantep
Name : Rasim Surname : Imanov City : Baku


Simdide bu uygulamayi  System.out.printf ile yapalim

 public class TestMain {
      public static void main(String args[]) {
             String data[][] = {{"Abdulkadir", "Selcukoglu", "Mardin"},
                                          {"Ertugrul", "Aslan", "Gaziantep"},
                                          {"Rasim", "Imanov", "Baku"}};
             for (int i = 0; i < data.length; i++) {
                    String[] d = data[i];
                    System.out.printf("Name : %s Surname : %s City : : %s ",d[0],d[1],d[2]);
                    System.out.println();

             }
      }
}

//Console Output
Name : Abdulkadir Surname : Selcukoglu City : : Mardin
Name : Ertugrul Surname : Aslan City : : Gaziantep
Name : Rasim Surname : Imanov City : : Baku

Wednesday, October 6, 2010

Java Decompler

Muratkan hocam decomple programi ile actiginiz bir class uzantili dosyayi degisiklik yaptiktan sonra farkli kaydette basmalisiniz yani save as sonra orada kaydedeceginiz uzantiyi class olani java diye degistirip kaydettikten sonra class tekrar derliyeceksiniz ve derlenmis class uzantili bir dosya elde etmis olacaksiniz
 Asagida bu konu ile ilgili basit bir uygulama yaptim diyelimki Merhaba.java adinda bir class olsun
public class Merhaba{
      public static void main(String args[]){
             System.out.println("Merhaba Haciiiii");
      }
}

Bunu asagidaki sekilde derledim.
 










Derleyince Merhaba.class isminde derlenmis bir dosya olustu simdi bunu degistiriyorum

Simdide kaydediyorum

Kaydetikten sonra tekrar derlemen gerekiyor simdide asagida nasil derleyeceyini gosterecem ve goreceyizki yapilan degisiklik istenilen hale gelmis


Insallah isine yarar hayirli calismalar

TreeSet Uygulamasi

public class TreeSetMain {
      public static void main(String[] args) {
//===============================================================
                  TreeSet times = new TreeSet();
                  times.add(1205); 
                  times.add(1505);
                  times.add(1545);
                  times.add(1830);
                  times.add(2010);
                  times.add(2100);
//=================================================================
 
                TreeSet subset = new TreeSet();
  //Yukarida gorulan TreeSet'in baska bir TreeSet aktaririken headSet methodu icine yazilan degrin 
//altindaki degerleri kopyaliyor
              subset = (TreeSet) times.headSet(2010);
              for (Integer i : subset) {
                     System.out.println(i);
              }
//===============================================================
              System.out.println("subset'teki en son deger : " + subset.last());
              System.out.println("times'taki en son deger : " + times.last());

//=================================================================


              System.out.println("subset'teki ilk deger : " + subset.first());
              System.out.println("times'taki ilk deger : " + times.first());
//=======================================================
              TreeSet sub2 = new TreeSet();
  //burada yine bir TreeSet'teki degeri baska bir TreeSet'aktarirken su sayidan buyuk olnlari aktar   // demek icin tailSet kullanilir.
              sub2 = (TreeSet) times.tailSet(2000);
              System.out.print("sub2 : ");
              for (Integer i : sub2) {
                     System.out.print(" " + i);
              }
              System.out.println();
//===========================================================
// Java 6 version ile beraber gelen lower() ve higher() methodlarinin kullanimi
            System.out.println("1600'de dusuk ilk deger : " + times.lower(1600));
            System.out.println("2000'de yuksek ilk deger : " + times.higher(2000));
//==========================================================
            System.out.println("1831 sahisinin varsa kendisi yoksa bir ust sayi doner : " + times.ceiling(1831));

//=================================================================
             System.out.println("1544 sayisi varsa kendisi yoksa bir alt deger doner : " + times.floor(1544));

//==================================================================
             System.out.println("TreeSet'teki ilk degeri donderir : " + times.pollFirst());
//===============================================================
             System.out.println("TreeSet'teki son degeri donderir : " + times.pollLast());
//=========================================================
             System.out.println("TreeSet icindeki degerleri sondan basa dogru okur");
             for (Integer i : times.descendingSet()) {
                    System.out.println(i);
             }

//===============================================
           TreeSet numbers = new TreeSet();
            numbers.add(123);
            numbers.add(111);
            numbers.add(234);
            numbers.add(10);
            numbers.add(322);
            numbers.add(213);
            numbers.add(3);

//Sayilari duzgun sirasiyla verir girilen siraya gore degilde kusukten buyuge gore siralar
           System.out.print("Number List : ");
           for (Integer number : numbers) {
                 System.out.print(" " + number);
           }
           System.out.println();
//=========================================================

           TreeSet names = new TreeSet();
           names.add("Abdulkadir");
           names.add("Ertugrul");
           names.add("Rasim");
           names.add("Ahmet");
           names.add("Mehmet");
           names.add("Nazim");
           names.add("Celil");
           names.add("Kenan");

//Karaktarleri girdiyi siraya gore degilde karekteri alfabetik siraya gore siralar
           System.out.print("Name List : ");
           for (String name : names) {
                 System.out.print(" " + name);
           }
           System.out.println();

//========================================================
           System.out.print("Delal ve Delal harf sirasindan once gelen tum isimlerin listesi : ");
           for (String name : names.headSet("Delal")) {
                  System.out.print(" " +name);
           }
           System.out.println();
      }
}

//Console Output
1205
1505
1545
1830
subset'teki en son deger : 1830
times'taki en son deger : 2100
subset'teki ilk deger : 1205
times'taki ilk deger : 1205
sub2 : 2010 2100
1600'de dusuk ilk deger : 1545
2000'de yuksek ilk deger : 2010
1831 sahisinin varsa kendisi yoksa bir ust sayi doner : 2010
1544 sayisi varsa kendisi yoksa bir alt deger doner : 1505
TreeSet'teki ilk degeri donderir : 1205
TreeSet'teki son degeri donderir : 2100
TreeSet icindeki degerleri sondan basa dogru okur
2010
1830
1545
1505
Number List : 3 10 111 123 213 234 322
Name List : Abdulkadir Ahmet Celil Ertugrul Kenan Mehmet Nazim Rasim
Delal ve Delal harf sirasindan once gelen tum isimlerin listesi : Abdulkadir Ahmet Celil
 

Monday, October 4, 2010

Java Generics

Iyi gunler arkadaslar bugunku kunumuzda genericleri inceliyecez oncelikle java generic'lere neden ihtiyac duydugu ile ilgili bir uygulama yapacaz ve daha sonra genericlerin kullanimini gorecez bence bu konun anlasilmasini en iyi yolu uygulama uzerinde anlatmak

Birinci Adim









//Console Output
SONUC : 2 

Ikinci Adim










//Console Output
SONUC : Merhaba Dunya

Gorulduyu gibi her tanimlanan degisken icin ayri ayri siniflar olusturduk ama bunu bu sekulde yapmak digru degildir bu islemi iki sekilde gerceklestirebilirirz
  • Birinci yontem kalitim yolu ile genisletilmis siniflarin superclass'ini tanimlayarak yada en usteki yani butun sunuflar turedigi Objact sinifini tanimlayarak.
  •  Ikinci yontem ise generic yontemi 
Ben bu yontemlerden ikisinide sizlere gosterecem. 

Ucuncu Adim 








//Console Output
 SONUC : 5


 

//Console Output 
 SONUC : Merhaba Dunya....
 

Yukaridaki islemlerde gorulduyu gibi Objact sinifini kullanarak tek bir sinif ile bu islemi daha sade bir hale getirdik ama bu yonteminde bazi kotu yanlari misal icin asagidaki ornege bakinca analasilacakki bu sekilde sorinlarada sebeb oluyor biz bir programci olarak kullanicinin yapabilecegi tum hatalari goz onunde bulundurmaliyiz ve asagidaki uygulamayi inceleyince gorecegizki bu ilk yontemde pek kullanisli degil ve bundan dolayi java generic'ler bizim kullanimimiza sunmustur. 






//Console Output 
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at adim3.DataMain3.main(DataMain3.java:16)
Java Result: 1



Dorduncu adim 
Simdidde bu uygulamayi generic'leri kullanarak yapalim ve generic'lerin gucunui gorelim








 
//Console Output
SONUC : 5





//Console Output
SONUC : Merhaba Dunya 
 Besinci adim 
Simdide generikleri parametre olarak nasil kullanabiliriz onunla ilgli bir uygulama







 
 //Console Output
T : java.lang.Integer
K : java.lang.String
 


Altinci Adim
Simdide generiler hakinda degisik kullanimlar gorelim






//Console Output
Abdulkadir
Ertugrul
Rasim
Nazim


 Yedinci Adim






//Console Ouput

T : java.lang.Integer
K : java.lang.Integer



//Console Ouput

T : java.lang.Integer
K : java.lang.Double

//Console Ouput

   T : java.lang.Integer
K : java.lang.Long
 


//Console Output 
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
at adim7.DataMain4.main(DataMain4.java:16)
Java Result: 1
 


Sekizinci Adim 







//Console Output

T : java.lang.String
K : adim8.Dog
-------------------------------------------
T : java.lang.String
K : adim8.Cat
 

Dokuzuncu Adim  



//Console Ouput

 





//Console Ouput

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code
at adim9.DataMain1.main(DataMain1.java:15)
Java Result: 1
 

 


//Console Ouput