Bilgi ve Beceriler
Üniversite bize teori ve pratik arasında büyük bir fark olmadığını öğretti. Elbette bunun aynı olmadığını anlıyorsundur. Ama temel farkı göremiyorsunuz. Yine de bir tane var. Çoğu insan “biliyorum” ve “yapabilirim” arasına eşitlik işareti koyar. Yapıyor musun? Birkaç örneğe ne dersiniz?- Sigara içmenin benim için kötü olduğunu biliyorum ama sigara içiyorum.
- Fast-food'ın benim için kötü olduğunu biliyorum ama yiyorum.
- Trafik kurallarını biliyorum ama araba kullanamıyorum.
- Jogging yapmanın benim için iyi olduğunu biliyorum ama sabahları jogging yapmıyorum.
yeni bir seviyeye ulaştınız
9. Seviye
1 Risha, Yığın izleme
- Hey! Bugün size yığın izlemenin ne olduğunu anlatacağım. Ama önce yığının ne olduğunu açıklayayım. - Bir yığın kağıt düşünün - belirli bir katip için görevler. Yığının en üstüne yeni bir görev konulabilir ve o, yığının en üstünden bir görev alır. Böylece atamalar ilk gelende yapılmayacak. Katip her seferinde en son gelen görevi alır. Böyle bir toplama yapısına yığın denir . - Java'da özel bir koleksiyon vardır - Yığın. Bu koleksiyonda «bir öğe ekle» ve «bir öğeyi al(al/al)» yöntemleri vardır. Bildiğiniz gibi, en son eklenen eleman ilk olarak alınacaktır. - Hımm. Sanırım zor değil. - İyi. O zaman yığın izlemenin ne olduğunu açıklayayımdır-dir. - Java'da A işlevinin B işlevini çağırdığını ve ikincisinin C işlevini çağırdığını ve bunun da D işlevini çağırdığını hayal edin . Bu nedenle, B işlevinden çıkmak için önce C işlevinden çıkmalısınız ve bunu yapmak için D işlevinden çıkmalısınız . Bu bir yığına çok benzer. - Ve benzerlik nedir? - Yığında, belirli bir göreve ulaşmak için, üste konulan tüm görevleri de tamamlamanız gerekir. - Bu bir tür benzetme ama her şeyi doğru anladığımdan emin değilim. - Buraya bak. Java'da yığın, bir öğeler kümesidir. Bir yığın kağıt gibi. Üstten üçüncüyü almak için ikinci sayfayı almalısın, ama ondan önce ilkini almalısın. Her zaman çarşaf koyabilir ve alabilirsiniz, ancak bunları yalnızca üste koyabilir ve yalnızca üstten alabilirsiniz. Aynı işlev çağrısı için de geçerlidir. A işlevi B işlevini çağırır , ikincisi C işlevini çağırır . A'dan çıkmak için önce B'den çıkmalısınız ve bunu yapmak için C'den çıkmalısınız . - Bir dakika bekle. Doğru anladıysam, yığının tamamı "yalnızca yığına konan son sayfa alınabilir" ve "önce, son çağrılan işlevden çıkılmalı" şeklinde çıkıyor. Böylece? - Evet. Bu nedenle, işlev çağrılarının sırası "işlev çağrısı yığını" veya basitçe "çağrı yığını" şeklindedir. Last adlı işlev önce sonlandırılmalıdır. Örneğe bakalım: - Tamam. İşlev çağrısıyla ilgili her şey açık sanırım. Ama bu StackTraceElement nedir ? - Java sanal makinesi tüm işlev çağrılarını günlüğe kaydeder. Bu amaçla özel bir koleksiyona sahiptir - yığın. Bir işlev diğerini çağırdığında, JVM bu yığına yeni bir StackTraceElement öğesi yerleştirir. Fonksiyon sona erdiğinde, eleman yığından silinir. Böylece, bu yığın her zaman «işlev çağrısı yığınının» mevcut durumu hakkında güncel bilgileri saklar. - Her StackTraceElementçağrılan yöntem hakkında bilgi içerir. Böylece getMethodName kullanarak bu yöntemin adını alabilirsiniz . - Yukarıdaki örnek bunu gösteriyor:- «Çağrı yığınını» alın:
- for-each döngüsünü kullanarak diziyi yineleyin . Umarım unutmamışsındır.
- Yöntem adlarını System.out'a yazdırın .
2 Diego, Yığın izleme ekranında görev
- Selam dostum! İşte ekranda bir yığın izlemeyi görüntülemek için küçük bir görev.Görevler | |
---|---|
1 | Her yöntem, birbirini çağıran StackTrace Write beş yöntemini döndürmelidir . Her yöntem kendi StackTrace'ini döndürmelidir. |
2 | StackTrace tekrar Birbirini çağıran beş metot yazın. Her yöntem çağıran yönteminin adını döndürmelidir. StackTrace'i kullanarak arayan yöntemini elde edebilirsiniz. |
3 | Yöntem , birbirini çağıran beş yöntemden bu yöntemin çağrıldığı kodun satır numarasını döndürmelidir . Her yöntem, bu yöntemin çağrıldığı kodun satır numarasını döndürmelidir. element.getLineNumber() işlevini kullanın . |
4 | 10 çağrının yığın izlemesi 10 çağrının yığın izini almak için kod yazın. |
5 | Yöntem bir sonuç döndürmelidir - yığın izleme derinliği Yığın izleme derinliğini görüntüleyen ve döndüren bir yöntem yazın. Yığın izleme derinliği, yöntemlerinin sayısıdır (listedeki öğelerin sayısı). |
3 Elly, Hatalar ve İstisnalar
- Selam dostum! Bugün çok ilginç bir dersimiz var. Size istisnalardan bahsedeceğim. İstisna, programdaki hataları kontrol etmek için özel bir mekanizmadır. Programda meydana gelebilecek bazı hata örnekleri aşağıda verilmiştir:- Program, tam diske bir dosya yazmaya çalışır.
- Program, boş referansı saklayan bir değişken yöntemini çağırmaya çalışır.
- Program bir sayıyı 0'a bölmeye çalışır.
- Bir hata oluştuğunda, Java sanal makinesi hatayla ilgili tüm bilgileri içeren özel bir nesne (istisna) oluşturur. Farklı hatalar için farklı istisnalar vardır.
- Daha sonra bu istisna, programı ana yöntemden çıkana kadar mevcut işlevi ve bir sonraki işlevi derhal kesmeye zorlar. Bundan sonra program sonlandırılır. Java geliştiricileri bu işleme "çağrı yığınını geri alma" adını verir.
- Try bloğu içinde bir istisna oluşursa , bu bloktaki kod artık yürütülmez, ancak catch bloğunun yürütülmesi başlar.
- İstisna oluşmadıysa , try bloğu sonuna kadar yürütülür ve catch hiçbir zaman yürütülmez .
4 Elly, RuntimeException, atar
- Bugün başka bir konuyu gündeme getirmeye karar verdim. Java'da, tüm istisnalar iki türe ayrılır - kontrollü/kontrol edilmiş ve kontrolsüz/kontrolsüz . Kontrol edilen istisnalar yakalanmalı , kontrol edilmeyen istisnalar yakalanabilir ancak bu gerekli değildir . - Bir koda bilerek istisnalar atmak mümkün mü? - Kodunuzda istisnaları kendiniz atabilirsiniz. Kendi istisnalarınızı bile yazabilirsiniz. Ama daha sonra bu deliğin derinliklerine ineceğiz. Şimdi Java sanal makinesi tarafından atılan istisnalarla nasıl çalışılacağını öğrenelim. - TAMAM. - ClassNotFoundException ve FileNotFoundException istisnaları isebir yöntemde atılır (görünür), programcının bunları bir yöntemin imzasında (yöntem başlığı) belirtmesi gerekir. Bu tür istisnalar kontrol edilir. Genelde şöyle görünür: - Yani, sadece atmalar yazarız ve istisnaları virgülle ayırarak listeleriz. Sağ? Böylece? - Evet. Ama ilginç bir şey daha var. Aşağıdaki örneğin derlenebilmesi için, method1()' i çağıran yöntemin bu istisnaları yakalaması ya da ileri atması gerekir. Kontrol edilen istisnayı ileriye atmak istiyorsanız, bunu yöntemin başlığında belirtmeniz gerekir . - Bir kez daha, ana yöntemde, başlık ifadesinde throws FileNotFoundException olan bir yöntemi çağırmak istiyorsanız, …o zaman şu iki şeyden birini yapmalısın:- istisnaları yakalamak için FileNotFoundException, …
Tehlikeli bir yöntem olarak adlandırdığınız kodu bir try-catch bloğu ile sarmanız gerekir. - istisnaları yakalamamak için FileNotFoundException, …
5 Risha, Çağrı yığınını yuvarlama, istisnalarda nasıl yapılır
- Size istisnaların nasıl çalıştığı hakkında biraz daha bilgi vermek istiyorum. Aşağıdaki örnek şunu açıklıyor: - Anlamıyorum. - Tamam. Neler olduğunu açıklayacağım. - Soldaki örnekte birkaç metodu zincirleme sırayla çağırıyoruz. Method2()' de özellikle bir istisna yaratır ve fırlatırız (bir hatayı başlatmak için). - Sağdaki örnek ne olduğunu gösteriyor. method2() ' ye bakın . İstisna yaratmanın dönüştüğü şey budur: RuntimeException türünde bir nesne yaratırız , onu özel bir istisna değişkeninde saklarız ve hemen dönüş yönteminden çıkarız . - method1'de , method2 çağrısından sonra bir kontrol var,istisna var mı yok mu; bir istisna varsa, yöntem1 hemen sonlandırılır. Bu kontrol, her (!) Java yöntemi çağrıldıktan sonra dolaylı olarak yapılır. - Vay! - Kesinlikle. - Main metodunda sağdaki kolona try-catch bloğu tarafından bir istisna yakalandığında ne olduğunu yazdım . İstisna yoksa, kod planlandığı gibi çalışmaya devam eder. catch içinde belirtilen türden bir istisna varsa , onu biz hallederiz. - Ve throw ve instanceof ne anlama geliyor? - Soldaki son satıra bakın, yeni RuntimeException(lar) atın. Bu şekilde bir istisna oluşturup atıyoruz. Bu sadece bir örnek. Şimdiye kadar yapmayacağız. - Sağ blokta « а instanceof B » komutunu kullanarak a nesnesinin B tipine sahip olup olmadığını kontrol ederiz . Diğer bir deyişle, özel durum değişkeninde depolanan nesnenin RuntimeException türünde olup olmadığıdır . Mantıklı bir ifadedir. - Şey, biraz daha netleşiyor.6 Diego, İstisna yakalama görevi
- Buraya bak! Diego Amca senin için yakalama konusunda birkaç görev getirdi. Sana şans diliyorum. Bence ihtiyacın olacak. Heh. - Selam dostum! İşte bazı ilginç istisna yakalama görevleri.Yakalama görevleri | |
---|---|
1 | 1. Sayılarla çalışırken istisna Kodu çalıştırdığınızda oluşan istisnayı yakalayın: int a = 42 / 0; Türünü belirterek istisnayı ekranda görüntüleyin |
2 | 2. Dizelerle çalışırken istisna Kod çalıştırıldığında oluşan istisnayı yakalayın: String s = null; String m = s.toLowerCase(); Türünü belirterek istisnayı ekranda görüntüleyin. |
3 | 3. Dizilerle çalışırken istisna Kodu çalıştırdığınızda oluşan istisnayı yakalayın: int[] m = new int[2]; m[8] = 5; Türünü belirterek istisnayı ekranda görüntüleyin. |
4 | 4. Liste koleksiyonlarıyla çalışırken istisna Kod çalıştırıldığında oluşan istisnayı yakalayın: ArrayList<String> list = new ArrayList<String>(); Dizi s = list.get(18); Türünü belirterek istisnayı ekranda görüntüleyin. |
5 | 5. Harita koleksiyonlarıyla çalışırken istisna Kodu çalıştırdığınızda oluşan istisnayı yakalayın: HashMap<String, String> map = new HashMap<String, String>(null); map.put(boş, boş); map.remove(boş); Türünü belirterek istisnayı ekranda görüntüleyin. |
7 Risha, Çoklu yakalama nasıl çalışır?
- Şimdi biraz daha ilginç dersler. Öğretmeyi çok seviyorum. - Size çoklu yakalamanın nasıl çalıştığını anlatmak istiyorum . Aslında çok basit: try bloğunda bir istisna oluştuğunda , program yürütmesi ilk catch'e aktarılır . - Yakalama bloğunun parantez içinde belirtilen türü, istisna nesnesinin türüyle aynıysa, kod yürütme {} içinde başlar. Aksi takdirde bir sonraki yakalamaya gideriz . Kontrol orada tekrarlanır. - Artık catch bloğu yoksa , ancak istisna yakalanmadıysa, ileri atılır ve geçerli yöntem kesintiye uğrar. - Anlıyorum. Bu yakalama, türü istisna türüyle eşleşen yürütülür. - Evet doğru. Aslında, biraz daha karmaşık: Buradaki nokta, sınıfların birbirinden miras alınabilmesidir. «İnek» sınıfı, «Hayvan» sınıfından miras alınmışsa, «İnek» türündeki nesne yalnızca «İnek» türündeki bir değişkende değil, aynı zamanda «Hayvan» türündeki bir değişkende de saklanabilir. . - Ne olmuş? - Tüm istisnalar, İstisna veya RuntimeException sınıflarından miras alındığından (bu da İstisna'dan miras alınır ), hepsi catch (Exception e) veya catch (RuntimeException e) komutları kullanılarak yakalanabilir . - Ne olmuş? - Bu şu demek,ilk olarak, catch(Exception e) komutunu kullanarak herhangi bir istisnayı yakalayabilirsiniz . İkincisi, catch bloklarının sırası önemlidir. Örnekler: - 0'a bölmeden kaynaklanan ArithmeticException, ikinci yakalamada yakalanır. - Aşağıdaki örnekte, ArithmeticException ilk catch'te yakalandı , çünkü tüm istisnaların sınıfları İstisna'dan devralındı. Böylece, İstisna herhangi bir istisnayı yakalar . - Aşağıdaki örnekte, ArithmeticException istisnası yakalanmaz, ancak çağıran yönteme iletilir. - Şimdi daha da netleşiyor. Bu istisnalar o kadar kolay değil. - Öyle görünüyor. Aslında, Java'daki en basit şeylerden biridir. - Buna sevinsem mi üzülsem mi kararsızım…8 Diego, Çoklu istisna yakalama görevleri
- Selam dostum! Dün sarhoş oldum ve görevlerinizi aşırı karmaşık hale getirdim, ama umarım sizin açınızdan herhangi bir dargınlık yoktur ve hepsini çözersiniz? Bu kendi iyiliğin için. Burada:Görevler | |
---|---|
1 | 1. İstisnalar İstisna'dan ve RuntimeException'dan miras alınan iki istisna atan bir yöntem vardır : NullPointerException , ArithmeticException , FileNotFoundException ve URISyntaxException . NullPointerException ve FileNotFoundException'ı yakalamanız gerekir , ancak ArithmeticException ve URISyntaxException'ı yakalamamanız gerekir . Nasıl yapılır? |
2 | 2. İstisnaları yakalamak İstisnadan ardışık olarak miras alınan üç istisna vardır : sınıf İstisna1 genişletir İstisna sınıfı İstisna2 genişletir İstisna1 sınıf İstisna3 genişletir İstisna2 Aşağıdaki şekilde açıklanan bir yöntem vardır: public static void method1(), İstisna1, İstisna2, İstisna3'ü atar Bir yakalama yaz üç İstisna1 , İstisna2 ve İstisna3'ün tümünü yakalamak için blok |
3 | 3. Seçici istisnaları yakalama 1. BEAN.methodThrowExceptions yöntemi tarafından hangi istisnaların atıldığını öğrenin . 2. processExceptions() yöntemi, BEAN.methodThrowExceptions yöntemini çağırmalı ve istisnaları işlemelidir: 2.1. bir FileSystemException istisnası oluşursa, BEAN.log yöntemini çağırarak günlüğe kaydedin ve 2.2'yi ileriye atın. CharConversionException veya başka bir IOException istisnası oluşursa, BEAN.log yöntemini çağırarak günlüğe kaydetmeniz yeterlidir. 3. İlettiğiniz istisnanın sınıfını/türünü 2.1'de ekleyin. processExceptions ()' a yöntem imzası 4. Kalan istisnayı main() yönteminde işleyin ve günlüğe kaydedin. try..catch kullanın İpucu: Yakalamak istemediğiniz MyException istisnasını yakaladıysanız , aşağıdaki kodu kullanarak onu ileri atabilirsiniz: catch (MyException e) { throw e; } |
4 | 4. Kontrol edilen istisnaları yakalama processExceptions() yöntemindeki tüm kontrol edilen istisnaları işleyin . Meydana gelen kontrol edilen her istisnayı ekranda görüntülemeniz gerekir. Yalnızca bir blok try kullanabilirsiniz . |
5 | 5. Denetlenmeyen istisnaları yakalama processExceptions() yöntemindeki tüm denetlenmeyen istisnaları işleyin . printStack() yöntemini kullanarak meydana gelen her istisnanın bir yığın izini ekranda görüntülemeniz gerekir . Yalnızca bir blok try kullanabilirsiniz . |
9 Profesör, İstisnalar üzerine ders
- Bugün süper ilginç bir konumuz var - istisnalar. O sıralar, genç bilim insanları ve programcılar bu konu hakkında çok heyecanlıyken… - Üzgünüm, laboratuvara gitmeliyim. İşte ders notları. Bence kendin çözeceksin. Burada: Java İstisnaları (Oracle Dokümantasyonu) Java'da İstisna Yönetimi (Java T noktası) Java - İstisnaları Ele Alma (öğreticiler noktası) Temel Java İstisnası Ele Alma10 Temmuz
- Amigo, bugünkü ders hakkında ne düşünüyorsun? Pozitron beyniniz henüz çalışmadı mı? Diego'nun görevleri herkesi yıpratmaya yeter. Bir bira anı yaşayalım ve rahatlayalım. Hala ayakta mısın?11 Kaptan Sincap
- Merhaba asker! - Günaydın efendim! - Size harika haberlerim var. İşte becerilerinizi pekiştirmek için hızlı bir kontrol. Bunu her gün yapın ve becerilerinizi çok hızlı bir şekilde geliştireceksiniz. Görevler, Intellij IDEA'da yapılacak şekilde özel olarak tasarlanmıştır.Intellij Idea'da yapılacak ek görevler | |
---|---|
1 | 1. Sıfıra bölme Herhangi bir sayıyı sıfıra bölmeniz ve bölmenin sonucunu ekranda göstermeniz gereken bir public static void partitionByZero() yöntemi oluşturun. DivisionByZero() yöntem çağrısını bir try..catch içine sarın . Exception.printStackTrace() yöntemini kullanarak istisna yığın izini ekrana görüntüleyin . |
2 | 2. 10'dan 0'a geri sayım 10'dan 0'a geri sayım için bir döngü yazın. Gecikme yapmak için Thread.sleep(100) kullanın; Uyku çağrısını bir try..catch içine sarın . |
3 | 3. Bir yöntemi bir try..catch Klavyeden sayıları oku içine sarın. Klavyeden sayıları okumak için ayrı bir readData() yöntemine bir kod yazın . Bu yöntemin tüm gövdesini ( sayıların depolanacağı listenin bildirimi dışında readData() yönteminin içindeki kodun tamamı ) bir try..catch içine sarın . Kullanıcı bir sayı girmek yerine bir metin girerse, yöntemin istisnayı yakalaması ve daha önce girilen tüm sayıları ekrana göstermesi gerekir. Numaraları ekrana göster. Her numara yeni bir satırda olmalıdır. Sayıların sırası tıpkı girdideki gibi olmalıdır. |
4 | 4. Tarih dönüştürücü Klavyeden «08/18/2013» biçiminde bir tarih okuyun. O tarihi «AĞUSTOS 18, 2013» biçiminde ekranda görüntüleyin. Date ve SimpleDateFormat nesnelerini kullanın . |
5 | 5. Ünlüler ve ünsüzler Klavyeden satır okuyan bir program yazınız. Program ekrana iki dizi göstermelidir: 1) birinci dizi ünlüleri içermelidir 2) ikinci dizi girilen metinden ünsüzleri ve noktalama işaretlerini içermelidir. Karakterleri boşluklarla ayırın. Örnek girdi: Dur bak dinle Örnek çıktı: oooie stplklstn |
6 | 6. Kırmızı Başlıklı Kızın Hikayesi 1. Beş sınıf vardır: Kırmızı Başlıklı Kız, büyükanne, börek, oduncu, kurt. 2. Her sınıfın ArrayList türünde iki alanı vardır: kill ve eat. 3. Gerekli nesneler zaten yaratılmıştır (başlık, büyükanne, ...). 4. «Kırmızı Başlıklı Kız» mantığını elde etmek için doğru ilişkiyi (kim kimi yedi ve öldürdü) oluşturun. |
7 | 7. Statik değişiklikleri taşı Kodun derlenmesi için statik değiştiricileri taşı. |
8 | 8. Sayı dizileri listesi Öğeleri sayı dizileri olan bir liste oluşturun. Sırasıyla 5, 2, 4, 7, 0 uzunluğundaki beş nesne dizisini listeye ekleyin. Dizileri herhangi bir veriyle doldurun ve ekranda görüntüleyin. |
9 | 9. On kedi String name alanıyla bir Cat sınıfı oluşturun . Map<String, Cat> sözlüğünü oluşturun , «Ad» - «Kedi» modeline 10 kedi ekleyin. Haritadan bir İsim Seti alın ve seti ekranda görüntüleyin . |
Bonus görevler | |
---|---|
1 | 1. Program derlenmiyor ve çalışmıyor. Düzelt. Görev: Program klavyeden iki dosya adını okumalı ve ilk dosyayı ikinci adla belirtilen konuma kopyalamalıdır. |
2 | 2. Programa yeni işlevler ekleyin. Eski Görev: Program klavyeden iki dosya adını okumalı ve ilk dosyayı ikinci adla belirtilen konuma kopyalamalıdır. Yeni görev: Program klavyeden iki dosya adını okumalı ve ilk dosyayı ikinci adla belirtilen konuma kopyalamalıdır. Belirtilen isimde (kopyalanacak olan) dosya mevcut değilse, program ekrana «Dosya yok» mesajını göstermeli ve dosyayı okumadan önce konsoldan dosya adını bir kez daha okumaya çalışmalıdır. ikinci (hedef) dosyanın adı. |
3 | 3. Algoritmayı öğrenmek ve uygulamak. Klavyeden kelime ve sayı listesini okuyun. Ekrana sözcükleri artan sırada ve sayıları azalan sırada görüntüleyin. Örnek girdi: Kiraz 1 Fasulye 3 Elma 2 0 Karpuz Örnek çıktı: Elma 3 Fasulye 2 Kiraz 1 0 Karpuz |
GO TO FULL VERSION